From d2eee10672f8731fb84ad0550a65e254f122ebd6 Mon Sep 17 00:00:00 2001 From: Aaron Dodson Date: Tue, 3 Dec 2024 14:56:05 -0800 Subject: [PATCH 01/31] chore: Make eslint-config package private. (#2470) --- plugins/eslint-config/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/eslint-config/package.json b/plugins/eslint-config/package.json index ce64e8a7c..36f3f4286 100644 --- a/plugins/eslint-config/package.json +++ b/plugins/eslint-config/package.json @@ -1,6 +1,7 @@ { "name": "@blockly/eslint-config", "version": "4.0.1", + "private": true, "description": "ESlint configuration used by Blockly plugins.", "files": [ "index.js" From 2d4d03f1e35a3608965ebca858bbc8cd8fb5539d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 3 Dec 2024 23:01:02 +0000 Subject: [PATCH 02/31] Publish - @blockly/block-dynamic-connection@0.7.12 - @blockly/block-plus-minus@8.0.12 - @blockly/block-shareable-procedures@5.0.12 - @blockly/block-test@6.0.11 - @blockly/workspace-content-highlight@5.0.12 - @blockly/continuous-toolbox@6.0.12 - @blockly/plugin-cross-tab-copy-paste@6.0.12 - @blockly/dev-scripts@4.0.7 - @blockly/dev-tools@8.0.12 - @blockly/disable-top-blocks@0.5.12 - @blockly/field-angle@5.0.12 - @blockly/field-bitmap@5.0.12 - @blockly/field-colour@5.0.12 - @blockly/field-colour-hsv-sliders@5.0.12 - @blockly/field-date@9.0.12 - @blockly/field-dependent-dropdown@4.0.12 - @blockly/field-grid-dropdown@5.0.12 - @blockly/field-multilineinput@5.0.13 - @blockly/field-slider@7.0.12 - @blockly/fixed-edges@5.0.12 - @blockly/keyboard-navigation@0.6.12 - @blockly/plugin-modal@7.0.12 - @blockly/plugin-scroll-options@6.0.12 - @blockly/shadow-block-converter@6.0.13 - @blockly/plugin-strict-connection-checker@5.0.12 - @blockly/suggested-blocks@5.0.12 - @blockly/theme-dark@7.0.10 - @blockly/theme-deuteranopia@6.0.10 - @blockly/theme-highcontrast@6.0.10 - @blockly/theme-modern@6.0.10 - @blockly/theme-tritanopia@6.0.10 - @blockly/toolbox-search@2.0.12 - @blockly/plugin-typed-variable-modal@8.0.12 - @blockly/workspace-backpack@6.0.12 - @blockly/workspace-minimap@0.2.12 - @blockly/plugin-workspace-search@9.1.6 - @blockly/zoom-to-fit@6.0.12 --- plugins/block-dynamic-connection/CHANGELOG.md | 8 ++++++++ plugins/block-dynamic-connection/package-lock.json | 4 ++-- plugins/block-dynamic-connection/package.json | 6 +++--- plugins/block-plus-minus/CHANGELOG.md | 8 ++++++++ plugins/block-plus-minus/package-lock.json | 4 ++-- plugins/block-plus-minus/package.json | 6 +++--- plugins/block-shareable-procedures/CHANGELOG.md | 8 ++++++++ .../block-shareable-procedures/package-lock.json | 4 ++-- plugins/block-shareable-procedures/package.json | 6 +++--- plugins/block-test/CHANGELOG.md | 8 ++++++++ plugins/block-test/package-lock.json | 6 +++--- plugins/block-test/package.json | 4 ++-- plugins/content-highlight/CHANGELOG.md | 8 ++++++++ plugins/content-highlight/package-lock.json | 4 ++-- plugins/content-highlight/package.json | 6 +++--- plugins/continuous-toolbox/CHANGELOG.md | 8 ++++++++ plugins/continuous-toolbox/package-lock.json | 8 ++++---- plugins/continuous-toolbox/package.json | 6 +++--- plugins/cross-tab-copy-paste/CHANGELOG.md | 8 ++++++++ plugins/cross-tab-copy-paste/package-lock.json | 8 ++++---- plugins/cross-tab-copy-paste/package.json | 6 +++--- plugins/dev-scripts/CHANGELOG.md | 8 ++++++++ plugins/dev-scripts/package-lock.json | 4 ++-- plugins/dev-scripts/package.json | 2 +- plugins/dev-tools/CHANGELOG.md | 8 ++++++++ plugins/dev-tools/package-lock.json | 4 ++-- plugins/dev-tools/package.json | 14 +++++++------- plugins/disable-top-blocks/CHANGELOG.md | 8 ++++++++ plugins/disable-top-blocks/package-lock.json | 8 ++++---- plugins/disable-top-blocks/package.json | 6 +++--- plugins/field-angle/CHANGELOG.md | 8 ++++++++ plugins/field-angle/package-lock.json | 4 ++-- plugins/field-angle/package.json | 6 +++--- plugins/field-bitmap/CHANGELOG.md | 8 ++++++++ plugins/field-bitmap/package-lock.json | 4 ++-- plugins/field-bitmap/package.json | 6 +++--- plugins/field-colour-hsv-sliders/CHANGELOG.md | 8 ++++++++ plugins/field-colour-hsv-sliders/package-lock.json | 4 ++-- plugins/field-colour-hsv-sliders/package.json | 8 ++++---- plugins/field-colour/CHANGELOG.md | 8 ++++++++ plugins/field-colour/package-lock.json | 4 ++-- plugins/field-colour/package.json | 6 +++--- plugins/field-date/CHANGELOG.md | 8 ++++++++ plugins/field-date/package-lock.json | 4 ++-- plugins/field-date/package.json | 6 +++--- plugins/field-dependent-dropdown/CHANGELOG.md | 8 ++++++++ plugins/field-dependent-dropdown/package-lock.json | 4 ++-- plugins/field-dependent-dropdown/package.json | 6 +++--- plugins/field-grid-dropdown/CHANGELOG.md | 8 ++++++++ plugins/field-grid-dropdown/package-lock.json | 4 ++-- plugins/field-grid-dropdown/package.json | 6 +++--- plugins/field-multilineinput/CHANGELOG.md | 8 ++++++++ plugins/field-multilineinput/package-lock.json | 4 ++-- plugins/field-multilineinput/package.json | 6 +++--- plugins/field-slider/CHANGELOG.md | 8 ++++++++ plugins/field-slider/package-lock.json | 4 ++-- plugins/field-slider/package.json | 6 +++--- plugins/fixed-edges/CHANGELOG.md | 8 ++++++++ plugins/fixed-edges/package-lock.json | 8 ++++---- plugins/fixed-edges/package.json | 6 +++--- plugins/keyboard-navigation/CHANGELOG.md | 8 ++++++++ plugins/keyboard-navigation/package-lock.json | 4 ++-- plugins/keyboard-navigation/package.json | 6 +++--- plugins/modal/CHANGELOG.md | 8 ++++++++ plugins/modal/package-lock.json | 4 ++-- plugins/modal/package.json | 6 +++--- plugins/scroll-options/CHANGELOG.md | 8 ++++++++ plugins/scroll-options/package-lock.json | 4 ++-- plugins/scroll-options/package.json | 6 +++--- plugins/shadow-block-converter/CHANGELOG.md | 8 ++++++++ plugins/shadow-block-converter/package-lock.json | 8 ++++---- plugins/shadow-block-converter/package.json | 6 +++--- plugins/strict-connection-checker/CHANGELOG.md | 8 ++++++++ .../strict-connection-checker/package-lock.json | 4 ++-- plugins/strict-connection-checker/package.json | 6 +++--- plugins/suggested-blocks/CHANGELOG.md | 8 ++++++++ plugins/suggested-blocks/package-lock.json | 4 ++-- plugins/suggested-blocks/package.json | 6 +++--- plugins/theme-dark/CHANGELOG.md | 8 ++++++++ plugins/theme-dark/package-lock.json | 6 +++--- plugins/theme-dark/package.json | 4 ++-- plugins/theme-deuteranopia/CHANGELOG.md | 8 ++++++++ plugins/theme-deuteranopia/package-lock.json | 6 +++--- plugins/theme-deuteranopia/package.json | 4 ++-- plugins/theme-highcontrast/CHANGELOG.md | 8 ++++++++ plugins/theme-highcontrast/package-lock.json | 6 +++--- plugins/theme-highcontrast/package.json | 4 ++-- plugins/theme-modern/CHANGELOG.md | 8 ++++++++ plugins/theme-modern/package-lock.json | 6 +++--- plugins/theme-modern/package.json | 4 ++-- plugins/theme-tritanopia/CHANGELOG.md | 8 ++++++++ plugins/theme-tritanopia/package-lock.json | 6 +++--- plugins/theme-tritanopia/package.json | 4 ++-- plugins/toolbox-search/CHANGELOG.md | 8 ++++++++ plugins/toolbox-search/package-lock.json | 4 ++-- plugins/toolbox-search/package.json | 6 +++--- plugins/typed-variable-modal/CHANGELOG.md | 8 ++++++++ plugins/typed-variable-modal/package-lock.json | 4 ++-- plugins/typed-variable-modal/package.json | 8 ++++---- plugins/workspace-backpack/CHANGELOG.md | 8 ++++++++ plugins/workspace-backpack/package-lock.json | 4 ++-- plugins/workspace-backpack/package.json | 6 +++--- plugins/workspace-minimap/CHANGELOG.md | 8 ++++++++ plugins/workspace-minimap/package-lock.json | 4 ++-- plugins/workspace-minimap/package.json | 6 +++--- plugins/workspace-search/CHANGELOG.md | 8 ++++++++ plugins/workspace-search/package-lock.json | 4 ++-- plugins/workspace-search/package.json | 6 +++--- plugins/zoom-to-fit/CHANGELOG.md | 8 ++++++++ plugins/zoom-to-fit/package-lock.json | 4 ++-- plugins/zoom-to-fit/package.json | 6 +++--- 111 files changed, 495 insertions(+), 199 deletions(-) diff --git a/plugins/block-dynamic-connection/CHANGELOG.md b/plugins/block-dynamic-connection/CHANGELOG.md index 03bd02926..0ba60dc14 100644 --- a/plugins/block-dynamic-connection/CHANGELOG.md +++ b/plugins/block-dynamic-connection/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.7.12](https://github.com/google/blockly-samples/compare/@blockly/block-dynamic-connection@0.7.11...@blockly/block-dynamic-connection@0.7.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/block-dynamic-connection + + + + + ## [0.7.11](https://github.com/google/blockly-samples/compare/@blockly/block-dynamic-connection@0.7.10...@blockly/block-dynamic-connection@0.7.11) (2024-11-07) **Note:** Version bump only for package @blockly/block-dynamic-connection diff --git a/plugins/block-dynamic-connection/package-lock.json b/plugins/block-dynamic-connection/package-lock.json index 261a044ae..9787d0525 100644 --- a/plugins/block-dynamic-connection/package-lock.json +++ b/plugins/block-dynamic-connection/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/block-dynamic-connection", - "version": "0.7.11", + "version": "0.7.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/block-dynamic-connection", - "version": "0.7.11", + "version": "0.7.12", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/block-dynamic-connection/package.json b/plugins/block-dynamic-connection/package.json index de9fae96b..d23a6046c 100644 --- a/plugins/block-dynamic-connection/package.json +++ b/plugins/block-dynamic-connection/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/block-dynamic-connection", - "version": "0.7.11", + "version": "0.7.12", "description": "A group of blocks that add connections dynamically.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,8 +40,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.2.0", "mocha": "^10.2.0", "typescript": "^5.4.5" diff --git a/plugins/block-plus-minus/CHANGELOG.md b/plugins/block-plus-minus/CHANGELOG.md index b4be0ea9b..696eaf6f3 100644 --- a/plugins/block-plus-minus/CHANGELOG.md +++ b/plugins/block-plus-minus/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.0.12](https://github.com/google/blockly-samples/compare/@blockly/block-plus-minus@8.0.11...@blockly/block-plus-minus@8.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/block-plus-minus + + + + + ## [8.0.11](https://github.com/google/blockly-samples/compare/@blockly/block-plus-minus@8.0.10...@blockly/block-plus-minus@8.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/block-plus-minus diff --git a/plugins/block-plus-minus/package-lock.json b/plugins/block-plus-minus/package-lock.json index f2279d352..a31843f83 100644 --- a/plugins/block-plus-minus/package-lock.json +++ b/plugins/block-plus-minus/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/block-plus-minus", - "version": "8.0.11", + "version": "8.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/block-plus-minus", - "version": "8.0.11", + "version": "8.0.12", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/block-plus-minus/package.json b/plugins/block-plus-minus/package.json index ed8c2ffe4..f527e38c0 100644 --- a/plugins/block-plus-minus/package.json +++ b/plugins/block-plus-minus/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/block-plus-minus", - "version": "8.0.11", + "version": "8.0.12", "description": "A group of blocks that replace the built-in mutator UI with a +/- based UI.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,8 +39,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.2.0", "mocha": "^10.2.0", "sinon": "^9.0.1" diff --git a/plugins/block-shareable-procedures/CHANGELOG.md b/plugins/block-shareable-procedures/CHANGELOG.md index 710190388..6c19d9503 100644 --- a/plugins/block-shareable-procedures/CHANGELOG.md +++ b/plugins/block-shareable-procedures/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/block-shareable-procedures@5.0.11...@blockly/block-shareable-procedures@5.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/block-shareable-procedures + + + + + ## [5.0.11](https://github.com/google/blockly-samples/compare/@blockly/block-shareable-procedures@5.0.10...@blockly/block-shareable-procedures@5.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/block-shareable-procedures diff --git a/plugins/block-shareable-procedures/package-lock.json b/plugins/block-shareable-procedures/package-lock.json index 6627a2a8d..37c740879 100644 --- a/plugins/block-shareable-procedures/package-lock.json +++ b/plugins/block-shareable-procedures/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/block-shareable-procedures", - "version": "5.0.11", + "version": "5.0.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/block-shareable-procedures", - "version": "5.0.11", + "version": "5.0.12", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.7", diff --git a/plugins/block-shareable-procedures/package.json b/plugins/block-shareable-procedures/package.json index 48ce23de2..3705bb030 100644 --- a/plugins/block-shareable-procedures/package.json +++ b/plugins/block-shareable-procedures/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/block-shareable-procedures", - "version": "5.0.11", + "version": "5.0.12", "description": "A plugin that adds procedure blocks which are backed by explicit data models.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,8 +41,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.3.7", "jsdom": "^16.4.0", "jsdom-global": "^3.0.2", diff --git a/plugins/block-test/CHANGELOG.md b/plugins/block-test/CHANGELOG.md index 9dfe1872d..ee1eec88e 100644 --- a/plugins/block-test/CHANGELOG.md +++ b/plugins/block-test/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.11](https://github.com/google/blockly-samples/compare/@blockly/block-test@6.0.10...@blockly/block-test@6.0.11) (2024-12-03) + +**Note:** Version bump only for package @blockly/block-test + + + + + ## [6.0.10](https://github.com/google/blockly-samples/compare/@blockly/block-test@6.0.9...@blockly/block-test@6.0.10) (2024-11-07) **Note:** Version bump only for package @blockly/block-test diff --git a/plugins/block-test/package-lock.json b/plugins/block-test/package-lock.json index b57a6f292..14cc1222f 100644 --- a/plugins/block-test/package-lock.json +++ b/plugins/block-test/package-lock.json @@ -1,15 +1,15 @@ { "name": "@blockly/block-test", - "version": "6.0.10", + "version": "6.0.11", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/block-test", - "version": "6.0.10", + "version": "6.0.11", "license": "Apache 2.0", "devDependencies": { - "@blockly/dev-scripts": "^4.0.6" + "@blockly/dev-scripts": "^4.0.7" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/block-test/package.json b/plugins/block-test/package.json index e0492d196..b24df6bcd 100644 --- a/plugins/block-test/package.json +++ b/plugins/block-test/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/block-test", - "version": "6.0.10", + "version": "6.0.11", "description": "A group of Blockly test blocks.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,7 +39,7 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6" + "@blockly/dev-scripts": "^4.0.7" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/content-highlight/CHANGELOG.md b/plugins/content-highlight/CHANGELOG.md index 5f6adec1c..f1182fad1 100644 --- a/plugins/content-highlight/CHANGELOG.md +++ b/plugins/content-highlight/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/workspace-content-highlight@5.0.11...@blockly/workspace-content-highlight@5.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/workspace-content-highlight + + + + + ## [5.0.11](https://github.com/google/blockly-samples/compare/@blockly/workspace-content-highlight@5.0.10...@blockly/workspace-content-highlight@5.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/workspace-content-highlight diff --git a/plugins/content-highlight/package-lock.json b/plugins/content-highlight/package-lock.json index e0ce8cd26..6de82e812 100644 --- a/plugins/content-highlight/package-lock.json +++ b/plugins/content-highlight/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/workspace-content-highlight", - "version": "5.0.11", + "version": "5.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/workspace-content-highlight", - "version": "5.0.11", + "version": "5.0.12", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/content-highlight/package.json b/plugins/content-highlight/package.json index 72286d121..3f7c9db98 100644 --- a/plugins/content-highlight/package.json +++ b/plugins/content-highlight/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/workspace-content-highlight", - "version": "5.0.11", + "version": "5.0.12", "description": "A Blockly workspace plugin that adds a highlight around the content area.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -43,8 +43,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/continuous-toolbox/CHANGELOG.md b/plugins/continuous-toolbox/CHANGELOG.md index 3a73e9ff0..34b0e2b1f 100644 --- a/plugins/continuous-toolbox/CHANGELOG.md +++ b/plugins/continuous-toolbox/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.12](https://github.com/google/blockly-samples/compare/@blockly/continuous-toolbox@6.0.11...@blockly/continuous-toolbox@6.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/continuous-toolbox + + + + + ## [6.0.11](https://github.com/google/blockly-samples/compare/@blockly/continuous-toolbox@6.0.10...@blockly/continuous-toolbox@6.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/continuous-toolbox diff --git a/plugins/continuous-toolbox/package-lock.json b/plugins/continuous-toolbox/package-lock.json index dff8845f3..0a66b566d 100644 --- a/plugins/continuous-toolbox/package-lock.json +++ b/plugins/continuous-toolbox/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/continuous-toolbox", - "version": "6.0.11", + "version": "6.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/continuous-toolbox", - "version": "6.0.11", + "version": "6.0.12", "license": "Apache-2.0", "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11" + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/continuous-toolbox/package.json b/plugins/continuous-toolbox/package.json index 3b3d256e1..585681cae 100644 --- a/plugins/continuous-toolbox/package.json +++ b/plugins/continuous-toolbox/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/continuous-toolbox", - "version": "6.0.11", + "version": "6.0.12", "description": "A Blockly plugin that adds a continous-scrolling style toolbox and flyout", "scripts": { "build": "blockly-scripts build", @@ -39,8 +39,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11" + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/cross-tab-copy-paste/CHANGELOG.md b/plugins/cross-tab-copy-paste/CHANGELOG.md index d75ea6ae9..1983c3803 100644 --- a/plugins/cross-tab-copy-paste/CHANGELOG.md +++ b/plugins/cross-tab-copy-paste/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.12](https://github.com/google/blockly-samples/compare/@blockly/plugin-cross-tab-copy-paste@6.0.11...@blockly/plugin-cross-tab-copy-paste@6.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/plugin-cross-tab-copy-paste + + + + + ## [6.0.11](https://github.com/google/blockly-samples/compare/@blockly/plugin-cross-tab-copy-paste@6.0.10...@blockly/plugin-cross-tab-copy-paste@6.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/plugin-cross-tab-copy-paste diff --git a/plugins/cross-tab-copy-paste/package-lock.json b/plugins/cross-tab-copy-paste/package-lock.json index d2473f494..61c82dc07 100644 --- a/plugins/cross-tab-copy-paste/package-lock.json +++ b/plugins/cross-tab-copy-paste/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/plugin-cross-tab-copy-paste", - "version": "6.0.11", + "version": "6.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-cross-tab-copy-paste", - "version": "6.0.11", + "version": "6.0.12", "license": "Apache-2.0", "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11" + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/cross-tab-copy-paste/package.json b/plugins/cross-tab-copy-paste/package.json index 53abf093a..6467e5b18 100644 --- a/plugins/cross-tab-copy-paste/package.json +++ b/plugins/cross-tab-copy-paste/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-cross-tab-copy-paste", - "version": "6.0.11", + "version": "6.0.12", "description": "Allows you to copy blocks with cross-tab.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,8 +40,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11" + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/dev-scripts/CHANGELOG.md b/plugins/dev-scripts/CHANGELOG.md index 50ee3701f..5a7e8d620 100644 --- a/plugins/dev-scripts/CHANGELOG.md +++ b/plugins/dev-scripts/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.0.7](https://github.com/google/blockly-samples/compare/@blockly/dev-scripts@4.0.6...@blockly/dev-scripts@4.0.7) (2024-12-03) + +**Note:** Version bump only for package @blockly/dev-scripts + + + + + ## [4.0.6](https://github.com/google/blockly-samples/compare/@blockly/dev-scripts@4.0.5...@blockly/dev-scripts@4.0.6) (2024-11-07) diff --git a/plugins/dev-scripts/package-lock.json b/plugins/dev-scripts/package-lock.json index 1c2c14127..03b53c7b1 100644 --- a/plugins/dev-scripts/package-lock.json +++ b/plugins/dev-scripts/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/dev-scripts", - "version": "4.0.6", + "version": "4.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/dev-scripts", - "version": "4.0.6", + "version": "4.0.7", "license": "Apache-2.0", "dependencies": { "@babel/code-frame": "^7.8.3", diff --git a/plugins/dev-scripts/package.json b/plugins/dev-scripts/package.json index feab7bb06..8add4d19e 100644 --- a/plugins/dev-scripts/package.json +++ b/plugins/dev-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/dev-scripts", - "version": "4.0.6", + "version": "4.0.7", "description": "Configuration and scripts for Blockly plugins.", "scripts": { "lint": "eslint ." diff --git a/plugins/dev-tools/CHANGELOG.md b/plugins/dev-tools/CHANGELOG.md index 32210b103..2117407ce 100644 --- a/plugins/dev-tools/CHANGELOG.md +++ b/plugins/dev-tools/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.0.12](https://github.com/google/blockly-samples/compare/@blockly/dev-tools@8.0.11...@blockly/dev-tools@8.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/dev-tools + + + + + ## [8.0.11](https://github.com/google/blockly-samples/compare/@blockly/dev-tools@8.0.10...@blockly/dev-tools@8.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/dev-tools diff --git a/plugins/dev-tools/package-lock.json b/plugins/dev-tools/package-lock.json index c8e73b7be..3f6ea55ee 100644 --- a/plugins/dev-tools/package-lock.json +++ b/plugins/dev-tools/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/dev-tools", - "version": "8.0.11", + "version": "8.0.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/dev-tools", - "version": "8.0.11", + "version": "8.0.12", "license": "Apache-2.0", "dependencies": { "chai": "^4.2.0", diff --git a/plugins/dev-tools/package.json b/plugins/dev-tools/package.json index dc0903be2..c2484e685 100644 --- a/plugins/dev-tools/package.json +++ b/plugins/dev-tools/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/dev-tools", - "version": "8.0.11", + "version": "8.0.12", "description": "A library of common utilities for Blockly extension development.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -38,11 +38,11 @@ "src" ], "dependencies": { - "@blockly/block-test": "^6.0.10", - "@blockly/theme-dark": "^7.0.9", - "@blockly/theme-deuteranopia": "^6.0.9", - "@blockly/theme-highcontrast": "^6.0.9", - "@blockly/theme-tritanopia": "^6.0.9", + "@blockly/block-test": "^6.0.11", + "@blockly/theme-dark": "^7.0.10", + "@blockly/theme-deuteranopia": "^6.0.10", + "@blockly/theme-highcontrast": "^6.0.10", + "@blockly/theme-tritanopia": "^6.0.10", "chai": "^4.2.0", "dat.gui": "^0.7.7", "lodash.assign": "^4.2.0", @@ -51,7 +51,7 @@ "sinon": "^9.0.2" }, "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", + "@blockly/dev-scripts": "^4.0.7", "@types/dat.gui": "^0.7.5" }, "peerDependencies": { diff --git a/plugins/disable-top-blocks/CHANGELOG.md b/plugins/disable-top-blocks/CHANGELOG.md index 668dfba2a..348fdeb75 100644 --- a/plugins/disable-top-blocks/CHANGELOG.md +++ b/plugins/disable-top-blocks/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.5.12](https://github.com/google/blockly-samples/compare/@blockly/disable-top-blocks@0.5.11...@blockly/disable-top-blocks@0.5.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/disable-top-blocks + + + + + ## [0.5.11](https://github.com/google/blockly-samples/compare/@blockly/disable-top-blocks@0.5.10...@blockly/disable-top-blocks@0.5.11) (2024-11-07) **Note:** Version bump only for package @blockly/disable-top-blocks diff --git a/plugins/disable-top-blocks/package-lock.json b/plugins/disable-top-blocks/package-lock.json index 7de7a9e98..79dbe8e54 100644 --- a/plugins/disable-top-blocks/package-lock.json +++ b/plugins/disable-top-blocks/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/disable-top-blocks", - "version": "0.5.11", + "version": "0.5.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/disable-top-blocks", - "version": "0.5.11", + "version": "0.5.12", "license": "Apache-2.0", "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11" + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/disable-top-blocks/package.json b/plugins/disable-top-blocks/package.json index 191929eca..5d87b4f1d 100644 --- a/plugins/disable-top-blocks/package.json +++ b/plugins/disable-top-blocks/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/disable-top-blocks", - "version": "0.5.11", + "version": "0.5.12", "description": "A Blockly plugin that shows the 'disable' context menu option only on non-orphan blocks.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -38,8 +38,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11" + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/field-angle/CHANGELOG.md b/plugins/field-angle/CHANGELOG.md index 5218afaca..9b0c9ddbf 100644 --- a/plugins/field-angle/CHANGELOG.md +++ b/plugins/field-angle/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-angle@5.0.11...@blockly/field-angle@5.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/field-angle + + + + + ## [5.0.11](https://github.com/google/blockly-samples/compare/@blockly/field-angle@5.0.10...@blockly/field-angle@5.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/field-angle diff --git a/plugins/field-angle/package-lock.json b/plugins/field-angle/package-lock.json index 436070e57..b5dad63f8 100644 --- a/plugins/field-angle/package-lock.json +++ b/plugins/field-angle/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-angle", - "version": "5.0.11", + "version": "5.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-angle", - "version": "5.0.11", + "version": "5.0.12", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-angle/package.json b/plugins/field-angle/package.json index bda233683..193f28c63 100644 --- a/plugins/field-angle/package.json +++ b/plugins/field-angle/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-angle", - "version": "5.0.11", + "version": "5.0.12", "description": "A Blockly angle field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,8 +40,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/field-bitmap/CHANGELOG.md b/plugins/field-bitmap/CHANGELOG.md index a9cd64b73..02b524b78 100644 --- a/plugins/field-bitmap/CHANGELOG.md +++ b/plugins/field-bitmap/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-bitmap@5.0.11...@blockly/field-bitmap@5.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/field-bitmap + + + + + ## [5.0.11](https://github.com/google/blockly-samples/compare/@blockly/field-bitmap@5.0.10...@blockly/field-bitmap@5.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/field-bitmap diff --git a/plugins/field-bitmap/package-lock.json b/plugins/field-bitmap/package-lock.json index 9a456cb1b..59fd7d542 100644 --- a/plugins/field-bitmap/package-lock.json +++ b/plugins/field-bitmap/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-bitmap", - "version": "5.0.11", + "version": "5.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-bitmap", - "version": "5.0.11", + "version": "5.0.12", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.6", diff --git a/plugins/field-bitmap/package.json b/plugins/field-bitmap/package.json index 86b6e6282..b12f45723 100644 --- a/plugins/field-bitmap/package.json +++ b/plugins/field-bitmap/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-bitmap", - "version": "5.0.11", + "version": "5.0.12", "description": "A field that lets users input a pixel grid with their mouse.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,8 +40,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.3.6", "mocha": "^10.7.0", "typescript": "^5.4.5" diff --git a/plugins/field-colour-hsv-sliders/CHANGELOG.md b/plugins/field-colour-hsv-sliders/CHANGELOG.md index e6c026128..509e3d621 100644 --- a/plugins/field-colour-hsv-sliders/CHANGELOG.md +++ b/plugins/field-colour-hsv-sliders/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-colour-hsv-sliders@5.0.11...@blockly/field-colour-hsv-sliders@5.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/field-colour-hsv-sliders + + + + + ## [5.0.11](https://github.com/google/blockly-samples/compare/@blockly/field-colour-hsv-sliders@5.0.10...@blockly/field-colour-hsv-sliders@5.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/field-colour-hsv-sliders diff --git a/plugins/field-colour-hsv-sliders/package-lock.json b/plugins/field-colour-hsv-sliders/package-lock.json index e187cca89..5f2b04e4a 100644 --- a/plugins/field-colour-hsv-sliders/package-lock.json +++ b/plugins/field-colour-hsv-sliders/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.11", + "version": "5.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.11", + "version": "5.0.12", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/field-colour-hsv-sliders/package.json b/plugins/field-colour-hsv-sliders/package.json index 1c174d837..f49ae66c7 100644 --- a/plugins/field-colour-hsv-sliders/package.json +++ b/plugins/field-colour-hsv-sliders/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.11", + "version": "5.0.12", "description": "A Blockly colour field using HSV sliders.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,11 +41,11 @@ "src" ], "dependencies": { - "@blockly/field-colour": "^5.0.11" + "@blockly/field-colour": "^5.0.12" }, "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/field-colour/CHANGELOG.md b/plugins/field-colour/CHANGELOG.md index b26a184ea..76b8ae118 100644 --- a/plugins/field-colour/CHANGELOG.md +++ b/plugins/field-colour/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-colour@5.0.11...@blockly/field-colour@5.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/field-colour + + + + + ## [5.0.11](https://github.com/google/blockly-samples/compare/@blockly/field-colour@5.0.10...@blockly/field-colour@5.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/field-colour diff --git a/plugins/field-colour/package-lock.json b/plugins/field-colour/package-lock.json index 001ae2306..f33a7e8f7 100644 --- a/plugins/field-colour/package-lock.json +++ b/plugins/field-colour/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-colour", - "version": "5.0.11", + "version": "5.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-colour", - "version": "5.0.11", + "version": "5.0.12", "license": "Apache-2.0", "devDependencies": { "@typescript-eslint/parser": "^5.59.5", diff --git a/plugins/field-colour/package.json b/plugins/field-colour/package.json index ce5d006dd..e58dacfce 100644 --- a/plugins/field-colour/package.json +++ b/plugins/field-colour/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-colour", - "version": "5.0.11", + "version": "5.0.12", "description": "A Blockly colour field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,8 +40,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "@typescript-eslint/parser": "^5.59.5", "chai": "^4.2.0", "sinon": "^9.0.1", diff --git a/plugins/field-date/CHANGELOG.md b/plugins/field-date/CHANGELOG.md index 8b3e99003..56a96be9c 100644 --- a/plugins/field-date/CHANGELOG.md +++ b/plugins/field-date/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [9.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-date@9.0.11...@blockly/field-date@9.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/field-date + + + + + ## [9.0.11](https://github.com/google/blockly-samples/compare/@blockly/field-date@9.0.10...@blockly/field-date@9.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/field-date diff --git a/plugins/field-date/package-lock.json b/plugins/field-date/package-lock.json index 3188571ff..687218a70 100644 --- a/plugins/field-date/package-lock.json +++ b/plugins/field-date/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-date", - "version": "9.0.11", + "version": "9.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-date", - "version": "9.0.11", + "version": "9.0.12", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-date/package.json b/plugins/field-date/package.json index ea07be08e..c2c572aa9 100644 --- a/plugins/field-date/package.json +++ b/plugins/field-date/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-date", - "version": "9.0.11", + "version": "9.0.12", "description": "A Blockly date picker field that uses the browser's date picker.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -42,8 +42,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/field-dependent-dropdown/CHANGELOG.md b/plugins/field-dependent-dropdown/CHANGELOG.md index b54a73474..42ed0296b 100644 --- a/plugins/field-dependent-dropdown/CHANGELOG.md +++ b/plugins/field-dependent-dropdown/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-dependent-dropdown@4.0.11...@blockly/field-dependent-dropdown@4.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/field-dependent-dropdown + + + + + ## [4.0.11](https://github.com/google/blockly-samples/compare/@blockly/field-dependent-dropdown@4.0.10...@blockly/field-dependent-dropdown@4.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/field-dependent-dropdown diff --git a/plugins/field-dependent-dropdown/package-lock.json b/plugins/field-dependent-dropdown/package-lock.json index 7645a13aa..1bd3fae2a 100644 --- a/plugins/field-dependent-dropdown/package-lock.json +++ b/plugins/field-dependent-dropdown/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-dependent-dropdown", - "version": "4.0.11", + "version": "4.0.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/field-dependent-dropdown", - "version": "4.0.11", + "version": "4.0.12", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-dependent-dropdown/package.json b/plugins/field-dependent-dropdown/package.json index 35f331a1a..5472049d1 100644 --- a/plugins/field-dependent-dropdown/package.json +++ b/plugins/field-dependent-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-dependent-dropdown", - "version": "4.0.11", + "version": "4.0.12", "description": "A Blockly dropdown field that automatically updates its available options depending on the value of another field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,8 +41,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/field-grid-dropdown/CHANGELOG.md b/plugins/field-grid-dropdown/CHANGELOG.md index 9494ee524..62800a477 100644 --- a/plugins/field-grid-dropdown/CHANGELOG.md +++ b/plugins/field-grid-dropdown/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-grid-dropdown@5.0.11...@blockly/field-grid-dropdown@5.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/field-grid-dropdown + + + + + ## [5.0.11](https://github.com/google/blockly-samples/compare/@blockly/field-grid-dropdown@5.0.10...@blockly/field-grid-dropdown@5.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/field-grid-dropdown diff --git a/plugins/field-grid-dropdown/package-lock.json b/plugins/field-grid-dropdown/package-lock.json index c60ad3580..f8208f761 100644 --- a/plugins/field-grid-dropdown/package-lock.json +++ b/plugins/field-grid-dropdown/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-grid-dropdown", - "version": "5.0.11", + "version": "5.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-grid-dropdown", - "version": "5.0.11", + "version": "5.0.12", "license": "Apache 2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/field-grid-dropdown/package.json b/plugins/field-grid-dropdown/package.json index 08495cfb3..a677bc636 100644 --- a/plugins/field-grid-dropdown/package.json +++ b/plugins/field-grid-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-grid-dropdown", - "version": "5.0.11", + "version": "5.0.12", "description": "A Blockly dropdown field with grid layout.", "scripts": { "build": "blockly-scripts build", @@ -39,8 +39,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/field-multilineinput/CHANGELOG.md b/plugins/field-multilineinput/CHANGELOG.md index 54699b357..914262beb 100644 --- a/plugins/field-multilineinput/CHANGELOG.md +++ b/plugins/field-multilineinput/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-multilineinput@5.0.12...@blockly/field-multilineinput@5.0.13) (2024-12-03) + +**Note:** Version bump only for package @blockly/field-multilineinput + + + + + ## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-multilineinput@5.0.11...@blockly/field-multilineinput@5.0.12) (2024-11-07) **Note:** Version bump only for package @blockly/field-multilineinput diff --git a/plugins/field-multilineinput/package-lock.json b/plugins/field-multilineinput/package-lock.json index 0bde5c2d7..64369c8e7 100644 --- a/plugins/field-multilineinput/package-lock.json +++ b/plugins/field-multilineinput/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-multilineinput", - "version": "5.0.12", + "version": "5.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-multilineinput", - "version": "5.0.12", + "version": "5.0.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-multilineinput/package.json b/plugins/field-multilineinput/package.json index c6d94237a..edbec9a5b 100644 --- a/plugins/field-multilineinput/package.json +++ b/plugins/field-multilineinput/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-multilineinput", - "version": "5.0.12", + "version": "5.0.13", "description": "A Blockly multilineinput field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,8 +40,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/field-slider/CHANGELOG.md b/plugins/field-slider/CHANGELOG.md index 530bc9e49..daa6d6aa2 100644 --- a/plugins/field-slider/CHANGELOG.md +++ b/plugins/field-slider/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-slider@7.0.11...@blockly/field-slider@7.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/field-slider + + + + + ## [7.0.11](https://github.com/google/blockly-samples/compare/@blockly/field-slider@7.0.10...@blockly/field-slider@7.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/field-slider diff --git a/plugins/field-slider/package-lock.json b/plugins/field-slider/package-lock.json index 9b772fed0..b5318875a 100644 --- a/plugins/field-slider/package-lock.json +++ b/plugins/field-slider/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-slider", - "version": "7.0.11", + "version": "7.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-slider", - "version": "7.0.11", + "version": "7.0.12", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-slider/package.json b/plugins/field-slider/package.json index 043a38ea9..04264d6f8 100644 --- a/plugins/field-slider/package.json +++ b/plugins/field-slider/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-slider", - "version": "7.0.11", + "version": "7.0.12", "description": "A Blockly slider field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,8 +39,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/fixed-edges/CHANGELOG.md b/plugins/fixed-edges/CHANGELOG.md index 70dfe75db..d1402978a 100644 --- a/plugins/fixed-edges/CHANGELOG.md +++ b/plugins/fixed-edges/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/fixed-edges@5.0.11...@blockly/fixed-edges@5.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/fixed-edges + + + + + ## [5.0.11](https://github.com/google/blockly-samples/compare/@blockly/fixed-edges@5.0.10...@blockly/fixed-edges@5.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/fixed-edges diff --git a/plugins/fixed-edges/package-lock.json b/plugins/fixed-edges/package-lock.json index 955596bf5..07eab5451 100644 --- a/plugins/fixed-edges/package-lock.json +++ b/plugins/fixed-edges/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/fixed-edges", - "version": "5.0.11", + "version": "5.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/fixed-edges", - "version": "5.0.11", + "version": "5.0.12", "license": "Apache-2.0", "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11" + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/fixed-edges/package.json b/plugins/fixed-edges/package.json index 915ef9df5..18e424b58 100644 --- a/plugins/fixed-edges/package.json +++ b/plugins/fixed-edges/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/fixed-edges", - "version": "5.0.11", + "version": "5.0.12", "description": "A plugin that provides a MetricsManager that can be used to prevent the workspace from expanding to the top/left/right/bottom when blocks are dragged to that edge.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -38,8 +38,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11" + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/keyboard-navigation/CHANGELOG.md b/plugins/keyboard-navigation/CHANGELOG.md index 91f7f28b8..d97945040 100644 --- a/plugins/keyboard-navigation/CHANGELOG.md +++ b/plugins/keyboard-navigation/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.6.12](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.11...@blockly/keyboard-navigation@0.6.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/keyboard-navigation + + + + + ## [0.6.11](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.10...@blockly/keyboard-navigation@0.6.11) (2024-11-07) **Note:** Version bump only for package @blockly/keyboard-navigation diff --git a/plugins/keyboard-navigation/package-lock.json b/plugins/keyboard-navigation/package-lock.json index a8cd4831c..4fbed2f0f 100644 --- a/plugins/keyboard-navigation/package-lock.json +++ b/plugins/keyboard-navigation/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/keyboard-navigation", - "version": "0.6.11", + "version": "0.6.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/keyboard-navigation", - "version": "0.6.11", + "version": "0.6.12", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/keyboard-navigation/package.json b/plugins/keyboard-navigation/package.json index 0193fb9af..21a00218e 100644 --- a/plugins/keyboard-navigation/package.json +++ b/plugins/keyboard-navigation/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/keyboard-navigation", - "version": "0.6.11", + "version": "0.6.12", "description": "A Blockly plugin that adds keyboard navigation support.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,8 +39,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.2.0", "jsdom": "^16.4.0", "jsdom-global": "^3.0.2", diff --git a/plugins/modal/CHANGELOG.md b/plugins/modal/CHANGELOG.md index e537ac675..6d03b178f 100644 --- a/plugins/modal/CHANGELOG.md +++ b/plugins/modal/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.0.12](https://github.com/google/blockly-samples/compare/@blockly/plugin-modal@7.0.11...@blockly/plugin-modal@7.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/plugin-modal + + + + + ## [7.0.11](https://github.com/google/blockly-samples/compare/@blockly/plugin-modal@7.0.10...@blockly/plugin-modal@7.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/plugin-modal diff --git a/plugins/modal/package-lock.json b/plugins/modal/package-lock.json index 56372b293..d45abe603 100644 --- a/plugins/modal/package-lock.json +++ b/plugins/modal/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-modal", - "version": "7.0.11", + "version": "7.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-modal", - "version": "7.0.11", + "version": "7.0.12", "license": "Apache 2.0", "devDependencies": { "jsdom": "^19.0.0", diff --git a/plugins/modal/package.json b/plugins/modal/package.json index 74e2c988b..e67ef3918 100644 --- a/plugins/modal/package.json +++ b/plugins/modal/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-modal", - "version": "7.0.11", + "version": "7.0.12", "description": "A Blockly plugin that creates a modal.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,8 +39,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "jsdom": "^19.0.0", "jsdom-global": "3.0.2", "mocha": "^10.1.0", diff --git a/plugins/scroll-options/CHANGELOG.md b/plugins/scroll-options/CHANGELOG.md index 37895e55b..b8809b865 100644 --- a/plugins/scroll-options/CHANGELOG.md +++ b/plugins/scroll-options/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.12](https://github.com/google/blockly-samples/compare/@blockly/plugin-scroll-options@6.0.11...@blockly/plugin-scroll-options@6.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/plugin-scroll-options + + + + + ## [6.0.11](https://github.com/google/blockly-samples/compare/@blockly/plugin-scroll-options@6.0.10...@blockly/plugin-scroll-options@6.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/plugin-scroll-options diff --git a/plugins/scroll-options/package-lock.json b/plugins/scroll-options/package-lock.json index fd8ed5d86..bc464db97 100644 --- a/plugins/scroll-options/package-lock.json +++ b/plugins/scroll-options/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-scroll-options", - "version": "6.0.11", + "version": "6.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-scroll-options", - "version": "6.0.11", + "version": "6.0.12", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/scroll-options/package.json b/plugins/scroll-options/package.json index 38294a7f0..22d40b93d 100644 --- a/plugins/scroll-options/package.json +++ b/plugins/scroll-options/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-scroll-options", - "version": "6.0.11", + "version": "6.0.12", "description": "A Blockly plugin that adds advanced scroll options such as scroll-on-drag and scroll while holding a block.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,8 +39,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/shadow-block-converter/CHANGELOG.md b/plugins/shadow-block-converter/CHANGELOG.md index e3bda47a3..e5dd8e343 100644 --- a/plugins/shadow-block-converter/CHANGELOG.md +++ b/plugins/shadow-block-converter/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.13](https://github.com/google/blockly-samples/compare/@blockly/shadow-block-converter@6.0.12...@blockly/shadow-block-converter@6.0.13) (2024-12-03) + +**Note:** Version bump only for package @blockly/shadow-block-converter + + + + + ## [6.0.12](https://github.com/google/blockly-samples/compare/@blockly/shadow-block-converter@6.0.11...@blockly/shadow-block-converter@6.0.12) (2024-11-07) **Note:** Version bump only for package @blockly/shadow-block-converter diff --git a/plugins/shadow-block-converter/package-lock.json b/plugins/shadow-block-converter/package-lock.json index 693140389..dd88c1b24 100644 --- a/plugins/shadow-block-converter/package-lock.json +++ b/plugins/shadow-block-converter/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/shadow-block-converter", - "version": "6.0.12", + "version": "6.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/shadow-block-converter", - "version": "6.0.12", + "version": "6.0.13", "license": "Apache-2.0", "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.2.0", "jsdom": "^19.0.0", "jsdom-global": "^3.0.2", diff --git a/plugins/shadow-block-converter/package.json b/plugins/shadow-block-converter/package.json index 41c6e8cd8..299d3a2ea 100644 --- a/plugins/shadow-block-converter/package.json +++ b/plugins/shadow-block-converter/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/shadow-block-converter", - "version": "6.0.12", + "version": "6.0.13", "description": "A workspace change listener that converts shadow blocks to real blocks when the user edits them.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,8 +39,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.2.0", "jsdom": "^19.0.0", "jsdom-global": "^3.0.2", diff --git a/plugins/strict-connection-checker/CHANGELOG.md b/plugins/strict-connection-checker/CHANGELOG.md index b33ff707c..8a940110a 100644 --- a/plugins/strict-connection-checker/CHANGELOG.md +++ b/plugins/strict-connection-checker/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/plugin-strict-connection-checker@5.0.11...@blockly/plugin-strict-connection-checker@5.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/plugin-strict-connection-checker + + + + + ## [5.0.11](https://github.com/google/blockly-samples/compare/@blockly/plugin-strict-connection-checker@5.0.10...@blockly/plugin-strict-connection-checker@5.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/plugin-strict-connection-checker diff --git a/plugins/strict-connection-checker/package-lock.json b/plugins/strict-connection-checker/package-lock.json index edc591e1d..aef50aa1f 100644 --- a/plugins/strict-connection-checker/package-lock.json +++ b/plugins/strict-connection-checker/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-strict-connection-checker", - "version": "5.0.11", + "version": "5.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-strict-connection-checker", - "version": "5.0.11", + "version": "5.0.12", "license": "Apache 2.0", "devDependencies": { "chai": "^4.2.0" diff --git a/plugins/strict-connection-checker/package.json b/plugins/strict-connection-checker/package.json index cd6acf00d..f527e2280 100644 --- a/plugins/strict-connection-checker/package.json +++ b/plugins/strict-connection-checker/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-strict-connection-checker", - "version": "5.0.11", + "version": "5.0.12", "description": "A connection checker that prevents blocks that don't provide type information from being connected to blocks that do.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,8 +40,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.2.0" }, "peerDependencies": { diff --git a/plugins/suggested-blocks/CHANGELOG.md b/plugins/suggested-blocks/CHANGELOG.md index 7569bf71e..a551ccaaa 100644 --- a/plugins/suggested-blocks/CHANGELOG.md +++ b/plugins/suggested-blocks/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/suggested-blocks@5.0.11...@blockly/suggested-blocks@5.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/suggested-blocks + + + + + ## [5.0.11](https://github.com/google/blockly-samples/compare/@blockly/suggested-blocks@5.0.10...@blockly/suggested-blocks@5.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/suggested-blocks diff --git a/plugins/suggested-blocks/package-lock.json b/plugins/suggested-blocks/package-lock.json index 932fb8b3f..d526a0f51 100644 --- a/plugins/suggested-blocks/package-lock.json +++ b/plugins/suggested-blocks/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/suggested-blocks", - "version": "5.0.11", + "version": "5.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/suggested-blocks", - "version": "5.0.11", + "version": "5.0.12", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.6", diff --git a/plugins/suggested-blocks/package.json b/plugins/suggested-blocks/package.json index 2c743f79e..2fe9f811a 100644 --- a/plugins/suggested-blocks/package.json +++ b/plugins/suggested-blocks/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/suggested-blocks", - "version": "5.0.11", + "version": "5.0.12", "description": "A plugin that adds toolbox panes with suggested blocks based on the user's past usage of blocks.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,8 +40,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.3.6", "sinon": "^14.0.0" }, diff --git a/plugins/theme-dark/CHANGELOG.md b/plugins/theme-dark/CHANGELOG.md index 8bb46b968..749e6d765 100644 --- a/plugins/theme-dark/CHANGELOG.md +++ b/plugins/theme-dark/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.0.10](https://github.com/google/blockly-samples/compare/@blockly/theme-dark@7.0.9...@blockly/theme-dark@7.0.10) (2024-12-03) + +**Note:** Version bump only for package @blockly/theme-dark + + + + + ## [7.0.9](https://github.com/google/blockly-samples/compare/@blockly/theme-dark@7.0.8...@blockly/theme-dark@7.0.9) (2024-11-07) **Note:** Version bump only for package @blockly/theme-dark diff --git a/plugins/theme-dark/package-lock.json b/plugins/theme-dark/package-lock.json index de6b71c0d..f10f30ece 100644 --- a/plugins/theme-dark/package-lock.json +++ b/plugins/theme-dark/package-lock.json @@ -1,15 +1,15 @@ { "name": "@blockly/theme-dark", - "version": "7.0.9", + "version": "7.0.10", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/theme-dark", - "version": "7.0.9", + "version": "7.0.10", "license": "Apache-2.0", "devDependencies": { - "@blockly/dev-scripts": "^4.0.6" + "@blockly/dev-scripts": "^4.0.7" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/theme-dark/package.json b/plugins/theme-dark/package.json index 131b65085..cfeac6d66 100644 --- a/plugins/theme-dark/package.json +++ b/plugins/theme-dark/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/theme-dark", - "version": "7.0.9", + "version": "7.0.10", "description": "A Blockly dark theme.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6" + "@blockly/dev-scripts": "^4.0.7" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/theme-deuteranopia/CHANGELOG.md b/plugins/theme-deuteranopia/CHANGELOG.md index 14a4149ca..9edc14361 100644 --- a/plugins/theme-deuteranopia/CHANGELOG.md +++ b/plugins/theme-deuteranopia/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.10](https://github.com/google/blockly-samples/compare/@blockly/theme-deuteranopia@6.0.9...@blockly/theme-deuteranopia@6.0.10) (2024-12-03) + +**Note:** Version bump only for package @blockly/theme-deuteranopia + + + + + ## [6.0.9](https://github.com/google/blockly-samples/compare/@blockly/theme-deuteranopia@6.0.8...@blockly/theme-deuteranopia@6.0.9) (2024-11-07) **Note:** Version bump only for package @blockly/theme-deuteranopia diff --git a/plugins/theme-deuteranopia/package-lock.json b/plugins/theme-deuteranopia/package-lock.json index 6178e9d7c..38cba68ab 100644 --- a/plugins/theme-deuteranopia/package-lock.json +++ b/plugins/theme-deuteranopia/package-lock.json @@ -1,15 +1,15 @@ { "name": "@blockly/theme-deuteranopia", - "version": "6.0.9", + "version": "6.0.10", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/theme-deuteranopia", - "version": "6.0.9", + "version": "6.0.10", "license": "Apache-2.0", "devDependencies": { - "@blockly/dev-scripts": "^4.0.6" + "@blockly/dev-scripts": "^4.0.7" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/theme-deuteranopia/package.json b/plugins/theme-deuteranopia/package.json index 0b9549773..ac9b0936b 100644 --- a/plugins/theme-deuteranopia/package.json +++ b/plugins/theme-deuteranopia/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/theme-deuteranopia", - "version": "6.0.9", + "version": "6.0.10", "description": "A Blockly theme for people that have deuteranopia.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6" + "@blockly/dev-scripts": "^4.0.7" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/theme-highcontrast/CHANGELOG.md b/plugins/theme-highcontrast/CHANGELOG.md index 1a86faa46..14aa9d636 100644 --- a/plugins/theme-highcontrast/CHANGELOG.md +++ b/plugins/theme-highcontrast/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.10](https://github.com/google/blockly-samples/compare/@blockly/theme-highcontrast@6.0.9...@blockly/theme-highcontrast@6.0.10) (2024-12-03) + +**Note:** Version bump only for package @blockly/theme-highcontrast + + + + + ## [6.0.9](https://github.com/google/blockly-samples/compare/@blockly/theme-highcontrast@6.0.8...@blockly/theme-highcontrast@6.0.9) (2024-11-07) **Note:** Version bump only for package @blockly/theme-highcontrast diff --git a/plugins/theme-highcontrast/package-lock.json b/plugins/theme-highcontrast/package-lock.json index 9ba8d520f..b99c1ec69 100644 --- a/plugins/theme-highcontrast/package-lock.json +++ b/plugins/theme-highcontrast/package-lock.json @@ -1,15 +1,15 @@ { "name": "@blockly/theme-highcontrast", - "version": "6.0.9", + "version": "6.0.10", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/theme-highcontrast", - "version": "6.0.9", + "version": "6.0.10", "license": "Apache-2.0", "devDependencies": { - "@blockly/dev-scripts": "^4.0.6" + "@blockly/dev-scripts": "^4.0.7" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/theme-highcontrast/package.json b/plugins/theme-highcontrast/package.json index d35daf54c..a264dcd52 100644 --- a/plugins/theme-highcontrast/package.json +++ b/plugins/theme-highcontrast/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/theme-highcontrast", - "version": "6.0.9", + "version": "6.0.10", "description": "A Blockly high contrast theme.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6" + "@blockly/dev-scripts": "^4.0.7" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/theme-modern/CHANGELOG.md b/plugins/theme-modern/CHANGELOG.md index 90ea69d3b..0ed1f1a4d 100644 --- a/plugins/theme-modern/CHANGELOG.md +++ b/plugins/theme-modern/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.10](https://github.com/google/blockly-samples/compare/@blockly/theme-modern@6.0.9...@blockly/theme-modern@6.0.10) (2024-12-03) + +**Note:** Version bump only for package @blockly/theme-modern + + + + + ## [6.0.9](https://github.com/google/blockly-samples/compare/@blockly/theme-modern@6.0.8...@blockly/theme-modern@6.0.9) (2024-11-07) **Note:** Version bump only for package @blockly/theme-modern diff --git a/plugins/theme-modern/package-lock.json b/plugins/theme-modern/package-lock.json index bc79786b3..1da58cb6b 100644 --- a/plugins/theme-modern/package-lock.json +++ b/plugins/theme-modern/package-lock.json @@ -1,15 +1,15 @@ { "name": "@blockly/theme-modern", - "version": "6.0.9", + "version": "6.0.10", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/theme-modern", - "version": "6.0.9", + "version": "6.0.10", "license": "Apache-2.0", "devDependencies": { - "@blockly/dev-scripts": "^4.0.6" + "@blockly/dev-scripts": "^4.0.7" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/theme-modern/package.json b/plugins/theme-modern/package.json index c4c283f4a..37862bc36 100644 --- a/plugins/theme-modern/package.json +++ b/plugins/theme-modern/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/theme-modern", - "version": "6.0.9", + "version": "6.0.10", "description": "A Blockly modern theme with darker block borders.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6" + "@blockly/dev-scripts": "^4.0.7" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/theme-tritanopia/CHANGELOG.md b/plugins/theme-tritanopia/CHANGELOG.md index d24284367..e70f98533 100644 --- a/plugins/theme-tritanopia/CHANGELOG.md +++ b/plugins/theme-tritanopia/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.10](https://github.com/google/blockly-samples/compare/@blockly/theme-tritanopia@6.0.9...@blockly/theme-tritanopia@6.0.10) (2024-12-03) + +**Note:** Version bump only for package @blockly/theme-tritanopia + + + + + ## [6.0.9](https://github.com/google/blockly-samples/compare/@blockly/theme-tritanopia@6.0.8...@blockly/theme-tritanopia@6.0.9) (2024-11-07) **Note:** Version bump only for package @blockly/theme-tritanopia diff --git a/plugins/theme-tritanopia/package-lock.json b/plugins/theme-tritanopia/package-lock.json index e5dde935d..d22bea9cb 100644 --- a/plugins/theme-tritanopia/package-lock.json +++ b/plugins/theme-tritanopia/package-lock.json @@ -1,15 +1,15 @@ { "name": "@blockly/theme-tritanopia", - "version": "6.0.9", + "version": "6.0.10", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/theme-tritanopia", - "version": "6.0.9", + "version": "6.0.10", "license": "Apache-2.0", "devDependencies": { - "@blockly/dev-scripts": "^4.0.6" + "@blockly/dev-scripts": "^4.0.7" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/theme-tritanopia/package.json b/plugins/theme-tritanopia/package.json index 70d163029..965b77dc5 100644 --- a/plugins/theme-tritanopia/package.json +++ b/plugins/theme-tritanopia/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/theme-tritanopia", - "version": "6.0.9", + "version": "6.0.10", "description": "A Blockly theme for people that have tritanopia.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6" + "@blockly/dev-scripts": "^4.0.7" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/toolbox-search/CHANGELOG.md b/plugins/toolbox-search/CHANGELOG.md index 20df03c22..d97e69509 100644 --- a/plugins/toolbox-search/CHANGELOG.md +++ b/plugins/toolbox-search/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.12](https://github.com/google/blockly-samples/compare/@blockly/toolbox-search@2.0.11...@blockly/toolbox-search@2.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/toolbox-search + + + + + ## [2.0.11](https://github.com/google/blockly-samples/compare/@blockly/toolbox-search@2.0.10...@blockly/toolbox-search@2.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/toolbox-search diff --git a/plugins/toolbox-search/package-lock.json b/plugins/toolbox-search/package-lock.json index c6776174a..6456eefad 100644 --- a/plugins/toolbox-search/package-lock.json +++ b/plugins/toolbox-search/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/toolbox-search", - "version": "2.0.11", + "version": "2.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/toolbox-search", - "version": "2.0.11", + "version": "2.0.12", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.7", diff --git a/plugins/toolbox-search/package.json b/plugins/toolbox-search/package.json index 795cfc1b0..7f3335c05 100644 --- a/plugins/toolbox-search/package.json +++ b/plugins/toolbox-search/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/toolbox-search", - "version": "2.0.11", + "version": "2.0.12", "description": "A Blockly plugin that adds a toolbox category that allows searching for blocks.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,8 +40,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.3.7", "typescript": "^5.4.5" }, diff --git a/plugins/typed-variable-modal/CHANGELOG.md b/plugins/typed-variable-modal/CHANGELOG.md index 025704d33..6b6afe00f 100644 --- a/plugins/typed-variable-modal/CHANGELOG.md +++ b/plugins/typed-variable-modal/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.0.12](https://github.com/google/blockly-samples/compare/@blockly/plugin-typed-variable-modal@8.0.11...@blockly/plugin-typed-variable-modal@8.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/plugin-typed-variable-modal + + + + + ## [8.0.11](https://github.com/google/blockly-samples/compare/@blockly/plugin-typed-variable-modal@8.0.10...@blockly/plugin-typed-variable-modal@8.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/plugin-typed-variable-modal diff --git a/plugins/typed-variable-modal/package-lock.json b/plugins/typed-variable-modal/package-lock.json index 7c0a428a8..7b5b05dd6 100644 --- a/plugins/typed-variable-modal/package-lock.json +++ b/plugins/typed-variable-modal/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-typed-variable-modal", - "version": "8.0.11", + "version": "8.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-typed-variable-modal", - "version": "8.0.11", + "version": "8.0.12", "license": "Apache-2.0", "devDependencies": { "jsdom": "^19.0.0", diff --git a/plugins/typed-variable-modal/package.json b/plugins/typed-variable-modal/package.json index 3bab1ba27..8d4a7f4d7 100644 --- a/plugins/typed-variable-modal/package.json +++ b/plugins/typed-variable-modal/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-typed-variable-modal", - "version": "8.0.11", + "version": "8.0.12", "description": "A Blockly plugin to create a modal for creating typed variables.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,8 +39,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "jsdom": "^19.0.0", "jsdom-global": "3.0.2", "mocha": "^10.1.0", @@ -50,7 +50,7 @@ "blockly": "^11.0.0" }, "dependencies": { - "@blockly/plugin-modal": "^7.0.11" + "@blockly/plugin-modal": "^7.0.12" }, "publishConfig": { "access": "public", diff --git a/plugins/workspace-backpack/CHANGELOG.md b/plugins/workspace-backpack/CHANGELOG.md index 7e25b368a..8ff24d4c2 100644 --- a/plugins/workspace-backpack/CHANGELOG.md +++ b/plugins/workspace-backpack/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.12](https://github.com/google/blockly-samples/compare/@blockly/workspace-backpack@6.0.11...@blockly/workspace-backpack@6.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/workspace-backpack + + + + + ## [6.0.11](https://github.com/google/blockly-samples/compare/@blockly/workspace-backpack@6.0.10...@blockly/workspace-backpack@6.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/workspace-backpack diff --git a/plugins/workspace-backpack/package-lock.json b/plugins/workspace-backpack/package-lock.json index a4f56a628..2cc2679d7 100644 --- a/plugins/workspace-backpack/package-lock.json +++ b/plugins/workspace-backpack/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/workspace-backpack", - "version": "6.0.11", + "version": "6.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/workspace-backpack", - "version": "6.0.11", + "version": "6.0.12", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/workspace-backpack/package.json b/plugins/workspace-backpack/package.json index 9216a4003..efd4b5b01 100644 --- a/plugins/workspace-backpack/package.json +++ b/plugins/workspace-backpack/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/workspace-backpack", - "version": "6.0.11", + "version": "6.0.12", "description": "A Blockly plugin that adds Backpack support.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,8 +40,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/workspace-minimap/CHANGELOG.md b/plugins/workspace-minimap/CHANGELOG.md index 67f3c8b88..b024a3388 100644 --- a/plugins/workspace-minimap/CHANGELOG.md +++ b/plugins/workspace-minimap/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.12](https://github.com/google/blockly-samples/compare/@blockly/workspace-minimap@0.2.11...@blockly/workspace-minimap@0.2.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/workspace-minimap + + + + + ## [0.2.11](https://github.com/google/blockly-samples/compare/@blockly/workspace-minimap@0.2.10...@blockly/workspace-minimap@0.2.11) (2024-11-07) **Note:** Version bump only for package @blockly/workspace-minimap diff --git a/plugins/workspace-minimap/package-lock.json b/plugins/workspace-minimap/package-lock.json index 5c9c59de5..dec168305 100644 --- a/plugins/workspace-minimap/package-lock.json +++ b/plugins/workspace-minimap/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/workspace-minimap", - "version": "0.2.11", + "version": "0.2.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/workspace-minimap", - "version": "0.2.11", + "version": "0.2.12", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/workspace-minimap/package.json b/plugins/workspace-minimap/package.json index c7cd28ea4..85c7ce0ac 100644 --- a/plugins/workspace-minimap/package.json +++ b/plugins/workspace-minimap/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/workspace-minimap", - "version": "0.2.11", + "version": "0.2.12", "description": "A Blockly plugin.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,8 +39,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "chai": "^4.2.0", "typescript": "^5.4.5" }, diff --git a/plugins/workspace-search/CHANGELOG.md b/plugins/workspace-search/CHANGELOG.md index 831cd9fb8..2b6ad7383 100644 --- a/plugins/workspace-search/CHANGELOG.md +++ b/plugins/workspace-search/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [9.1.6](https://github.com/google/blockly-samples/compare/@blockly/plugin-workspace-search@9.1.5...@blockly/plugin-workspace-search@9.1.6) (2024-12-03) + +**Note:** Version bump only for package @blockly/plugin-workspace-search + + + + + ## [9.1.5](https://github.com/google/blockly-samples/compare/@blockly/plugin-workspace-search@9.1.4...@blockly/plugin-workspace-search@9.1.5) (2024-11-07) **Note:** Version bump only for package @blockly/plugin-workspace-search diff --git a/plugins/workspace-search/package-lock.json b/plugins/workspace-search/package-lock.json index dbe488beb..f569c92bb 100644 --- a/plugins/workspace-search/package-lock.json +++ b/plugins/workspace-search/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-workspace-search", - "version": "9.1.5", + "version": "9.1.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-workspace-search", - "version": "9.1.5", + "version": "9.1.6", "license": "Apache-2.0", "devDependencies": { "jsdom": "^19.0.0", diff --git a/plugins/workspace-search/package.json b/plugins/workspace-search/package.json index 0a44dc547..0e3a6cb42 100644 --- a/plugins/workspace-search/package.json +++ b/plugins/workspace-search/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-workspace-search", - "version": "9.1.5", + "version": "9.1.6", "description": "A Blockly plugin that adds workspace search support.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,8 +39,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "jsdom": "^19.0.0", "jsdom-global": "3.0.2", "sinon": "^9.0.1", diff --git a/plugins/zoom-to-fit/CHANGELOG.md b/plugins/zoom-to-fit/CHANGELOG.md index 9f79a278a..39d8c143b 100644 --- a/plugins/zoom-to-fit/CHANGELOG.md +++ b/plugins/zoom-to-fit/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.12](https://github.com/google/blockly-samples/compare/@blockly/zoom-to-fit@6.0.11...@blockly/zoom-to-fit@6.0.12) (2024-12-03) + +**Note:** Version bump only for package @blockly/zoom-to-fit + + + + + ## [6.0.11](https://github.com/google/blockly-samples/compare/@blockly/zoom-to-fit@6.0.10...@blockly/zoom-to-fit@6.0.11) (2024-11-07) **Note:** Version bump only for package @blockly/zoom-to-fit diff --git a/plugins/zoom-to-fit/package-lock.json b/plugins/zoom-to-fit/package-lock.json index 040d020fb..2b78eb4d8 100644 --- a/plugins/zoom-to-fit/package-lock.json +++ b/plugins/zoom-to-fit/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/zoom-to-fit", - "version": "6.0.11", + "version": "6.0.12", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/zoom-to-fit", - "version": "6.0.11", + "version": "6.0.12", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/zoom-to-fit/package.json b/plugins/zoom-to-fit/package.json index 7c5aab25b..24c16fa00 100644 --- a/plugins/zoom-to-fit/package.json +++ b/plugins/zoom-to-fit/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/zoom-to-fit", - "version": "6.0.11", + "version": "6.0.12", "description": "A Blockly plugin that adds a zoom-to-fit control to the workspace.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -38,8 +38,8 @@ "src" ], "devDependencies": { - "@blockly/dev-scripts": "^4.0.6", - "@blockly/dev-tools": "^8.0.11", + "@blockly/dev-scripts": "^4.0.7", + "@blockly/dev-tools": "^8.0.12", "typescript": "^5.4.5" }, "peerDependencies": { From eecfccda56027a613d76f9ace70e62d9143f1c2e Mon Sep 17 00:00:00 2001 From: John Nesky Date: Fri, 13 Dec 2024 16:37:04 -0800 Subject: [PATCH 03/31] fix: Update screenshot plugin for compatibility with CSS vars. (#2472) --- plugins/dev-tools/src/screenshot.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/dev-tools/src/screenshot.js b/plugins/dev-tools/src/screenshot.js index b10bf8974..6b233dd05 100644 --- a/plugins/dev-tools/src/screenshot.js +++ b/plugins/dev-tools/src/screenshot.js @@ -84,7 +84,11 @@ function workspaceToSvg_(workspace, callback, customCss) { ); svg.setAttribute('width', width); svg.setAttribute('height', height); - svg.setAttribute('style', 'background-color: transparent'); + svg.setAttribute( + 'style', + 'background-color: transparent; ' + + workspace.getInjectionDiv().style.cssText, // has CSS vars for SVG filters + ); const css = [].slice .call(document.head.querySelectorAll('style')) From 243cbee076af7d44f0958367e6c624e8dd141bfc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:14:55 +0000 Subject: [PATCH 04/31] Publish - @blockly/block-dynamic-connection@0.7.13 - @blockly/block-plus-minus@8.0.13 - @blockly/block-shareable-procedures@5.0.13 - @blockly/workspace-content-highlight@5.0.13 - @blockly/continuous-toolbox@6.0.13 - @blockly/plugin-cross-tab-copy-paste@6.0.13 - @blockly/dev-tools@8.0.13 - @blockly/disable-top-blocks@0.5.13 - @blockly/field-angle@5.0.13 - @blockly/field-bitmap@5.0.13 - @blockly/field-colour@5.0.13 - @blockly/field-colour-hsv-sliders@5.0.13 - @blockly/field-date@9.0.13 - @blockly/field-dependent-dropdown@4.0.13 - @blockly/field-grid-dropdown@5.0.13 - @blockly/field-multilineinput@5.0.14 - @blockly/field-slider@7.0.13 - @blockly/fixed-edges@5.0.13 - @blockly/keyboard-navigation@0.6.13 - @blockly/plugin-modal@7.0.13 - @blockly/plugin-scroll-options@6.0.13 - @blockly/shadow-block-converter@6.0.14 - @blockly/plugin-strict-connection-checker@5.0.13 - @blockly/suggested-blocks@5.0.13 - @blockly/toolbox-search@2.0.13 - @blockly/plugin-typed-variable-modal@8.0.13 - @blockly/workspace-backpack@6.0.13 - @blockly/workspace-minimap@0.2.13 - @blockly/plugin-workspace-search@9.1.7 - @blockly/zoom-to-fit@6.0.13 --- plugins/block-dynamic-connection/CHANGELOG.md | 8 ++++++++ plugins/block-dynamic-connection/package-lock.json | 4 ++-- plugins/block-dynamic-connection/package.json | 4 ++-- plugins/block-plus-minus/CHANGELOG.md | 8 ++++++++ plugins/block-plus-minus/package-lock.json | 4 ++-- plugins/block-plus-minus/package.json | 4 ++-- plugins/block-shareable-procedures/CHANGELOG.md | 8 ++++++++ plugins/block-shareable-procedures/package-lock.json | 4 ++-- plugins/block-shareable-procedures/package.json | 4 ++-- plugins/content-highlight/CHANGELOG.md | 8 ++++++++ plugins/content-highlight/package-lock.json | 4 ++-- plugins/content-highlight/package.json | 4 ++-- plugins/continuous-toolbox/CHANGELOG.md | 8 ++++++++ plugins/continuous-toolbox/package-lock.json | 6 +++--- plugins/continuous-toolbox/package.json | 4 ++-- plugins/cross-tab-copy-paste/CHANGELOG.md | 8 ++++++++ plugins/cross-tab-copy-paste/package-lock.json | 6 +++--- plugins/cross-tab-copy-paste/package.json | 4 ++-- plugins/dev-tools/CHANGELOG.md | 11 +++++++++++ plugins/dev-tools/package-lock.json | 4 ++-- plugins/dev-tools/package.json | 2 +- plugins/disable-top-blocks/CHANGELOG.md | 8 ++++++++ plugins/disable-top-blocks/package-lock.json | 6 +++--- plugins/disable-top-blocks/package.json | 4 ++-- plugins/field-angle/CHANGELOG.md | 8 ++++++++ plugins/field-angle/package-lock.json | 4 ++-- plugins/field-angle/package.json | 4 ++-- plugins/field-bitmap/CHANGELOG.md | 8 ++++++++ plugins/field-bitmap/package-lock.json | 4 ++-- plugins/field-bitmap/package.json | 4 ++-- plugins/field-colour-hsv-sliders/CHANGELOG.md | 8 ++++++++ plugins/field-colour-hsv-sliders/package-lock.json | 4 ++-- plugins/field-colour-hsv-sliders/package.json | 6 +++--- plugins/field-colour/CHANGELOG.md | 8 ++++++++ plugins/field-colour/package-lock.json | 4 ++-- plugins/field-colour/package.json | 4 ++-- plugins/field-date/CHANGELOG.md | 8 ++++++++ plugins/field-date/package-lock.json | 4 ++-- plugins/field-date/package.json | 4 ++-- plugins/field-dependent-dropdown/CHANGELOG.md | 8 ++++++++ plugins/field-dependent-dropdown/package-lock.json | 4 ++-- plugins/field-dependent-dropdown/package.json | 4 ++-- plugins/field-grid-dropdown/CHANGELOG.md | 8 ++++++++ plugins/field-grid-dropdown/package-lock.json | 4 ++-- plugins/field-grid-dropdown/package.json | 4 ++-- plugins/field-multilineinput/CHANGELOG.md | 8 ++++++++ plugins/field-multilineinput/package-lock.json | 4 ++-- plugins/field-multilineinput/package.json | 4 ++-- plugins/field-slider/CHANGELOG.md | 8 ++++++++ plugins/field-slider/package-lock.json | 4 ++-- plugins/field-slider/package.json | 4 ++-- plugins/fixed-edges/CHANGELOG.md | 8 ++++++++ plugins/fixed-edges/package-lock.json | 6 +++--- plugins/fixed-edges/package.json | 4 ++-- plugins/keyboard-navigation/CHANGELOG.md | 8 ++++++++ plugins/keyboard-navigation/package-lock.json | 4 ++-- plugins/keyboard-navigation/package.json | 4 ++-- plugins/modal/CHANGELOG.md | 8 ++++++++ plugins/modal/package-lock.json | 4 ++-- plugins/modal/package.json | 4 ++-- plugins/scroll-options/CHANGELOG.md | 8 ++++++++ plugins/scroll-options/package-lock.json | 4 ++-- plugins/scroll-options/package.json | 4 ++-- plugins/shadow-block-converter/CHANGELOG.md | 8 ++++++++ plugins/shadow-block-converter/package-lock.json | 6 +++--- plugins/shadow-block-converter/package.json | 4 ++-- plugins/strict-connection-checker/CHANGELOG.md | 8 ++++++++ plugins/strict-connection-checker/package-lock.json | 4 ++-- plugins/strict-connection-checker/package.json | 4 ++-- plugins/suggested-blocks/CHANGELOG.md | 8 ++++++++ plugins/suggested-blocks/package-lock.json | 4 ++-- plugins/suggested-blocks/package.json | 4 ++-- plugins/toolbox-search/CHANGELOG.md | 8 ++++++++ plugins/toolbox-search/package-lock.json | 4 ++-- plugins/toolbox-search/package.json | 4 ++-- plugins/typed-variable-modal/CHANGELOG.md | 8 ++++++++ plugins/typed-variable-modal/package-lock.json | 4 ++-- plugins/typed-variable-modal/package.json | 6 +++--- plugins/workspace-backpack/CHANGELOG.md | 8 ++++++++ plugins/workspace-backpack/package-lock.json | 4 ++-- plugins/workspace-backpack/package.json | 4 ++-- plugins/workspace-minimap/CHANGELOG.md | 8 ++++++++ plugins/workspace-minimap/package-lock.json | 4 ++-- plugins/workspace-minimap/package.json | 4 ++-- plugins/workspace-search/CHANGELOG.md | 8 ++++++++ plugins/workspace-search/package-lock.json | 4 ++-- plugins/workspace-search/package.json | 4 ++-- plugins/zoom-to-fit/CHANGELOG.md | 8 ++++++++ plugins/zoom-to-fit/package-lock.json | 4 ++-- plugins/zoom-to-fit/package.json | 4 ++-- 90 files changed, 369 insertions(+), 126 deletions(-) diff --git a/plugins/block-dynamic-connection/CHANGELOG.md b/plugins/block-dynamic-connection/CHANGELOG.md index 0ba60dc14..7e91d9822 100644 --- a/plugins/block-dynamic-connection/CHANGELOG.md +++ b/plugins/block-dynamic-connection/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.7.13](https://github.com/google/blockly-samples/compare/@blockly/block-dynamic-connection@0.7.12...@blockly/block-dynamic-connection@0.7.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/block-dynamic-connection + + + + + ## [0.7.12](https://github.com/google/blockly-samples/compare/@blockly/block-dynamic-connection@0.7.11...@blockly/block-dynamic-connection@0.7.12) (2024-12-03) **Note:** Version bump only for package @blockly/block-dynamic-connection diff --git a/plugins/block-dynamic-connection/package-lock.json b/plugins/block-dynamic-connection/package-lock.json index 9787d0525..ffe781122 100644 --- a/plugins/block-dynamic-connection/package-lock.json +++ b/plugins/block-dynamic-connection/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/block-dynamic-connection", - "version": "0.7.12", + "version": "0.7.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/block-dynamic-connection", - "version": "0.7.12", + "version": "0.7.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/block-dynamic-connection/package.json b/plugins/block-dynamic-connection/package.json index d23a6046c..0ba0d8916 100644 --- a/plugins/block-dynamic-connection/package.json +++ b/plugins/block-dynamic-connection/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/block-dynamic-connection", - "version": "0.7.12", + "version": "0.7.13", "description": "A group of blocks that add connections dynamically.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.2.0", "mocha": "^10.2.0", "typescript": "^5.4.5" diff --git a/plugins/block-plus-minus/CHANGELOG.md b/plugins/block-plus-minus/CHANGELOG.md index 696eaf6f3..d4ffe52e1 100644 --- a/plugins/block-plus-minus/CHANGELOG.md +++ b/plugins/block-plus-minus/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.0.13](https://github.com/google/blockly-samples/compare/@blockly/block-plus-minus@8.0.12...@blockly/block-plus-minus@8.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/block-plus-minus + + + + + ## [8.0.12](https://github.com/google/blockly-samples/compare/@blockly/block-plus-minus@8.0.11...@blockly/block-plus-minus@8.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/block-plus-minus diff --git a/plugins/block-plus-minus/package-lock.json b/plugins/block-plus-minus/package-lock.json index a31843f83..60dae89eb 100644 --- a/plugins/block-plus-minus/package-lock.json +++ b/plugins/block-plus-minus/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/block-plus-minus", - "version": "8.0.12", + "version": "8.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/block-plus-minus", - "version": "8.0.12", + "version": "8.0.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/block-plus-minus/package.json b/plugins/block-plus-minus/package.json index f527e38c0..09a2c6320 100644 --- a/plugins/block-plus-minus/package.json +++ b/plugins/block-plus-minus/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/block-plus-minus", - "version": "8.0.12", + "version": "8.0.13", "description": "A group of blocks that replace the built-in mutator UI with a +/- based UI.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.2.0", "mocha": "^10.2.0", "sinon": "^9.0.1" diff --git a/plugins/block-shareable-procedures/CHANGELOG.md b/plugins/block-shareable-procedures/CHANGELOG.md index 6c19d9503..16c146e71 100644 --- a/plugins/block-shareable-procedures/CHANGELOG.md +++ b/plugins/block-shareable-procedures/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/block-shareable-procedures@5.0.12...@blockly/block-shareable-procedures@5.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/block-shareable-procedures + + + + + ## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/block-shareable-procedures@5.0.11...@blockly/block-shareable-procedures@5.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/block-shareable-procedures diff --git a/plugins/block-shareable-procedures/package-lock.json b/plugins/block-shareable-procedures/package-lock.json index 37c740879..a99adf43e 100644 --- a/plugins/block-shareable-procedures/package-lock.json +++ b/plugins/block-shareable-procedures/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/block-shareable-procedures", - "version": "5.0.12", + "version": "5.0.13", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/block-shareable-procedures", - "version": "5.0.12", + "version": "5.0.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.7", diff --git a/plugins/block-shareable-procedures/package.json b/plugins/block-shareable-procedures/package.json index 3705bb030..24601d89c 100644 --- a/plugins/block-shareable-procedures/package.json +++ b/plugins/block-shareable-procedures/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/block-shareable-procedures", - "version": "5.0.12", + "version": "5.0.13", "description": "A plugin that adds procedure blocks which are backed by explicit data models.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -42,7 +42,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.3.7", "jsdom": "^16.4.0", "jsdom-global": "^3.0.2", diff --git a/plugins/content-highlight/CHANGELOG.md b/plugins/content-highlight/CHANGELOG.md index f1182fad1..8ed521780 100644 --- a/plugins/content-highlight/CHANGELOG.md +++ b/plugins/content-highlight/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/workspace-content-highlight@5.0.12...@blockly/workspace-content-highlight@5.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/workspace-content-highlight + + + + + ## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/workspace-content-highlight@5.0.11...@blockly/workspace-content-highlight@5.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/workspace-content-highlight diff --git a/plugins/content-highlight/package-lock.json b/plugins/content-highlight/package-lock.json index 6de82e812..bf5ac1852 100644 --- a/plugins/content-highlight/package-lock.json +++ b/plugins/content-highlight/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/workspace-content-highlight", - "version": "5.0.12", + "version": "5.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/workspace-content-highlight", - "version": "5.0.12", + "version": "5.0.13", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/content-highlight/package.json b/plugins/content-highlight/package.json index 3f7c9db98..a88b6d58a 100644 --- a/plugins/content-highlight/package.json +++ b/plugins/content-highlight/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/workspace-content-highlight", - "version": "5.0.12", + "version": "5.0.13", "description": "A Blockly workspace plugin that adds a highlight around the content area.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -44,7 +44,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/continuous-toolbox/CHANGELOG.md b/plugins/continuous-toolbox/CHANGELOG.md index 34b0e2b1f..c61ec21c8 100644 --- a/plugins/continuous-toolbox/CHANGELOG.md +++ b/plugins/continuous-toolbox/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.13](https://github.com/google/blockly-samples/compare/@blockly/continuous-toolbox@6.0.12...@blockly/continuous-toolbox@6.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/continuous-toolbox + + + + + ## [6.0.12](https://github.com/google/blockly-samples/compare/@blockly/continuous-toolbox@6.0.11...@blockly/continuous-toolbox@6.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/continuous-toolbox diff --git a/plugins/continuous-toolbox/package-lock.json b/plugins/continuous-toolbox/package-lock.json index 0a66b566d..dd33fefb3 100644 --- a/plugins/continuous-toolbox/package-lock.json +++ b/plugins/continuous-toolbox/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/continuous-toolbox", - "version": "6.0.12", + "version": "6.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/continuous-toolbox", - "version": "6.0.12", + "version": "6.0.13", "license": "Apache-2.0", "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12" + "@blockly/dev-tools": "^8.0.13" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/continuous-toolbox/package.json b/plugins/continuous-toolbox/package.json index 585681cae..557b6a901 100644 --- a/plugins/continuous-toolbox/package.json +++ b/plugins/continuous-toolbox/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/continuous-toolbox", - "version": "6.0.12", + "version": "6.0.13", "description": "A Blockly plugin that adds a continous-scrolling style toolbox and flyout", "scripts": { "build": "blockly-scripts build", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12" + "@blockly/dev-tools": "^8.0.13" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/cross-tab-copy-paste/CHANGELOG.md b/plugins/cross-tab-copy-paste/CHANGELOG.md index 1983c3803..7edc67b2f 100644 --- a/plugins/cross-tab-copy-paste/CHANGELOG.md +++ b/plugins/cross-tab-copy-paste/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.13](https://github.com/google/blockly-samples/compare/@blockly/plugin-cross-tab-copy-paste@6.0.12...@blockly/plugin-cross-tab-copy-paste@6.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/plugin-cross-tab-copy-paste + + + + + ## [6.0.12](https://github.com/google/blockly-samples/compare/@blockly/plugin-cross-tab-copy-paste@6.0.11...@blockly/plugin-cross-tab-copy-paste@6.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/plugin-cross-tab-copy-paste diff --git a/plugins/cross-tab-copy-paste/package-lock.json b/plugins/cross-tab-copy-paste/package-lock.json index 61c82dc07..5bd57da7d 100644 --- a/plugins/cross-tab-copy-paste/package-lock.json +++ b/plugins/cross-tab-copy-paste/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/plugin-cross-tab-copy-paste", - "version": "6.0.12", + "version": "6.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-cross-tab-copy-paste", - "version": "6.0.12", + "version": "6.0.13", "license": "Apache-2.0", "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12" + "@blockly/dev-tools": "^8.0.13" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/cross-tab-copy-paste/package.json b/plugins/cross-tab-copy-paste/package.json index 6467e5b18..d6b3488ec 100644 --- a/plugins/cross-tab-copy-paste/package.json +++ b/plugins/cross-tab-copy-paste/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-cross-tab-copy-paste", - "version": "6.0.12", + "version": "6.0.13", "description": "Allows you to copy blocks with cross-tab.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12" + "@blockly/dev-tools": "^8.0.13" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/dev-tools/CHANGELOG.md b/plugins/dev-tools/CHANGELOG.md index 2117407ce..0740d4b4f 100644 --- a/plugins/dev-tools/CHANGELOG.md +++ b/plugins/dev-tools/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.0.13](https://github.com/google/blockly-samples/compare/@blockly/dev-tools@8.0.12...@blockly/dev-tools@8.0.13) (2024-12-19) + + +### Bug Fixes + +* Update screenshot plugin for compatibility with CSS vars. ([#2472](https://github.com/google/blockly-samples/issues/2472)) ([eecfccd](https://github.com/google/blockly-samples/commit/eecfccda56027a613d76f9ace70e62d9143f1c2e)) + + + + + ## [8.0.12](https://github.com/google/blockly-samples/compare/@blockly/dev-tools@8.0.11...@blockly/dev-tools@8.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/dev-tools diff --git a/plugins/dev-tools/package-lock.json b/plugins/dev-tools/package-lock.json index 3f6ea55ee..b8094d80b 100644 --- a/plugins/dev-tools/package-lock.json +++ b/plugins/dev-tools/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/dev-tools", - "version": "8.0.12", + "version": "8.0.13", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/dev-tools", - "version": "8.0.12", + "version": "8.0.13", "license": "Apache-2.0", "dependencies": { "chai": "^4.2.0", diff --git a/plugins/dev-tools/package.json b/plugins/dev-tools/package.json index c2484e685..8666238a1 100644 --- a/plugins/dev-tools/package.json +++ b/plugins/dev-tools/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/dev-tools", - "version": "8.0.12", + "version": "8.0.13", "description": "A library of common utilities for Blockly extension development.", "scripts": { "audit:fix": "blockly-scripts auditFix", diff --git a/plugins/disable-top-blocks/CHANGELOG.md b/plugins/disable-top-blocks/CHANGELOG.md index 348fdeb75..03ff075ec 100644 --- a/plugins/disable-top-blocks/CHANGELOG.md +++ b/plugins/disable-top-blocks/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.5.13](https://github.com/google/blockly-samples/compare/@blockly/disable-top-blocks@0.5.12...@blockly/disable-top-blocks@0.5.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/disable-top-blocks + + + + + ## [0.5.12](https://github.com/google/blockly-samples/compare/@blockly/disable-top-blocks@0.5.11...@blockly/disable-top-blocks@0.5.12) (2024-12-03) **Note:** Version bump only for package @blockly/disable-top-blocks diff --git a/plugins/disable-top-blocks/package-lock.json b/plugins/disable-top-blocks/package-lock.json index 79dbe8e54..484d8556a 100644 --- a/plugins/disable-top-blocks/package-lock.json +++ b/plugins/disable-top-blocks/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/disable-top-blocks", - "version": "0.5.12", + "version": "0.5.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/disable-top-blocks", - "version": "0.5.12", + "version": "0.5.13", "license": "Apache-2.0", "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12" + "@blockly/dev-tools": "^8.0.13" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/disable-top-blocks/package.json b/plugins/disable-top-blocks/package.json index 5d87b4f1d..51c863258 100644 --- a/plugins/disable-top-blocks/package.json +++ b/plugins/disable-top-blocks/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/disable-top-blocks", - "version": "0.5.12", + "version": "0.5.13", "description": "A Blockly plugin that shows the 'disable' context menu option only on non-orphan blocks.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,7 +39,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12" + "@blockly/dev-tools": "^8.0.13" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/field-angle/CHANGELOG.md b/plugins/field-angle/CHANGELOG.md index 9b0c9ddbf..40f40009d 100644 --- a/plugins/field-angle/CHANGELOG.md +++ b/plugins/field-angle/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-angle@5.0.12...@blockly/field-angle@5.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/field-angle + + + + + ## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-angle@5.0.11...@blockly/field-angle@5.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/field-angle diff --git a/plugins/field-angle/package-lock.json b/plugins/field-angle/package-lock.json index b5dad63f8..7f354f256 100644 --- a/plugins/field-angle/package-lock.json +++ b/plugins/field-angle/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-angle", - "version": "5.0.12", + "version": "5.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-angle", - "version": "5.0.12", + "version": "5.0.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-angle/package.json b/plugins/field-angle/package.json index 193f28c63..b97bda64d 100644 --- a/plugins/field-angle/package.json +++ b/plugins/field-angle/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-angle", - "version": "5.0.12", + "version": "5.0.13", "description": "A Blockly angle field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/field-bitmap/CHANGELOG.md b/plugins/field-bitmap/CHANGELOG.md index 02b524b78..4c4995511 100644 --- a/plugins/field-bitmap/CHANGELOG.md +++ b/plugins/field-bitmap/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-bitmap@5.0.12...@blockly/field-bitmap@5.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/field-bitmap + + + + + ## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-bitmap@5.0.11...@blockly/field-bitmap@5.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/field-bitmap diff --git a/plugins/field-bitmap/package-lock.json b/plugins/field-bitmap/package-lock.json index 59fd7d542..24956bb67 100644 --- a/plugins/field-bitmap/package-lock.json +++ b/plugins/field-bitmap/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-bitmap", - "version": "5.0.12", + "version": "5.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-bitmap", - "version": "5.0.12", + "version": "5.0.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.6", diff --git a/plugins/field-bitmap/package.json b/plugins/field-bitmap/package.json index b12f45723..2b08fe9eb 100644 --- a/plugins/field-bitmap/package.json +++ b/plugins/field-bitmap/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-bitmap", - "version": "5.0.12", + "version": "5.0.13", "description": "A field that lets users input a pixel grid with their mouse.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.3.6", "mocha": "^10.7.0", "typescript": "^5.4.5" diff --git a/plugins/field-colour-hsv-sliders/CHANGELOG.md b/plugins/field-colour-hsv-sliders/CHANGELOG.md index 509e3d621..f7bad208a 100644 --- a/plugins/field-colour-hsv-sliders/CHANGELOG.md +++ b/plugins/field-colour-hsv-sliders/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-colour-hsv-sliders@5.0.12...@blockly/field-colour-hsv-sliders@5.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/field-colour-hsv-sliders + + + + + ## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-colour-hsv-sliders@5.0.11...@blockly/field-colour-hsv-sliders@5.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/field-colour-hsv-sliders diff --git a/plugins/field-colour-hsv-sliders/package-lock.json b/plugins/field-colour-hsv-sliders/package-lock.json index 5f2b04e4a..2671870f4 100644 --- a/plugins/field-colour-hsv-sliders/package-lock.json +++ b/plugins/field-colour-hsv-sliders/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.12", + "version": "5.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.12", + "version": "5.0.13", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/field-colour-hsv-sliders/package.json b/plugins/field-colour-hsv-sliders/package.json index f49ae66c7..0ed43fa1c 100644 --- a/plugins/field-colour-hsv-sliders/package.json +++ b/plugins/field-colour-hsv-sliders/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.12", + "version": "5.0.13", "description": "A Blockly colour field using HSV sliders.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,11 +41,11 @@ "src" ], "dependencies": { - "@blockly/field-colour": "^5.0.12" + "@blockly/field-colour": "^5.0.13" }, "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/field-colour/CHANGELOG.md b/plugins/field-colour/CHANGELOG.md index 76b8ae118..1d758cceb 100644 --- a/plugins/field-colour/CHANGELOG.md +++ b/plugins/field-colour/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-colour@5.0.12...@blockly/field-colour@5.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/field-colour + + + + + ## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-colour@5.0.11...@blockly/field-colour@5.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/field-colour diff --git a/plugins/field-colour/package-lock.json b/plugins/field-colour/package-lock.json index f33a7e8f7..9aaed721d 100644 --- a/plugins/field-colour/package-lock.json +++ b/plugins/field-colour/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-colour", - "version": "5.0.12", + "version": "5.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-colour", - "version": "5.0.12", + "version": "5.0.13", "license": "Apache-2.0", "devDependencies": { "@typescript-eslint/parser": "^5.59.5", diff --git a/plugins/field-colour/package.json b/plugins/field-colour/package.json index e58dacfce..11953f5da 100644 --- a/plugins/field-colour/package.json +++ b/plugins/field-colour/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-colour", - "version": "5.0.12", + "version": "5.0.13", "description": "A Blockly colour field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "@typescript-eslint/parser": "^5.59.5", "chai": "^4.2.0", "sinon": "^9.0.1", diff --git a/plugins/field-date/CHANGELOG.md b/plugins/field-date/CHANGELOG.md index 56a96be9c..f5bd47298 100644 --- a/plugins/field-date/CHANGELOG.md +++ b/plugins/field-date/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [9.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-date@9.0.12...@blockly/field-date@9.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/field-date + + + + + ## [9.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-date@9.0.11...@blockly/field-date@9.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/field-date diff --git a/plugins/field-date/package-lock.json b/plugins/field-date/package-lock.json index 687218a70..1ff3b82c8 100644 --- a/plugins/field-date/package-lock.json +++ b/plugins/field-date/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-date", - "version": "9.0.12", + "version": "9.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-date", - "version": "9.0.12", + "version": "9.0.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-date/package.json b/plugins/field-date/package.json index c2c572aa9..85c4b5d5b 100644 --- a/plugins/field-date/package.json +++ b/plugins/field-date/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-date", - "version": "9.0.12", + "version": "9.0.13", "description": "A Blockly date picker field that uses the browser's date picker.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -43,7 +43,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/field-dependent-dropdown/CHANGELOG.md b/plugins/field-dependent-dropdown/CHANGELOG.md index 42ed0296b..25a99c768 100644 --- a/plugins/field-dependent-dropdown/CHANGELOG.md +++ b/plugins/field-dependent-dropdown/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-dependent-dropdown@4.0.12...@blockly/field-dependent-dropdown@4.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/field-dependent-dropdown + + + + + ## [4.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-dependent-dropdown@4.0.11...@blockly/field-dependent-dropdown@4.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/field-dependent-dropdown diff --git a/plugins/field-dependent-dropdown/package-lock.json b/plugins/field-dependent-dropdown/package-lock.json index 1bd3fae2a..f5514781a 100644 --- a/plugins/field-dependent-dropdown/package-lock.json +++ b/plugins/field-dependent-dropdown/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-dependent-dropdown", - "version": "4.0.12", + "version": "4.0.13", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/field-dependent-dropdown", - "version": "4.0.12", + "version": "4.0.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-dependent-dropdown/package.json b/plugins/field-dependent-dropdown/package.json index 5472049d1..6e9bb667f 100644 --- a/plugins/field-dependent-dropdown/package.json +++ b/plugins/field-dependent-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-dependent-dropdown", - "version": "4.0.12", + "version": "4.0.13", "description": "A Blockly dropdown field that automatically updates its available options depending on the value of another field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -42,7 +42,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/field-grid-dropdown/CHANGELOG.md b/plugins/field-grid-dropdown/CHANGELOG.md index 62800a477..5b8bcddc9 100644 --- a/plugins/field-grid-dropdown/CHANGELOG.md +++ b/plugins/field-grid-dropdown/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-grid-dropdown@5.0.12...@blockly/field-grid-dropdown@5.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/field-grid-dropdown + + + + + ## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-grid-dropdown@5.0.11...@blockly/field-grid-dropdown@5.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/field-grid-dropdown diff --git a/plugins/field-grid-dropdown/package-lock.json b/plugins/field-grid-dropdown/package-lock.json index f8208f761..0c91901fa 100644 --- a/plugins/field-grid-dropdown/package-lock.json +++ b/plugins/field-grid-dropdown/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-grid-dropdown", - "version": "5.0.12", + "version": "5.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-grid-dropdown", - "version": "5.0.12", + "version": "5.0.13", "license": "Apache 2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/field-grid-dropdown/package.json b/plugins/field-grid-dropdown/package.json index a677bc636..cf385d4d3 100644 --- a/plugins/field-grid-dropdown/package.json +++ b/plugins/field-grid-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-grid-dropdown", - "version": "5.0.12", + "version": "5.0.13", "description": "A Blockly dropdown field with grid layout.", "scripts": { "build": "blockly-scripts build", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/field-multilineinput/CHANGELOG.md b/plugins/field-multilineinput/CHANGELOG.md index 914262beb..a8d561913 100644 --- a/plugins/field-multilineinput/CHANGELOG.md +++ b/plugins/field-multilineinput/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-multilineinput@5.0.13...@blockly/field-multilineinput@5.0.14) (2024-12-19) + +**Note:** Version bump only for package @blockly/field-multilineinput + + + + + ## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-multilineinput@5.0.12...@blockly/field-multilineinput@5.0.13) (2024-12-03) **Note:** Version bump only for package @blockly/field-multilineinput diff --git a/plugins/field-multilineinput/package-lock.json b/plugins/field-multilineinput/package-lock.json index 64369c8e7..322eaeb19 100644 --- a/plugins/field-multilineinput/package-lock.json +++ b/plugins/field-multilineinput/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-multilineinput", - "version": "5.0.13", + "version": "5.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-multilineinput", - "version": "5.0.13", + "version": "5.0.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-multilineinput/package.json b/plugins/field-multilineinput/package.json index edbec9a5b..17594fb70 100644 --- a/plugins/field-multilineinput/package.json +++ b/plugins/field-multilineinput/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-multilineinput", - "version": "5.0.13", + "version": "5.0.14", "description": "A Blockly multilineinput field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/field-slider/CHANGELOG.md b/plugins/field-slider/CHANGELOG.md index daa6d6aa2..7f3537c52 100644 --- a/plugins/field-slider/CHANGELOG.md +++ b/plugins/field-slider/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-slider@7.0.12...@blockly/field-slider@7.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/field-slider + + + + + ## [7.0.12](https://github.com/google/blockly-samples/compare/@blockly/field-slider@7.0.11...@blockly/field-slider@7.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/field-slider diff --git a/plugins/field-slider/package-lock.json b/plugins/field-slider/package-lock.json index b5318875a..8146c7b71 100644 --- a/plugins/field-slider/package-lock.json +++ b/plugins/field-slider/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-slider", - "version": "7.0.12", + "version": "7.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-slider", - "version": "7.0.12", + "version": "7.0.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-slider/package.json b/plugins/field-slider/package.json index 04264d6f8..41e206bbb 100644 --- a/plugins/field-slider/package.json +++ b/plugins/field-slider/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-slider", - "version": "7.0.12", + "version": "7.0.13", "description": "A Blockly slider field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/fixed-edges/CHANGELOG.md b/plugins/fixed-edges/CHANGELOG.md index d1402978a..13bdf6981 100644 --- a/plugins/fixed-edges/CHANGELOG.md +++ b/plugins/fixed-edges/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/fixed-edges@5.0.12...@blockly/fixed-edges@5.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/fixed-edges + + + + + ## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/fixed-edges@5.0.11...@blockly/fixed-edges@5.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/fixed-edges diff --git a/plugins/fixed-edges/package-lock.json b/plugins/fixed-edges/package-lock.json index 07eab5451..989dcd8ff 100644 --- a/plugins/fixed-edges/package-lock.json +++ b/plugins/fixed-edges/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/fixed-edges", - "version": "5.0.12", + "version": "5.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/fixed-edges", - "version": "5.0.12", + "version": "5.0.13", "license": "Apache-2.0", "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12" + "@blockly/dev-tools": "^8.0.13" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/fixed-edges/package.json b/plugins/fixed-edges/package.json index 18e424b58..aff195837 100644 --- a/plugins/fixed-edges/package.json +++ b/plugins/fixed-edges/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/fixed-edges", - "version": "5.0.12", + "version": "5.0.13", "description": "A plugin that provides a MetricsManager that can be used to prevent the workspace from expanding to the top/left/right/bottom when blocks are dragged to that edge.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,7 +39,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12" + "@blockly/dev-tools": "^8.0.13" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/keyboard-navigation/CHANGELOG.md b/plugins/keyboard-navigation/CHANGELOG.md index d97945040..3b848b5ed 100644 --- a/plugins/keyboard-navigation/CHANGELOG.md +++ b/plugins/keyboard-navigation/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.6.13](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.12...@blockly/keyboard-navigation@0.6.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/keyboard-navigation + + + + + ## [0.6.12](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.11...@blockly/keyboard-navigation@0.6.12) (2024-12-03) **Note:** Version bump only for package @blockly/keyboard-navigation diff --git a/plugins/keyboard-navigation/package-lock.json b/plugins/keyboard-navigation/package-lock.json index 4fbed2f0f..35e14b6b8 100644 --- a/plugins/keyboard-navigation/package-lock.json +++ b/plugins/keyboard-navigation/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/keyboard-navigation", - "version": "0.6.12", + "version": "0.6.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/keyboard-navigation", - "version": "0.6.12", + "version": "0.6.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/keyboard-navigation/package.json b/plugins/keyboard-navigation/package.json index 21a00218e..122c2be36 100644 --- a/plugins/keyboard-navigation/package.json +++ b/plugins/keyboard-navigation/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/keyboard-navigation", - "version": "0.6.12", + "version": "0.6.13", "description": "A Blockly plugin that adds keyboard navigation support.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.2.0", "jsdom": "^16.4.0", "jsdom-global": "^3.0.2", diff --git a/plugins/modal/CHANGELOG.md b/plugins/modal/CHANGELOG.md index 6d03b178f..709ec8349 100644 --- a/plugins/modal/CHANGELOG.md +++ b/plugins/modal/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.0.13](https://github.com/google/blockly-samples/compare/@blockly/plugin-modal@7.0.12...@blockly/plugin-modal@7.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/plugin-modal + + + + + ## [7.0.12](https://github.com/google/blockly-samples/compare/@blockly/plugin-modal@7.0.11...@blockly/plugin-modal@7.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/plugin-modal diff --git a/plugins/modal/package-lock.json b/plugins/modal/package-lock.json index d45abe603..439a0367f 100644 --- a/plugins/modal/package-lock.json +++ b/plugins/modal/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-modal", - "version": "7.0.12", + "version": "7.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-modal", - "version": "7.0.12", + "version": "7.0.13", "license": "Apache 2.0", "devDependencies": { "jsdom": "^19.0.0", diff --git a/plugins/modal/package.json b/plugins/modal/package.json index e67ef3918..e2a260824 100644 --- a/plugins/modal/package.json +++ b/plugins/modal/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-modal", - "version": "7.0.12", + "version": "7.0.13", "description": "A Blockly plugin that creates a modal.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "jsdom": "^19.0.0", "jsdom-global": "3.0.2", "mocha": "^10.1.0", diff --git a/plugins/scroll-options/CHANGELOG.md b/plugins/scroll-options/CHANGELOG.md index b8809b865..3ce2b7b1c 100644 --- a/plugins/scroll-options/CHANGELOG.md +++ b/plugins/scroll-options/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.13](https://github.com/google/blockly-samples/compare/@blockly/plugin-scroll-options@6.0.12...@blockly/plugin-scroll-options@6.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/plugin-scroll-options + + + + + ## [6.0.12](https://github.com/google/blockly-samples/compare/@blockly/plugin-scroll-options@6.0.11...@blockly/plugin-scroll-options@6.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/plugin-scroll-options diff --git a/plugins/scroll-options/package-lock.json b/plugins/scroll-options/package-lock.json index bc464db97..64d6da49c 100644 --- a/plugins/scroll-options/package-lock.json +++ b/plugins/scroll-options/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-scroll-options", - "version": "6.0.12", + "version": "6.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-scroll-options", - "version": "6.0.12", + "version": "6.0.13", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/scroll-options/package.json b/plugins/scroll-options/package.json index 22d40b93d..db285a771 100644 --- a/plugins/scroll-options/package.json +++ b/plugins/scroll-options/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-scroll-options", - "version": "6.0.12", + "version": "6.0.13", "description": "A Blockly plugin that adds advanced scroll options such as scroll-on-drag and scroll while holding a block.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/shadow-block-converter/CHANGELOG.md b/plugins/shadow-block-converter/CHANGELOG.md index e5dd8e343..25fb208ea 100644 --- a/plugins/shadow-block-converter/CHANGELOG.md +++ b/plugins/shadow-block-converter/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.14](https://github.com/google/blockly-samples/compare/@blockly/shadow-block-converter@6.0.13...@blockly/shadow-block-converter@6.0.14) (2024-12-19) + +**Note:** Version bump only for package @blockly/shadow-block-converter + + + + + ## [6.0.13](https://github.com/google/blockly-samples/compare/@blockly/shadow-block-converter@6.0.12...@blockly/shadow-block-converter@6.0.13) (2024-12-03) **Note:** Version bump only for package @blockly/shadow-block-converter diff --git a/plugins/shadow-block-converter/package-lock.json b/plugins/shadow-block-converter/package-lock.json index dd88c1b24..f0871bcc8 100644 --- a/plugins/shadow-block-converter/package-lock.json +++ b/plugins/shadow-block-converter/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/shadow-block-converter", - "version": "6.0.13", + "version": "6.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/shadow-block-converter", - "version": "6.0.13", + "version": "6.0.14", "license": "Apache-2.0", "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.2.0", "jsdom": "^19.0.0", "jsdom-global": "^3.0.2", diff --git a/plugins/shadow-block-converter/package.json b/plugins/shadow-block-converter/package.json index 299d3a2ea..08e3531d6 100644 --- a/plugins/shadow-block-converter/package.json +++ b/plugins/shadow-block-converter/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/shadow-block-converter", - "version": "6.0.13", + "version": "6.0.14", "description": "A workspace change listener that converts shadow blocks to real blocks when the user edits them.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.2.0", "jsdom": "^19.0.0", "jsdom-global": "^3.0.2", diff --git a/plugins/strict-connection-checker/CHANGELOG.md b/plugins/strict-connection-checker/CHANGELOG.md index 8a940110a..85d8ab359 100644 --- a/plugins/strict-connection-checker/CHANGELOG.md +++ b/plugins/strict-connection-checker/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/plugin-strict-connection-checker@5.0.12...@blockly/plugin-strict-connection-checker@5.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/plugin-strict-connection-checker + + + + + ## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/plugin-strict-connection-checker@5.0.11...@blockly/plugin-strict-connection-checker@5.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/plugin-strict-connection-checker diff --git a/plugins/strict-connection-checker/package-lock.json b/plugins/strict-connection-checker/package-lock.json index aef50aa1f..dcf548672 100644 --- a/plugins/strict-connection-checker/package-lock.json +++ b/plugins/strict-connection-checker/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-strict-connection-checker", - "version": "5.0.12", + "version": "5.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-strict-connection-checker", - "version": "5.0.12", + "version": "5.0.13", "license": "Apache 2.0", "devDependencies": { "chai": "^4.2.0" diff --git a/plugins/strict-connection-checker/package.json b/plugins/strict-connection-checker/package.json index f527e2280..4000341af 100644 --- a/plugins/strict-connection-checker/package.json +++ b/plugins/strict-connection-checker/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-strict-connection-checker", - "version": "5.0.12", + "version": "5.0.13", "description": "A connection checker that prevents blocks that don't provide type information from being connected to blocks that do.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.2.0" }, "peerDependencies": { diff --git a/plugins/suggested-blocks/CHANGELOG.md b/plugins/suggested-blocks/CHANGELOG.md index a551ccaaa..4e063cfef 100644 --- a/plugins/suggested-blocks/CHANGELOG.md +++ b/plugins/suggested-blocks/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/suggested-blocks@5.0.12...@blockly/suggested-blocks@5.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/suggested-blocks + + + + + ## [5.0.12](https://github.com/google/blockly-samples/compare/@blockly/suggested-blocks@5.0.11...@blockly/suggested-blocks@5.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/suggested-blocks diff --git a/plugins/suggested-blocks/package-lock.json b/plugins/suggested-blocks/package-lock.json index d526a0f51..2b141c09d 100644 --- a/plugins/suggested-blocks/package-lock.json +++ b/plugins/suggested-blocks/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/suggested-blocks", - "version": "5.0.12", + "version": "5.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/suggested-blocks", - "version": "5.0.12", + "version": "5.0.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.6", diff --git a/plugins/suggested-blocks/package.json b/plugins/suggested-blocks/package.json index 2fe9f811a..91ecd2c6b 100644 --- a/plugins/suggested-blocks/package.json +++ b/plugins/suggested-blocks/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/suggested-blocks", - "version": "5.0.12", + "version": "5.0.13", "description": "A plugin that adds toolbox panes with suggested blocks based on the user's past usage of blocks.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.3.6", "sinon": "^14.0.0" }, diff --git a/plugins/toolbox-search/CHANGELOG.md b/plugins/toolbox-search/CHANGELOG.md index d97e69509..522115beb 100644 --- a/plugins/toolbox-search/CHANGELOG.md +++ b/plugins/toolbox-search/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.13](https://github.com/google/blockly-samples/compare/@blockly/toolbox-search@2.0.12...@blockly/toolbox-search@2.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/toolbox-search + + + + + ## [2.0.12](https://github.com/google/blockly-samples/compare/@blockly/toolbox-search@2.0.11...@blockly/toolbox-search@2.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/toolbox-search diff --git a/plugins/toolbox-search/package-lock.json b/plugins/toolbox-search/package-lock.json index 6456eefad..15b56c3bf 100644 --- a/plugins/toolbox-search/package-lock.json +++ b/plugins/toolbox-search/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/toolbox-search", - "version": "2.0.12", + "version": "2.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/toolbox-search", - "version": "2.0.12", + "version": "2.0.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.7", diff --git a/plugins/toolbox-search/package.json b/plugins/toolbox-search/package.json index 7f3335c05..4aab91014 100644 --- a/plugins/toolbox-search/package.json +++ b/plugins/toolbox-search/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/toolbox-search", - "version": "2.0.12", + "version": "2.0.13", "description": "A Blockly plugin that adds a toolbox category that allows searching for blocks.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.3.7", "typescript": "^5.4.5" }, diff --git a/plugins/typed-variable-modal/CHANGELOG.md b/plugins/typed-variable-modal/CHANGELOG.md index 6b6afe00f..677bb7fd6 100644 --- a/plugins/typed-variable-modal/CHANGELOG.md +++ b/plugins/typed-variable-modal/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.0.13](https://github.com/google/blockly-samples/compare/@blockly/plugin-typed-variable-modal@8.0.12...@blockly/plugin-typed-variable-modal@8.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/plugin-typed-variable-modal + + + + + ## [8.0.12](https://github.com/google/blockly-samples/compare/@blockly/plugin-typed-variable-modal@8.0.11...@blockly/plugin-typed-variable-modal@8.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/plugin-typed-variable-modal diff --git a/plugins/typed-variable-modal/package-lock.json b/plugins/typed-variable-modal/package-lock.json index 7b5b05dd6..db5e80e10 100644 --- a/plugins/typed-variable-modal/package-lock.json +++ b/plugins/typed-variable-modal/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-typed-variable-modal", - "version": "8.0.12", + "version": "8.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-typed-variable-modal", - "version": "8.0.12", + "version": "8.0.13", "license": "Apache-2.0", "devDependencies": { "jsdom": "^19.0.0", diff --git a/plugins/typed-variable-modal/package.json b/plugins/typed-variable-modal/package.json index 8d4a7f4d7..81f3656b1 100644 --- a/plugins/typed-variable-modal/package.json +++ b/plugins/typed-variable-modal/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-typed-variable-modal", - "version": "8.0.12", + "version": "8.0.13", "description": "A Blockly plugin to create a modal for creating typed variables.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "jsdom": "^19.0.0", "jsdom-global": "3.0.2", "mocha": "^10.1.0", @@ -50,7 +50,7 @@ "blockly": "^11.0.0" }, "dependencies": { - "@blockly/plugin-modal": "^7.0.12" + "@blockly/plugin-modal": "^7.0.13" }, "publishConfig": { "access": "public", diff --git a/plugins/workspace-backpack/CHANGELOG.md b/plugins/workspace-backpack/CHANGELOG.md index 8ff24d4c2..bbebf3fc2 100644 --- a/plugins/workspace-backpack/CHANGELOG.md +++ b/plugins/workspace-backpack/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.13](https://github.com/google/blockly-samples/compare/@blockly/workspace-backpack@6.0.12...@blockly/workspace-backpack@6.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/workspace-backpack + + + + + ## [6.0.12](https://github.com/google/blockly-samples/compare/@blockly/workspace-backpack@6.0.11...@blockly/workspace-backpack@6.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/workspace-backpack diff --git a/plugins/workspace-backpack/package-lock.json b/plugins/workspace-backpack/package-lock.json index 2cc2679d7..cb0c2b810 100644 --- a/plugins/workspace-backpack/package-lock.json +++ b/plugins/workspace-backpack/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/workspace-backpack", - "version": "6.0.12", + "version": "6.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/workspace-backpack", - "version": "6.0.12", + "version": "6.0.13", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/workspace-backpack/package.json b/plugins/workspace-backpack/package.json index efd4b5b01..76409d486 100644 --- a/plugins/workspace-backpack/package.json +++ b/plugins/workspace-backpack/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/workspace-backpack", - "version": "6.0.12", + "version": "6.0.13", "description": "A Blockly plugin that adds Backpack support.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/workspace-minimap/CHANGELOG.md b/plugins/workspace-minimap/CHANGELOG.md index b024a3388..6f6054539 100644 --- a/plugins/workspace-minimap/CHANGELOG.md +++ b/plugins/workspace-minimap/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.13](https://github.com/google/blockly-samples/compare/@blockly/workspace-minimap@0.2.12...@blockly/workspace-minimap@0.2.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/workspace-minimap + + + + + ## [0.2.12](https://github.com/google/blockly-samples/compare/@blockly/workspace-minimap@0.2.11...@blockly/workspace-minimap@0.2.12) (2024-12-03) **Note:** Version bump only for package @blockly/workspace-minimap diff --git a/plugins/workspace-minimap/package-lock.json b/plugins/workspace-minimap/package-lock.json index dec168305..7c49b191a 100644 --- a/plugins/workspace-minimap/package-lock.json +++ b/plugins/workspace-minimap/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/workspace-minimap", - "version": "0.2.12", + "version": "0.2.13", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/workspace-minimap", - "version": "0.2.12", + "version": "0.2.13", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/workspace-minimap/package.json b/plugins/workspace-minimap/package.json index 85c7ce0ac..8f2cec24b 100644 --- a/plugins/workspace-minimap/package.json +++ b/plugins/workspace-minimap/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/workspace-minimap", - "version": "0.2.12", + "version": "0.2.13", "description": "A Blockly plugin.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "chai": "^4.2.0", "typescript": "^5.4.5" }, diff --git a/plugins/workspace-search/CHANGELOG.md b/plugins/workspace-search/CHANGELOG.md index 2b6ad7383..e61a63a47 100644 --- a/plugins/workspace-search/CHANGELOG.md +++ b/plugins/workspace-search/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [9.1.7](https://github.com/google/blockly-samples/compare/@blockly/plugin-workspace-search@9.1.6...@blockly/plugin-workspace-search@9.1.7) (2024-12-19) + +**Note:** Version bump only for package @blockly/plugin-workspace-search + + + + + ## [9.1.6](https://github.com/google/blockly-samples/compare/@blockly/plugin-workspace-search@9.1.5...@blockly/plugin-workspace-search@9.1.6) (2024-12-03) **Note:** Version bump only for package @blockly/plugin-workspace-search diff --git a/plugins/workspace-search/package-lock.json b/plugins/workspace-search/package-lock.json index f569c92bb..83f62bc44 100644 --- a/plugins/workspace-search/package-lock.json +++ b/plugins/workspace-search/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-workspace-search", - "version": "9.1.6", + "version": "9.1.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-workspace-search", - "version": "9.1.6", + "version": "9.1.7", "license": "Apache-2.0", "devDependencies": { "jsdom": "^19.0.0", diff --git a/plugins/workspace-search/package.json b/plugins/workspace-search/package.json index 0e3a6cb42..fabac8f45 100644 --- a/plugins/workspace-search/package.json +++ b/plugins/workspace-search/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-workspace-search", - "version": "9.1.6", + "version": "9.1.7", "description": "A Blockly plugin that adds workspace search support.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "jsdom": "^19.0.0", "jsdom-global": "3.0.2", "sinon": "^9.0.1", diff --git a/plugins/zoom-to-fit/CHANGELOG.md b/plugins/zoom-to-fit/CHANGELOG.md index 39d8c143b..548af3fdf 100644 --- a/plugins/zoom-to-fit/CHANGELOG.md +++ b/plugins/zoom-to-fit/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.13](https://github.com/google/blockly-samples/compare/@blockly/zoom-to-fit@6.0.12...@blockly/zoom-to-fit@6.0.13) (2024-12-19) + +**Note:** Version bump only for package @blockly/zoom-to-fit + + + + + ## [6.0.12](https://github.com/google/blockly-samples/compare/@blockly/zoom-to-fit@6.0.11...@blockly/zoom-to-fit@6.0.12) (2024-12-03) **Note:** Version bump only for package @blockly/zoom-to-fit diff --git a/plugins/zoom-to-fit/package-lock.json b/plugins/zoom-to-fit/package-lock.json index 2b78eb4d8..b10867312 100644 --- a/plugins/zoom-to-fit/package-lock.json +++ b/plugins/zoom-to-fit/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/zoom-to-fit", - "version": "6.0.12", + "version": "6.0.13", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/zoom-to-fit", - "version": "6.0.12", + "version": "6.0.13", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/zoom-to-fit/package.json b/plugins/zoom-to-fit/package.json index 24c16fa00..5c7e72fec 100644 --- a/plugins/zoom-to-fit/package.json +++ b/plugins/zoom-to-fit/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/zoom-to-fit", - "version": "6.0.12", + "version": "6.0.13", "description": "A Blockly plugin that adds a zoom-to-fit control to the workspace.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,7 +39,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.12", + "@blockly/dev-tools": "^8.0.13", "typescript": "^5.4.5" }, "peerDependencies": { From 5945e7c0412faedc08c422f9f538ef22193cc659 Mon Sep 17 00:00:00 2001 From: Aaron Dodson Date: Tue, 21 Jan 2025 07:00:40 -0800 Subject: [PATCH 05/31] fix: Fix bug that prevented keyboard navigation of color swatches. (#2479) --- plugins/field-colour/src/field_colour.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/field-colour/src/field_colour.ts b/plugins/field-colour/src/field_colour.ts index dc5c88dfe..0e05fbb5c 100644 --- a/plugins/field-colour/src/field_colour.ts +++ b/plugins/field-colour/src/field_colour.ts @@ -475,7 +475,7 @@ export class FieldColour extends Blockly.Field { * @param dy Change of y. */ private moveHighlightBy(dx: number, dy: number) { - if (!this.highlightedIndex) { + if (this.highlightedIndex === null) { return; } @@ -564,7 +564,7 @@ export class FieldColour extends Blockly.Field { * @returns Highlighted item (null if none). */ private getHighlighted(): HTMLElement | null { - if (!this.highlightedIndex) { + if (this.highlightedIndex === null) { return null; } From bb8904e457664642bd2fedfdcb8c4cb4d174ee42 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 17:15:04 +0000 Subject: [PATCH 06/31] Publish - @blockly/field-colour@5.0.14 - @blockly/field-colour-hsv-sliders@5.0.14 --- plugins/field-colour-hsv-sliders/CHANGELOG.md | 8 ++++++++ plugins/field-colour-hsv-sliders/package-lock.json | 4 ++-- plugins/field-colour-hsv-sliders/package.json | 4 ++-- plugins/field-colour/CHANGELOG.md | 11 +++++++++++ plugins/field-colour/package-lock.json | 4 ++-- plugins/field-colour/package.json | 2 +- 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/plugins/field-colour-hsv-sliders/CHANGELOG.md b/plugins/field-colour-hsv-sliders/CHANGELOG.md index f7bad208a..1ac8e5657 100644 --- a/plugins/field-colour-hsv-sliders/CHANGELOG.md +++ b/plugins/field-colour-hsv-sliders/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-colour-hsv-sliders@5.0.13...@blockly/field-colour-hsv-sliders@5.0.14) (2025-01-23) + +**Note:** Version bump only for package @blockly/field-colour-hsv-sliders + + + + + ## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-colour-hsv-sliders@5.0.12...@blockly/field-colour-hsv-sliders@5.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/field-colour-hsv-sliders diff --git a/plugins/field-colour-hsv-sliders/package-lock.json b/plugins/field-colour-hsv-sliders/package-lock.json index 2671870f4..f348b09b8 100644 --- a/plugins/field-colour-hsv-sliders/package-lock.json +++ b/plugins/field-colour-hsv-sliders/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.13", + "version": "5.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.13", + "version": "5.0.14", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/field-colour-hsv-sliders/package.json b/plugins/field-colour-hsv-sliders/package.json index 0ed43fa1c..a491fbac6 100644 --- a/plugins/field-colour-hsv-sliders/package.json +++ b/plugins/field-colour-hsv-sliders/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.13", + "version": "5.0.14", "description": "A Blockly colour field using HSV sliders.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ "src" ], "dependencies": { - "@blockly/field-colour": "^5.0.13" + "@blockly/field-colour": "^5.0.14" }, "devDependencies": { "@blockly/dev-scripts": "^4.0.7", diff --git a/plugins/field-colour/CHANGELOG.md b/plugins/field-colour/CHANGELOG.md index 1d758cceb..a059b922c 100644 --- a/plugins/field-colour/CHANGELOG.md +++ b/plugins/field-colour/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-colour@5.0.13...@blockly/field-colour@5.0.14) (2025-01-23) + + +### Bug Fixes + +* Fix bug that prevented keyboard navigation of color swatches. ([#2479](https://github.com/google/blockly-samples/issues/2479)) ([5945e7c](https://github.com/google/blockly-samples/commit/5945e7c0412faedc08c422f9f538ef22193cc659)) + + + + + ## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-colour@5.0.12...@blockly/field-colour@5.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/field-colour diff --git a/plugins/field-colour/package-lock.json b/plugins/field-colour/package-lock.json index 9aaed721d..94d089b19 100644 --- a/plugins/field-colour/package-lock.json +++ b/plugins/field-colour/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-colour", - "version": "5.0.13", + "version": "5.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-colour", - "version": "5.0.13", + "version": "5.0.14", "license": "Apache-2.0", "devDependencies": { "@typescript-eslint/parser": "^5.59.5", diff --git a/plugins/field-colour/package.json b/plugins/field-colour/package.json index 11953f5da..c9b84b354 100644 --- a/plugins/field-colour/package.json +++ b/plugins/field-colour/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-colour", - "version": "5.0.13", + "version": "5.0.14", "description": "A Blockly colour field.", "scripts": { "audit:fix": "blockly-scripts auditFix", From fed7ee0e82cd0a2f3d2f00cec69abd5932feb42f Mon Sep 17 00:00:00 2001 From: John Nesky Date: Fri, 7 Feb 2025 10:35:18 -0800 Subject: [PATCH 07/31] feat: Added button to Advanced Playground to import state. (#2483) --- plugins/dev-tools/src/playground/index.js | 33 +++++++++++++++++++++-- plugins/dev-tools/src/playground/ui.js | 13 ++++++++- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/plugins/dev-tools/src/playground/index.js b/plugins/dev-tools/src/playground/index.js index c0f8001ee..70a9c9c8e 100644 --- a/plugins/dev-tools/src/playground/index.js +++ b/plugins/dev-tools/src/playground/index.js @@ -24,7 +24,12 @@ import {id} from './id'; import {addCodeEditor} from './monaco'; import {addGUIControls} from './options'; import {LocalStorageState} from './state'; -import {renderCheckbox, renderCodeTab, renderPlayground} from './ui'; +import { + renderButton, + renderCheckbox, + renderCodeTab, + renderPlayground, +} from './ui'; // Declare external types to make eslint happy. /* global dat, monaco */ @@ -222,6 +227,7 @@ export function createPlayground( // Update editor state. editorXmlContextKey.set(isXml); editorJsonContextKey.set(isJson); + updateImportButtonDisplay(); playgroundState.set('activeTab', tab.state.name); playgroundState.save(); }; @@ -341,6 +347,26 @@ export function createPlayground( playgroundState.save(); }); + // Create a button to import state from the editor tab to the workspace. + const importButton = renderButton('Import'); + tabButtons.appendChild(importButton); + importButton.addEventListener('click', (e) => { + if (editorXmlContextKey.get()) { + editor.getAction('import-xml').run(); + } + if (editorJsonContextKey.get()) { + editor.getAction('import-json').run(); + } + }); + const updateImportButtonDisplay = function () { + // The import button is only relevant for the XML and JSON tabs. + if (editorXmlContextKey.get() || editorJsonContextKey.get()) { + importButton.style.display = ''; + } else { + importButton.style.display = 'none'; + } + }; + // Set the initial tab as active. const activeTab = playgroundState.get('activeTab'); let currentTab = tabs[activeTab]; @@ -552,7 +578,10 @@ function registerEditorCommands(editor, playground) { const xml = editor.getModel().getValue(); const workspace = playground.getWorkspace(); try { - Blockly.Xml.domToWorkspace(Blockly.utils.xml.textToDom(xml), workspace); + Blockly.Xml.clearWorkspaceAndLoadFromXml( + Blockly.utils.xml.textToDom(xml), + workspace, + ); } catch (e) { // If this fails that's fine. return false; diff --git a/plugins/dev-tools/src/playground/ui.js b/plugins/dev-tools/src/playground/ui.js index 9e24f665f..855b0becd 100644 --- a/plugins/dev-tools/src/playground/ui.js +++ b/plugins/dev-tools/src/playground/ui.js @@ -109,7 +109,6 @@ export function renderPlayground(container) { const tabButtons = document.createElement('div'); tabButtons.style.position = 'absolute'; tabButtons.style.height = '30px'; - tabButtons.style.width = '50px'; tabButtons.style.top = '0'; tabButtons.style.right = '0'; tabButtons.style.display = 'flex'; @@ -166,3 +165,15 @@ export function renderCheckbox(id, label) { checkboxLabel.setAttribute('for', id); return [checkbox, checkboxLabel]; } + +/** + * Render a button. + * @param {string} label The text content of the button. + * @returns {HTMLButtonElement} The button element. + */ +export function renderButton(label) { + const button = document.createElement('button'); + button.setAttribute('type', 'button'); + button.textContent = label; + return button; +} From 986618f96e344fc907d77ba9a35581371a23a846 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 17:14:34 +0000 Subject: [PATCH 08/31] Publish - @blockly/block-dynamic-connection@0.7.14 - @blockly/block-plus-minus@8.0.14 - @blockly/block-shareable-procedures@5.0.14 - @blockly/workspace-content-highlight@5.0.14 - @blockly/continuous-toolbox@6.0.14 - @blockly/plugin-cross-tab-copy-paste@6.0.14 - @blockly/dev-tools@8.1.0 - @blockly/disable-top-blocks@0.5.14 - @blockly/field-angle@5.0.14 - @blockly/field-bitmap@5.0.14 - @blockly/field-colour@5.0.15 - @blockly/field-colour-hsv-sliders@5.0.15 - @blockly/field-date@9.0.14 - @blockly/field-dependent-dropdown@4.0.14 - @blockly/field-grid-dropdown@5.0.14 - @blockly/field-multilineinput@5.0.15 - @blockly/field-slider@7.0.14 - @blockly/fixed-edges@5.0.14 - @blockly/keyboard-navigation@0.6.14 - @blockly/plugin-modal@7.0.14 - @blockly/plugin-scroll-options@6.0.14 - @blockly/shadow-block-converter@6.0.15 - @blockly/plugin-strict-connection-checker@5.0.14 - @blockly/suggested-blocks@5.0.14 - @blockly/toolbox-search@2.0.14 - @blockly/plugin-typed-variable-modal@8.0.14 - @blockly/workspace-backpack@6.0.14 - @blockly/workspace-minimap@0.2.14 - @blockly/plugin-workspace-search@9.1.8 - @blockly/zoom-to-fit@6.0.14 --- plugins/block-dynamic-connection/CHANGELOG.md | 8 ++++++++ plugins/block-dynamic-connection/package-lock.json | 4 ++-- plugins/block-dynamic-connection/package.json | 4 ++-- plugins/block-plus-minus/CHANGELOG.md | 8 ++++++++ plugins/block-plus-minus/package-lock.json | 4 ++-- plugins/block-plus-minus/package.json | 4 ++-- plugins/block-shareable-procedures/CHANGELOG.md | 8 ++++++++ plugins/block-shareable-procedures/package-lock.json | 4 ++-- plugins/block-shareable-procedures/package.json | 4 ++-- plugins/content-highlight/CHANGELOG.md | 8 ++++++++ plugins/content-highlight/package-lock.json | 4 ++-- plugins/content-highlight/package.json | 4 ++-- plugins/continuous-toolbox/CHANGELOG.md | 8 ++++++++ plugins/continuous-toolbox/package-lock.json | 6 +++--- plugins/continuous-toolbox/package.json | 4 ++-- plugins/cross-tab-copy-paste/CHANGELOG.md | 8 ++++++++ plugins/cross-tab-copy-paste/package-lock.json | 6 +++--- plugins/cross-tab-copy-paste/package.json | 4 ++-- plugins/dev-tools/CHANGELOG.md | 11 +++++++++++ plugins/dev-tools/package-lock.json | 4 ++-- plugins/dev-tools/package.json | 2 +- plugins/disable-top-blocks/CHANGELOG.md | 8 ++++++++ plugins/disable-top-blocks/package-lock.json | 6 +++--- plugins/disable-top-blocks/package.json | 4 ++-- plugins/field-angle/CHANGELOG.md | 8 ++++++++ plugins/field-angle/package-lock.json | 4 ++-- plugins/field-angle/package.json | 4 ++-- plugins/field-bitmap/CHANGELOG.md | 8 ++++++++ plugins/field-bitmap/package-lock.json | 4 ++-- plugins/field-bitmap/package.json | 4 ++-- plugins/field-colour-hsv-sliders/CHANGELOG.md | 8 ++++++++ plugins/field-colour-hsv-sliders/package-lock.json | 4 ++-- plugins/field-colour-hsv-sliders/package.json | 6 +++--- plugins/field-colour/CHANGELOG.md | 8 ++++++++ plugins/field-colour/package-lock.json | 4 ++-- plugins/field-colour/package.json | 4 ++-- plugins/field-date/CHANGELOG.md | 8 ++++++++ plugins/field-date/package-lock.json | 4 ++-- plugins/field-date/package.json | 4 ++-- plugins/field-dependent-dropdown/CHANGELOG.md | 8 ++++++++ plugins/field-dependent-dropdown/package-lock.json | 4 ++-- plugins/field-dependent-dropdown/package.json | 4 ++-- plugins/field-grid-dropdown/CHANGELOG.md | 8 ++++++++ plugins/field-grid-dropdown/package-lock.json | 4 ++-- plugins/field-grid-dropdown/package.json | 4 ++-- plugins/field-multilineinput/CHANGELOG.md | 8 ++++++++ plugins/field-multilineinput/package-lock.json | 4 ++-- plugins/field-multilineinput/package.json | 4 ++-- plugins/field-slider/CHANGELOG.md | 8 ++++++++ plugins/field-slider/package-lock.json | 4 ++-- plugins/field-slider/package.json | 4 ++-- plugins/fixed-edges/CHANGELOG.md | 8 ++++++++ plugins/fixed-edges/package-lock.json | 6 +++--- plugins/fixed-edges/package.json | 4 ++-- plugins/keyboard-navigation/CHANGELOG.md | 8 ++++++++ plugins/keyboard-navigation/package-lock.json | 4 ++-- plugins/keyboard-navigation/package.json | 4 ++-- plugins/modal/CHANGELOG.md | 8 ++++++++ plugins/modal/package-lock.json | 4 ++-- plugins/modal/package.json | 4 ++-- plugins/scroll-options/CHANGELOG.md | 8 ++++++++ plugins/scroll-options/package-lock.json | 4 ++-- plugins/scroll-options/package.json | 4 ++-- plugins/shadow-block-converter/CHANGELOG.md | 8 ++++++++ plugins/shadow-block-converter/package-lock.json | 6 +++--- plugins/shadow-block-converter/package.json | 4 ++-- plugins/strict-connection-checker/CHANGELOG.md | 8 ++++++++ plugins/strict-connection-checker/package-lock.json | 4 ++-- plugins/strict-connection-checker/package.json | 4 ++-- plugins/suggested-blocks/CHANGELOG.md | 8 ++++++++ plugins/suggested-blocks/package-lock.json | 4 ++-- plugins/suggested-blocks/package.json | 4 ++-- plugins/toolbox-search/CHANGELOG.md | 8 ++++++++ plugins/toolbox-search/package-lock.json | 4 ++-- plugins/toolbox-search/package.json | 4 ++-- plugins/typed-variable-modal/CHANGELOG.md | 8 ++++++++ plugins/typed-variable-modal/package-lock.json | 4 ++-- plugins/typed-variable-modal/package.json | 6 +++--- plugins/workspace-backpack/CHANGELOG.md | 8 ++++++++ plugins/workspace-backpack/package-lock.json | 4 ++-- plugins/workspace-backpack/package.json | 4 ++-- plugins/workspace-minimap/CHANGELOG.md | 8 ++++++++ plugins/workspace-minimap/package-lock.json | 4 ++-- plugins/workspace-minimap/package.json | 4 ++-- plugins/workspace-search/CHANGELOG.md | 8 ++++++++ plugins/workspace-search/package-lock.json | 4 ++-- plugins/workspace-search/package.json | 4 ++-- plugins/zoom-to-fit/CHANGELOG.md | 8 ++++++++ plugins/zoom-to-fit/package-lock.json | 4 ++-- plugins/zoom-to-fit/package.json | 4 ++-- 90 files changed, 369 insertions(+), 126 deletions(-) diff --git a/plugins/block-dynamic-connection/CHANGELOG.md b/plugins/block-dynamic-connection/CHANGELOG.md index 7e91d9822..7db1f6b7a 100644 --- a/plugins/block-dynamic-connection/CHANGELOG.md +++ b/plugins/block-dynamic-connection/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.7.14](https://github.com/google/blockly-samples/compare/@blockly/block-dynamic-connection@0.7.13...@blockly/block-dynamic-connection@0.7.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/block-dynamic-connection + + + + + ## [0.7.13](https://github.com/google/blockly-samples/compare/@blockly/block-dynamic-connection@0.7.12...@blockly/block-dynamic-connection@0.7.13) (2024-12-19) **Note:** Version bump only for package @blockly/block-dynamic-connection diff --git a/plugins/block-dynamic-connection/package-lock.json b/plugins/block-dynamic-connection/package-lock.json index ffe781122..9e0f3955b 100644 --- a/plugins/block-dynamic-connection/package-lock.json +++ b/plugins/block-dynamic-connection/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/block-dynamic-connection", - "version": "0.7.13", + "version": "0.7.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/block-dynamic-connection", - "version": "0.7.13", + "version": "0.7.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/block-dynamic-connection/package.json b/plugins/block-dynamic-connection/package.json index 0ba0d8916..88aa8483a 100644 --- a/plugins/block-dynamic-connection/package.json +++ b/plugins/block-dynamic-connection/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/block-dynamic-connection", - "version": "0.7.13", + "version": "0.7.14", "description": "A group of blocks that add connections dynamically.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.2.0", "mocha": "^10.2.0", "typescript": "^5.4.5" diff --git a/plugins/block-plus-minus/CHANGELOG.md b/plugins/block-plus-minus/CHANGELOG.md index d4ffe52e1..4aed2badf 100644 --- a/plugins/block-plus-minus/CHANGELOG.md +++ b/plugins/block-plus-minus/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.0.14](https://github.com/google/blockly-samples/compare/@blockly/block-plus-minus@8.0.13...@blockly/block-plus-minus@8.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/block-plus-minus + + + + + ## [8.0.13](https://github.com/google/blockly-samples/compare/@blockly/block-plus-minus@8.0.12...@blockly/block-plus-minus@8.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/block-plus-minus diff --git a/plugins/block-plus-minus/package-lock.json b/plugins/block-plus-minus/package-lock.json index 60dae89eb..a29283d3e 100644 --- a/plugins/block-plus-minus/package-lock.json +++ b/plugins/block-plus-minus/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/block-plus-minus", - "version": "8.0.13", + "version": "8.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/block-plus-minus", - "version": "8.0.13", + "version": "8.0.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/block-plus-minus/package.json b/plugins/block-plus-minus/package.json index 09a2c6320..cc6841c9a 100644 --- a/plugins/block-plus-minus/package.json +++ b/plugins/block-plus-minus/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/block-plus-minus", - "version": "8.0.13", + "version": "8.0.14", "description": "A group of blocks that replace the built-in mutator UI with a +/- based UI.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.2.0", "mocha": "^10.2.0", "sinon": "^9.0.1" diff --git a/plugins/block-shareable-procedures/CHANGELOG.md b/plugins/block-shareable-procedures/CHANGELOG.md index 16c146e71..1a1bc7e6a 100644 --- a/plugins/block-shareable-procedures/CHANGELOG.md +++ b/plugins/block-shareable-procedures/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/block-shareable-procedures@5.0.13...@blockly/block-shareable-procedures@5.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/block-shareable-procedures + + + + + ## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/block-shareable-procedures@5.0.12...@blockly/block-shareable-procedures@5.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/block-shareable-procedures diff --git a/plugins/block-shareable-procedures/package-lock.json b/plugins/block-shareable-procedures/package-lock.json index a99adf43e..075a65956 100644 --- a/plugins/block-shareable-procedures/package-lock.json +++ b/plugins/block-shareable-procedures/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/block-shareable-procedures", - "version": "5.0.13", + "version": "5.0.14", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/block-shareable-procedures", - "version": "5.0.13", + "version": "5.0.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.7", diff --git a/plugins/block-shareable-procedures/package.json b/plugins/block-shareable-procedures/package.json index 24601d89c..187a28104 100644 --- a/plugins/block-shareable-procedures/package.json +++ b/plugins/block-shareable-procedures/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/block-shareable-procedures", - "version": "5.0.13", + "version": "5.0.14", "description": "A plugin that adds procedure blocks which are backed by explicit data models.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -42,7 +42,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.3.7", "jsdom": "^16.4.0", "jsdom-global": "^3.0.2", diff --git a/plugins/content-highlight/CHANGELOG.md b/plugins/content-highlight/CHANGELOG.md index 8ed521780..e132cae05 100644 --- a/plugins/content-highlight/CHANGELOG.md +++ b/plugins/content-highlight/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/workspace-content-highlight@5.0.13...@blockly/workspace-content-highlight@5.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/workspace-content-highlight + + + + + ## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/workspace-content-highlight@5.0.12...@blockly/workspace-content-highlight@5.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/workspace-content-highlight diff --git a/plugins/content-highlight/package-lock.json b/plugins/content-highlight/package-lock.json index bf5ac1852..ecae30e60 100644 --- a/plugins/content-highlight/package-lock.json +++ b/plugins/content-highlight/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/workspace-content-highlight", - "version": "5.0.13", + "version": "5.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/workspace-content-highlight", - "version": "5.0.13", + "version": "5.0.14", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/content-highlight/package.json b/plugins/content-highlight/package.json index a88b6d58a..cf93aeab6 100644 --- a/plugins/content-highlight/package.json +++ b/plugins/content-highlight/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/workspace-content-highlight", - "version": "5.0.13", + "version": "5.0.14", "description": "A Blockly workspace plugin that adds a highlight around the content area.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -44,7 +44,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/continuous-toolbox/CHANGELOG.md b/plugins/continuous-toolbox/CHANGELOG.md index c61ec21c8..d124b0bec 100644 --- a/plugins/continuous-toolbox/CHANGELOG.md +++ b/plugins/continuous-toolbox/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.14](https://github.com/google/blockly-samples/compare/@blockly/continuous-toolbox@6.0.13...@blockly/continuous-toolbox@6.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/continuous-toolbox + + + + + ## [6.0.13](https://github.com/google/blockly-samples/compare/@blockly/continuous-toolbox@6.0.12...@blockly/continuous-toolbox@6.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/continuous-toolbox diff --git a/plugins/continuous-toolbox/package-lock.json b/plugins/continuous-toolbox/package-lock.json index dd33fefb3..b084d403e 100644 --- a/plugins/continuous-toolbox/package-lock.json +++ b/plugins/continuous-toolbox/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/continuous-toolbox", - "version": "6.0.13", + "version": "6.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/continuous-toolbox", - "version": "6.0.13", + "version": "6.0.14", "license": "Apache-2.0", "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13" + "@blockly/dev-tools": "^8.1.0" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/continuous-toolbox/package.json b/plugins/continuous-toolbox/package.json index 557b6a901..2cee9ff6f 100644 --- a/plugins/continuous-toolbox/package.json +++ b/plugins/continuous-toolbox/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/continuous-toolbox", - "version": "6.0.13", + "version": "6.0.14", "description": "A Blockly plugin that adds a continous-scrolling style toolbox and flyout", "scripts": { "build": "blockly-scripts build", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13" + "@blockly/dev-tools": "^8.1.0" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/cross-tab-copy-paste/CHANGELOG.md b/plugins/cross-tab-copy-paste/CHANGELOG.md index 7edc67b2f..05ed0d955 100644 --- a/plugins/cross-tab-copy-paste/CHANGELOG.md +++ b/plugins/cross-tab-copy-paste/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.14](https://github.com/google/blockly-samples/compare/@blockly/plugin-cross-tab-copy-paste@6.0.13...@blockly/plugin-cross-tab-copy-paste@6.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/plugin-cross-tab-copy-paste + + + + + ## [6.0.13](https://github.com/google/blockly-samples/compare/@blockly/plugin-cross-tab-copy-paste@6.0.12...@blockly/plugin-cross-tab-copy-paste@6.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/plugin-cross-tab-copy-paste diff --git a/plugins/cross-tab-copy-paste/package-lock.json b/plugins/cross-tab-copy-paste/package-lock.json index 5bd57da7d..1805e9ac1 100644 --- a/plugins/cross-tab-copy-paste/package-lock.json +++ b/plugins/cross-tab-copy-paste/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/plugin-cross-tab-copy-paste", - "version": "6.0.13", + "version": "6.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-cross-tab-copy-paste", - "version": "6.0.13", + "version": "6.0.14", "license": "Apache-2.0", "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13" + "@blockly/dev-tools": "^8.1.0" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/cross-tab-copy-paste/package.json b/plugins/cross-tab-copy-paste/package.json index d6b3488ec..a9d27074a 100644 --- a/plugins/cross-tab-copy-paste/package.json +++ b/plugins/cross-tab-copy-paste/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-cross-tab-copy-paste", - "version": "6.0.13", + "version": "6.0.14", "description": "Allows you to copy blocks with cross-tab.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13" + "@blockly/dev-tools": "^8.1.0" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/dev-tools/CHANGELOG.md b/plugins/dev-tools/CHANGELOG.md index 0740d4b4f..a4e344780 100644 --- a/plugins/dev-tools/CHANGELOG.md +++ b/plugins/dev-tools/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [8.1.0](https://github.com/google/blockly-samples/compare/@blockly/dev-tools@8.0.13...@blockly/dev-tools@8.1.0) (2025-02-13) + + +### Features + +* Added button to Advanced Playground to import state. ([#2483](https://github.com/google/blockly-samples/issues/2483)) ([fed7ee0](https://github.com/google/blockly-samples/commit/fed7ee0e82cd0a2f3d2f00cec69abd5932feb42f)) + + + + + ## [8.0.13](https://github.com/google/blockly-samples/compare/@blockly/dev-tools@8.0.12...@blockly/dev-tools@8.0.13) (2024-12-19) diff --git a/plugins/dev-tools/package-lock.json b/plugins/dev-tools/package-lock.json index b8094d80b..677520674 100644 --- a/plugins/dev-tools/package-lock.json +++ b/plugins/dev-tools/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/dev-tools", - "version": "8.0.13", + "version": "8.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/dev-tools", - "version": "8.0.13", + "version": "8.1.0", "license": "Apache-2.0", "dependencies": { "chai": "^4.2.0", diff --git a/plugins/dev-tools/package.json b/plugins/dev-tools/package.json index 8666238a1..3d046efee 100644 --- a/plugins/dev-tools/package.json +++ b/plugins/dev-tools/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/dev-tools", - "version": "8.0.13", + "version": "8.1.0", "description": "A library of common utilities for Blockly extension development.", "scripts": { "audit:fix": "blockly-scripts auditFix", diff --git a/plugins/disable-top-blocks/CHANGELOG.md b/plugins/disable-top-blocks/CHANGELOG.md index 03ff075ec..9aecad62e 100644 --- a/plugins/disable-top-blocks/CHANGELOG.md +++ b/plugins/disable-top-blocks/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.5.14](https://github.com/google/blockly-samples/compare/@blockly/disable-top-blocks@0.5.13...@blockly/disable-top-blocks@0.5.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/disable-top-blocks + + + + + ## [0.5.13](https://github.com/google/blockly-samples/compare/@blockly/disable-top-blocks@0.5.12...@blockly/disable-top-blocks@0.5.13) (2024-12-19) **Note:** Version bump only for package @blockly/disable-top-blocks diff --git a/plugins/disable-top-blocks/package-lock.json b/plugins/disable-top-blocks/package-lock.json index 484d8556a..9dc1330df 100644 --- a/plugins/disable-top-blocks/package-lock.json +++ b/plugins/disable-top-blocks/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/disable-top-blocks", - "version": "0.5.13", + "version": "0.5.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/disable-top-blocks", - "version": "0.5.13", + "version": "0.5.14", "license": "Apache-2.0", "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13" + "@blockly/dev-tools": "^8.1.0" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/disable-top-blocks/package.json b/plugins/disable-top-blocks/package.json index 51c863258..54d0dfefe 100644 --- a/plugins/disable-top-blocks/package.json +++ b/plugins/disable-top-blocks/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/disable-top-blocks", - "version": "0.5.13", + "version": "0.5.14", "description": "A Blockly plugin that shows the 'disable' context menu option only on non-orphan blocks.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,7 +39,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13" + "@blockly/dev-tools": "^8.1.0" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/field-angle/CHANGELOG.md b/plugins/field-angle/CHANGELOG.md index 40f40009d..7ea91c531 100644 --- a/plugins/field-angle/CHANGELOG.md +++ b/plugins/field-angle/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-angle@5.0.13...@blockly/field-angle@5.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/field-angle + + + + + ## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-angle@5.0.12...@blockly/field-angle@5.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/field-angle diff --git a/plugins/field-angle/package-lock.json b/plugins/field-angle/package-lock.json index 7f354f256..08c89ba51 100644 --- a/plugins/field-angle/package-lock.json +++ b/plugins/field-angle/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-angle", - "version": "5.0.13", + "version": "5.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-angle", - "version": "5.0.13", + "version": "5.0.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-angle/package.json b/plugins/field-angle/package.json index b97bda64d..4e7f3e24f 100644 --- a/plugins/field-angle/package.json +++ b/plugins/field-angle/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-angle", - "version": "5.0.13", + "version": "5.0.14", "description": "A Blockly angle field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/field-bitmap/CHANGELOG.md b/plugins/field-bitmap/CHANGELOG.md index 4c4995511..202308c07 100644 --- a/plugins/field-bitmap/CHANGELOG.md +++ b/plugins/field-bitmap/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-bitmap@5.0.13...@blockly/field-bitmap@5.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/field-bitmap + + + + + ## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-bitmap@5.0.12...@blockly/field-bitmap@5.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/field-bitmap diff --git a/plugins/field-bitmap/package-lock.json b/plugins/field-bitmap/package-lock.json index 24956bb67..8ee52255e 100644 --- a/plugins/field-bitmap/package-lock.json +++ b/plugins/field-bitmap/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-bitmap", - "version": "5.0.13", + "version": "5.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-bitmap", - "version": "5.0.13", + "version": "5.0.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.6", diff --git a/plugins/field-bitmap/package.json b/plugins/field-bitmap/package.json index 2b08fe9eb..41136379c 100644 --- a/plugins/field-bitmap/package.json +++ b/plugins/field-bitmap/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-bitmap", - "version": "5.0.13", + "version": "5.0.14", "description": "A field that lets users input a pixel grid with their mouse.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.3.6", "mocha": "^10.7.0", "typescript": "^5.4.5" diff --git a/plugins/field-colour-hsv-sliders/CHANGELOG.md b/plugins/field-colour-hsv-sliders/CHANGELOG.md index 1ac8e5657..6979725e5 100644 --- a/plugins/field-colour-hsv-sliders/CHANGELOG.md +++ b/plugins/field-colour-hsv-sliders/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.15](https://github.com/google/blockly-samples/compare/@blockly/field-colour-hsv-sliders@5.0.14...@blockly/field-colour-hsv-sliders@5.0.15) (2025-02-13) + +**Note:** Version bump only for package @blockly/field-colour-hsv-sliders + + + + + ## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-colour-hsv-sliders@5.0.13...@blockly/field-colour-hsv-sliders@5.0.14) (2025-01-23) **Note:** Version bump only for package @blockly/field-colour-hsv-sliders diff --git a/plugins/field-colour-hsv-sliders/package-lock.json b/plugins/field-colour-hsv-sliders/package-lock.json index f348b09b8..0505f1b24 100644 --- a/plugins/field-colour-hsv-sliders/package-lock.json +++ b/plugins/field-colour-hsv-sliders/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.14", + "version": "5.0.15", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.14", + "version": "5.0.15", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/field-colour-hsv-sliders/package.json b/plugins/field-colour-hsv-sliders/package.json index a491fbac6..a72f8882f 100644 --- a/plugins/field-colour-hsv-sliders/package.json +++ b/plugins/field-colour-hsv-sliders/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.14", + "version": "5.0.15", "description": "A Blockly colour field using HSV sliders.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,11 +41,11 @@ "src" ], "dependencies": { - "@blockly/field-colour": "^5.0.14" + "@blockly/field-colour": "^5.0.15" }, "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/field-colour/CHANGELOG.md b/plugins/field-colour/CHANGELOG.md index a059b922c..7cab639ee 100644 --- a/plugins/field-colour/CHANGELOG.md +++ b/plugins/field-colour/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.15](https://github.com/google/blockly-samples/compare/@blockly/field-colour@5.0.14...@blockly/field-colour@5.0.15) (2025-02-13) + +**Note:** Version bump only for package @blockly/field-colour + + + + + ## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-colour@5.0.13...@blockly/field-colour@5.0.14) (2025-01-23) diff --git a/plugins/field-colour/package-lock.json b/plugins/field-colour/package-lock.json index 94d089b19..bd7d0b2b6 100644 --- a/plugins/field-colour/package-lock.json +++ b/plugins/field-colour/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-colour", - "version": "5.0.14", + "version": "5.0.15", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-colour", - "version": "5.0.14", + "version": "5.0.15", "license": "Apache-2.0", "devDependencies": { "@typescript-eslint/parser": "^5.59.5", diff --git a/plugins/field-colour/package.json b/plugins/field-colour/package.json index c9b84b354..2419ab0d1 100644 --- a/plugins/field-colour/package.json +++ b/plugins/field-colour/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-colour", - "version": "5.0.14", + "version": "5.0.15", "description": "A Blockly colour field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "@typescript-eslint/parser": "^5.59.5", "chai": "^4.2.0", "sinon": "^9.0.1", diff --git a/plugins/field-date/CHANGELOG.md b/plugins/field-date/CHANGELOG.md index f5bd47298..6da12492e 100644 --- a/plugins/field-date/CHANGELOG.md +++ b/plugins/field-date/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [9.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-date@9.0.13...@blockly/field-date@9.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/field-date + + + + + ## [9.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-date@9.0.12...@blockly/field-date@9.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/field-date diff --git a/plugins/field-date/package-lock.json b/plugins/field-date/package-lock.json index 1ff3b82c8..931659822 100644 --- a/plugins/field-date/package-lock.json +++ b/plugins/field-date/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-date", - "version": "9.0.13", + "version": "9.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-date", - "version": "9.0.13", + "version": "9.0.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-date/package.json b/plugins/field-date/package.json index 85c4b5d5b..989c90815 100644 --- a/plugins/field-date/package.json +++ b/plugins/field-date/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-date", - "version": "9.0.13", + "version": "9.0.14", "description": "A Blockly date picker field that uses the browser's date picker.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -43,7 +43,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/field-dependent-dropdown/CHANGELOG.md b/plugins/field-dependent-dropdown/CHANGELOG.md index 25a99c768..257bcca14 100644 --- a/plugins/field-dependent-dropdown/CHANGELOG.md +++ b/plugins/field-dependent-dropdown/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-dependent-dropdown@4.0.13...@blockly/field-dependent-dropdown@4.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/field-dependent-dropdown + + + + + ## [4.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-dependent-dropdown@4.0.12...@blockly/field-dependent-dropdown@4.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/field-dependent-dropdown diff --git a/plugins/field-dependent-dropdown/package-lock.json b/plugins/field-dependent-dropdown/package-lock.json index f5514781a..ae6698aca 100644 --- a/plugins/field-dependent-dropdown/package-lock.json +++ b/plugins/field-dependent-dropdown/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-dependent-dropdown", - "version": "4.0.13", + "version": "4.0.14", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/field-dependent-dropdown", - "version": "4.0.13", + "version": "4.0.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-dependent-dropdown/package.json b/plugins/field-dependent-dropdown/package.json index 6e9bb667f..331864656 100644 --- a/plugins/field-dependent-dropdown/package.json +++ b/plugins/field-dependent-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-dependent-dropdown", - "version": "4.0.13", + "version": "4.0.14", "description": "A Blockly dropdown field that automatically updates its available options depending on the value of another field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -42,7 +42,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/field-grid-dropdown/CHANGELOG.md b/plugins/field-grid-dropdown/CHANGELOG.md index 5b8bcddc9..0aefe3121 100644 --- a/plugins/field-grid-dropdown/CHANGELOG.md +++ b/plugins/field-grid-dropdown/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-grid-dropdown@5.0.13...@blockly/field-grid-dropdown@5.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/field-grid-dropdown + + + + + ## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-grid-dropdown@5.0.12...@blockly/field-grid-dropdown@5.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/field-grid-dropdown diff --git a/plugins/field-grid-dropdown/package-lock.json b/plugins/field-grid-dropdown/package-lock.json index 0c91901fa..dc219e1e1 100644 --- a/plugins/field-grid-dropdown/package-lock.json +++ b/plugins/field-grid-dropdown/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-grid-dropdown", - "version": "5.0.13", + "version": "5.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-grid-dropdown", - "version": "5.0.13", + "version": "5.0.14", "license": "Apache 2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/field-grid-dropdown/package.json b/plugins/field-grid-dropdown/package.json index cf385d4d3..79777e974 100644 --- a/plugins/field-grid-dropdown/package.json +++ b/plugins/field-grid-dropdown/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-grid-dropdown", - "version": "5.0.13", + "version": "5.0.14", "description": "A Blockly dropdown field with grid layout.", "scripts": { "build": "blockly-scripts build", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/field-multilineinput/CHANGELOG.md b/plugins/field-multilineinput/CHANGELOG.md index a8d561913..d53978334 100644 --- a/plugins/field-multilineinput/CHANGELOG.md +++ b/plugins/field-multilineinput/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.15](https://github.com/google/blockly-samples/compare/@blockly/field-multilineinput@5.0.14...@blockly/field-multilineinput@5.0.15) (2025-02-13) + +**Note:** Version bump only for package @blockly/field-multilineinput + + + + + ## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-multilineinput@5.0.13...@blockly/field-multilineinput@5.0.14) (2024-12-19) **Note:** Version bump only for package @blockly/field-multilineinput diff --git a/plugins/field-multilineinput/package-lock.json b/plugins/field-multilineinput/package-lock.json index 322eaeb19..117725375 100644 --- a/plugins/field-multilineinput/package-lock.json +++ b/plugins/field-multilineinput/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-multilineinput", - "version": "5.0.14", + "version": "5.0.15", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-multilineinput", - "version": "5.0.14", + "version": "5.0.15", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-multilineinput/package.json b/plugins/field-multilineinput/package.json index 17594fb70..8b1b79aa4 100644 --- a/plugins/field-multilineinput/package.json +++ b/plugins/field-multilineinput/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-multilineinput", - "version": "5.0.14", + "version": "5.0.15", "description": "A Blockly multilineinput field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/field-slider/CHANGELOG.md b/plugins/field-slider/CHANGELOG.md index 7f3537c52..3cfa1343a 100644 --- a/plugins/field-slider/CHANGELOG.md +++ b/plugins/field-slider/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-slider@7.0.13...@blockly/field-slider@7.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/field-slider + + + + + ## [7.0.13](https://github.com/google/blockly-samples/compare/@blockly/field-slider@7.0.12...@blockly/field-slider@7.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/field-slider diff --git a/plugins/field-slider/package-lock.json b/plugins/field-slider/package-lock.json index 8146c7b71..d5212882d 100644 --- a/plugins/field-slider/package-lock.json +++ b/plugins/field-slider/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-slider", - "version": "7.0.13", + "version": "7.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-slider", - "version": "7.0.13", + "version": "7.0.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/field-slider/package.json b/plugins/field-slider/package.json index 41e206bbb..c297fffb1 100644 --- a/plugins/field-slider/package.json +++ b/plugins/field-slider/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-slider", - "version": "7.0.13", + "version": "7.0.14", "description": "A Blockly slider field.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.2.0", "sinon": "^9.0.1", "typescript": "^5.4.5" diff --git a/plugins/fixed-edges/CHANGELOG.md b/plugins/fixed-edges/CHANGELOG.md index 13bdf6981..6fdcc1a3d 100644 --- a/plugins/fixed-edges/CHANGELOG.md +++ b/plugins/fixed-edges/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/fixed-edges@5.0.13...@blockly/fixed-edges@5.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/fixed-edges + + + + + ## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/fixed-edges@5.0.12...@blockly/fixed-edges@5.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/fixed-edges diff --git a/plugins/fixed-edges/package-lock.json b/plugins/fixed-edges/package-lock.json index 989dcd8ff..5c222d447 100644 --- a/plugins/fixed-edges/package-lock.json +++ b/plugins/fixed-edges/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/fixed-edges", - "version": "5.0.13", + "version": "5.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/fixed-edges", - "version": "5.0.13", + "version": "5.0.14", "license": "Apache-2.0", "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13" + "@blockly/dev-tools": "^8.1.0" }, "engines": { "node": ">=8.17.0" diff --git a/plugins/fixed-edges/package.json b/plugins/fixed-edges/package.json index aff195837..26ca5d34d 100644 --- a/plugins/fixed-edges/package.json +++ b/plugins/fixed-edges/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/fixed-edges", - "version": "5.0.13", + "version": "5.0.14", "description": "A plugin that provides a MetricsManager that can be used to prevent the workspace from expanding to the top/left/right/bottom when blocks are dragged to that edge.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,7 +39,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13" + "@blockly/dev-tools": "^8.1.0" }, "peerDependencies": { "blockly": "^11.0.0" diff --git a/plugins/keyboard-navigation/CHANGELOG.md b/plugins/keyboard-navigation/CHANGELOG.md index 3b848b5ed..805ed4315 100644 --- a/plugins/keyboard-navigation/CHANGELOG.md +++ b/plugins/keyboard-navigation/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.6.14](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.13...@blockly/keyboard-navigation@0.6.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/keyboard-navigation + + + + + ## [0.6.13](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.12...@blockly/keyboard-navigation@0.6.13) (2024-12-19) **Note:** Version bump only for package @blockly/keyboard-navigation diff --git a/plugins/keyboard-navigation/package-lock.json b/plugins/keyboard-navigation/package-lock.json index 35e14b6b8..2037b4798 100644 --- a/plugins/keyboard-navigation/package-lock.json +++ b/plugins/keyboard-navigation/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/keyboard-navigation", - "version": "0.6.13", + "version": "0.6.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/keyboard-navigation", - "version": "0.6.13", + "version": "0.6.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/keyboard-navigation/package.json b/plugins/keyboard-navigation/package.json index 122c2be36..14cba18f4 100644 --- a/plugins/keyboard-navigation/package.json +++ b/plugins/keyboard-navigation/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/keyboard-navigation", - "version": "0.6.13", + "version": "0.6.14", "description": "A Blockly plugin that adds keyboard navigation support.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.2.0", "jsdom": "^16.4.0", "jsdom-global": "^3.0.2", diff --git a/plugins/modal/CHANGELOG.md b/plugins/modal/CHANGELOG.md index 709ec8349..a3e34e76c 100644 --- a/plugins/modal/CHANGELOG.md +++ b/plugins/modal/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [7.0.14](https://github.com/google/blockly-samples/compare/@blockly/plugin-modal@7.0.13...@blockly/plugin-modal@7.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/plugin-modal + + + + + ## [7.0.13](https://github.com/google/blockly-samples/compare/@blockly/plugin-modal@7.0.12...@blockly/plugin-modal@7.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/plugin-modal diff --git a/plugins/modal/package-lock.json b/plugins/modal/package-lock.json index 439a0367f..91cfc1a49 100644 --- a/plugins/modal/package-lock.json +++ b/plugins/modal/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-modal", - "version": "7.0.13", + "version": "7.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-modal", - "version": "7.0.13", + "version": "7.0.14", "license": "Apache 2.0", "devDependencies": { "jsdom": "^19.0.0", diff --git a/plugins/modal/package.json b/plugins/modal/package.json index e2a260824..8be8b2544 100644 --- a/plugins/modal/package.json +++ b/plugins/modal/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-modal", - "version": "7.0.13", + "version": "7.0.14", "description": "A Blockly plugin that creates a modal.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "jsdom": "^19.0.0", "jsdom-global": "3.0.2", "mocha": "^10.1.0", diff --git a/plugins/scroll-options/CHANGELOG.md b/plugins/scroll-options/CHANGELOG.md index 3ce2b7b1c..14602d713 100644 --- a/plugins/scroll-options/CHANGELOG.md +++ b/plugins/scroll-options/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.14](https://github.com/google/blockly-samples/compare/@blockly/plugin-scroll-options@6.0.13...@blockly/plugin-scroll-options@6.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/plugin-scroll-options + + + + + ## [6.0.13](https://github.com/google/blockly-samples/compare/@blockly/plugin-scroll-options@6.0.12...@blockly/plugin-scroll-options@6.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/plugin-scroll-options diff --git a/plugins/scroll-options/package-lock.json b/plugins/scroll-options/package-lock.json index 64d6da49c..1e5dbb785 100644 --- a/plugins/scroll-options/package-lock.json +++ b/plugins/scroll-options/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-scroll-options", - "version": "6.0.13", + "version": "6.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-scroll-options", - "version": "6.0.13", + "version": "6.0.14", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/scroll-options/package.json b/plugins/scroll-options/package.json index db285a771..56deab5ed 100644 --- a/plugins/scroll-options/package.json +++ b/plugins/scroll-options/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-scroll-options", - "version": "6.0.13", + "version": "6.0.14", "description": "A Blockly plugin that adds advanced scroll options such as scroll-on-drag and scroll while holding a block.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/shadow-block-converter/CHANGELOG.md b/plugins/shadow-block-converter/CHANGELOG.md index 25fb208ea..6f8f83874 100644 --- a/plugins/shadow-block-converter/CHANGELOG.md +++ b/plugins/shadow-block-converter/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.15](https://github.com/google/blockly-samples/compare/@blockly/shadow-block-converter@6.0.14...@blockly/shadow-block-converter@6.0.15) (2025-02-13) + +**Note:** Version bump only for package @blockly/shadow-block-converter + + + + + ## [6.0.14](https://github.com/google/blockly-samples/compare/@blockly/shadow-block-converter@6.0.13...@blockly/shadow-block-converter@6.0.14) (2024-12-19) **Note:** Version bump only for package @blockly/shadow-block-converter diff --git a/plugins/shadow-block-converter/package-lock.json b/plugins/shadow-block-converter/package-lock.json index f0871bcc8..6de9e0efa 100644 --- a/plugins/shadow-block-converter/package-lock.json +++ b/plugins/shadow-block-converter/package-lock.json @@ -1,16 +1,16 @@ { "name": "@blockly/shadow-block-converter", - "version": "6.0.14", + "version": "6.0.15", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/shadow-block-converter", - "version": "6.0.14", + "version": "6.0.15", "license": "Apache-2.0", "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.2.0", "jsdom": "^19.0.0", "jsdom-global": "^3.0.2", diff --git a/plugins/shadow-block-converter/package.json b/plugins/shadow-block-converter/package.json index 08e3531d6..93fe936d0 100644 --- a/plugins/shadow-block-converter/package.json +++ b/plugins/shadow-block-converter/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/shadow-block-converter", - "version": "6.0.14", + "version": "6.0.15", "description": "A workspace change listener that converts shadow blocks to real blocks when the user edits them.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.2.0", "jsdom": "^19.0.0", "jsdom-global": "^3.0.2", diff --git a/plugins/strict-connection-checker/CHANGELOG.md b/plugins/strict-connection-checker/CHANGELOG.md index 85d8ab359..31a27ec15 100644 --- a/plugins/strict-connection-checker/CHANGELOG.md +++ b/plugins/strict-connection-checker/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/plugin-strict-connection-checker@5.0.13...@blockly/plugin-strict-connection-checker@5.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/plugin-strict-connection-checker + + + + + ## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/plugin-strict-connection-checker@5.0.12...@blockly/plugin-strict-connection-checker@5.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/plugin-strict-connection-checker diff --git a/plugins/strict-connection-checker/package-lock.json b/plugins/strict-connection-checker/package-lock.json index dcf548672..2b487deaa 100644 --- a/plugins/strict-connection-checker/package-lock.json +++ b/plugins/strict-connection-checker/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-strict-connection-checker", - "version": "5.0.13", + "version": "5.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-strict-connection-checker", - "version": "5.0.13", + "version": "5.0.14", "license": "Apache 2.0", "devDependencies": { "chai": "^4.2.0" diff --git a/plugins/strict-connection-checker/package.json b/plugins/strict-connection-checker/package.json index 4000341af..abd03b83c 100644 --- a/plugins/strict-connection-checker/package.json +++ b/plugins/strict-connection-checker/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-strict-connection-checker", - "version": "5.0.13", + "version": "5.0.14", "description": "A connection checker that prevents blocks that don't provide type information from being connected to blocks that do.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.2.0" }, "peerDependencies": { diff --git a/plugins/suggested-blocks/CHANGELOG.md b/plugins/suggested-blocks/CHANGELOG.md index 4e063cfef..8b31d6a7a 100644 --- a/plugins/suggested-blocks/CHANGELOG.md +++ b/plugins/suggested-blocks/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/suggested-blocks@5.0.13...@blockly/suggested-blocks@5.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/suggested-blocks + + + + + ## [5.0.13](https://github.com/google/blockly-samples/compare/@blockly/suggested-blocks@5.0.12...@blockly/suggested-blocks@5.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/suggested-blocks diff --git a/plugins/suggested-blocks/package-lock.json b/plugins/suggested-blocks/package-lock.json index 2b141c09d..b90f616ab 100644 --- a/plugins/suggested-blocks/package-lock.json +++ b/plugins/suggested-blocks/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/suggested-blocks", - "version": "5.0.13", + "version": "5.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/suggested-blocks", - "version": "5.0.13", + "version": "5.0.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.6", diff --git a/plugins/suggested-blocks/package.json b/plugins/suggested-blocks/package.json index 91ecd2c6b..b0029974f 100644 --- a/plugins/suggested-blocks/package.json +++ b/plugins/suggested-blocks/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/suggested-blocks", - "version": "5.0.13", + "version": "5.0.14", "description": "A plugin that adds toolbox panes with suggested blocks based on the user's past usage of blocks.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.3.6", "sinon": "^14.0.0" }, diff --git a/plugins/toolbox-search/CHANGELOG.md b/plugins/toolbox-search/CHANGELOG.md index 522115beb..eab82421b 100644 --- a/plugins/toolbox-search/CHANGELOG.md +++ b/plugins/toolbox-search/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.14](https://github.com/google/blockly-samples/compare/@blockly/toolbox-search@2.0.13...@blockly/toolbox-search@2.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/toolbox-search + + + + + ## [2.0.13](https://github.com/google/blockly-samples/compare/@blockly/toolbox-search@2.0.12...@blockly/toolbox-search@2.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/toolbox-search diff --git a/plugins/toolbox-search/package-lock.json b/plugins/toolbox-search/package-lock.json index 15b56c3bf..145c69b2a 100644 --- a/plugins/toolbox-search/package-lock.json +++ b/plugins/toolbox-search/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/toolbox-search", - "version": "2.0.13", + "version": "2.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/toolbox-search", - "version": "2.0.13", + "version": "2.0.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.7", diff --git a/plugins/toolbox-search/package.json b/plugins/toolbox-search/package.json index 4aab91014..92f371699 100644 --- a/plugins/toolbox-search/package.json +++ b/plugins/toolbox-search/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/toolbox-search", - "version": "2.0.13", + "version": "2.0.14", "description": "A Blockly plugin that adds a toolbox category that allows searching for blocks.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.3.7", "typescript": "^5.4.5" }, diff --git a/plugins/typed-variable-modal/CHANGELOG.md b/plugins/typed-variable-modal/CHANGELOG.md index 677bb7fd6..9cba36691 100644 --- a/plugins/typed-variable-modal/CHANGELOG.md +++ b/plugins/typed-variable-modal/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.0.14](https://github.com/google/blockly-samples/compare/@blockly/plugin-typed-variable-modal@8.0.13...@blockly/plugin-typed-variable-modal@8.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/plugin-typed-variable-modal + + + + + ## [8.0.13](https://github.com/google/blockly-samples/compare/@blockly/plugin-typed-variable-modal@8.0.12...@blockly/plugin-typed-variable-modal@8.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/plugin-typed-variable-modal diff --git a/plugins/typed-variable-modal/package-lock.json b/plugins/typed-variable-modal/package-lock.json index db5e80e10..b27ce0145 100644 --- a/plugins/typed-variable-modal/package-lock.json +++ b/plugins/typed-variable-modal/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-typed-variable-modal", - "version": "8.0.13", + "version": "8.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-typed-variable-modal", - "version": "8.0.13", + "version": "8.0.14", "license": "Apache-2.0", "devDependencies": { "jsdom": "^19.0.0", diff --git a/plugins/typed-variable-modal/package.json b/plugins/typed-variable-modal/package.json index 81f3656b1..18bca88d7 100644 --- a/plugins/typed-variable-modal/package.json +++ b/plugins/typed-variable-modal/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-typed-variable-modal", - "version": "8.0.13", + "version": "8.0.14", "description": "A Blockly plugin to create a modal for creating typed variables.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "jsdom": "^19.0.0", "jsdom-global": "3.0.2", "mocha": "^10.1.0", @@ -50,7 +50,7 @@ "blockly": "^11.0.0" }, "dependencies": { - "@blockly/plugin-modal": "^7.0.13" + "@blockly/plugin-modal": "^7.0.14" }, "publishConfig": { "access": "public", diff --git a/plugins/workspace-backpack/CHANGELOG.md b/plugins/workspace-backpack/CHANGELOG.md index bbebf3fc2..a27e14b91 100644 --- a/plugins/workspace-backpack/CHANGELOG.md +++ b/plugins/workspace-backpack/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.14](https://github.com/google/blockly-samples/compare/@blockly/workspace-backpack@6.0.13...@blockly/workspace-backpack@6.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/workspace-backpack + + + + + ## [6.0.13](https://github.com/google/blockly-samples/compare/@blockly/workspace-backpack@6.0.12...@blockly/workspace-backpack@6.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/workspace-backpack diff --git a/plugins/workspace-backpack/package-lock.json b/plugins/workspace-backpack/package-lock.json index cb0c2b810..13ffe72b5 100644 --- a/plugins/workspace-backpack/package-lock.json +++ b/plugins/workspace-backpack/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/workspace-backpack", - "version": "6.0.13", + "version": "6.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/workspace-backpack", - "version": "6.0.13", + "version": "6.0.14", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/workspace-backpack/package.json b/plugins/workspace-backpack/package.json index 76409d486..474968d04 100644 --- a/plugins/workspace-backpack/package.json +++ b/plugins/workspace-backpack/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/workspace-backpack", - "version": "6.0.13", + "version": "6.0.14", "description": "A Blockly plugin that adds Backpack support.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "typescript": "^5.4.5" }, "peerDependencies": { diff --git a/plugins/workspace-minimap/CHANGELOG.md b/plugins/workspace-minimap/CHANGELOG.md index 6f6054539..65acd9b28 100644 --- a/plugins/workspace-minimap/CHANGELOG.md +++ b/plugins/workspace-minimap/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.14](https://github.com/google/blockly-samples/compare/@blockly/workspace-minimap@0.2.13...@blockly/workspace-minimap@0.2.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/workspace-minimap + + + + + ## [0.2.13](https://github.com/google/blockly-samples/compare/@blockly/workspace-minimap@0.2.12...@blockly/workspace-minimap@0.2.13) (2024-12-19) **Note:** Version bump only for package @blockly/workspace-minimap diff --git a/plugins/workspace-minimap/package-lock.json b/plugins/workspace-minimap/package-lock.json index 7c49b191a..f50f1003f 100644 --- a/plugins/workspace-minimap/package-lock.json +++ b/plugins/workspace-minimap/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/workspace-minimap", - "version": "0.2.13", + "version": "0.2.14", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/workspace-minimap", - "version": "0.2.13", + "version": "0.2.14", "license": "Apache-2.0", "devDependencies": { "chai": "^4.2.0", diff --git a/plugins/workspace-minimap/package.json b/plugins/workspace-minimap/package.json index 8f2cec24b..6c00eb4d4 100644 --- a/plugins/workspace-minimap/package.json +++ b/plugins/workspace-minimap/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/workspace-minimap", - "version": "0.2.13", + "version": "0.2.14", "description": "A Blockly plugin.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "chai": "^4.2.0", "typescript": "^5.4.5" }, diff --git a/plugins/workspace-search/CHANGELOG.md b/plugins/workspace-search/CHANGELOG.md index e61a63a47..cb7d6b86e 100644 --- a/plugins/workspace-search/CHANGELOG.md +++ b/plugins/workspace-search/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [9.1.8](https://github.com/google/blockly-samples/compare/@blockly/plugin-workspace-search@9.1.7...@blockly/plugin-workspace-search@9.1.8) (2025-02-13) + +**Note:** Version bump only for package @blockly/plugin-workspace-search + + + + + ## [9.1.7](https://github.com/google/blockly-samples/compare/@blockly/plugin-workspace-search@9.1.6...@blockly/plugin-workspace-search@9.1.7) (2024-12-19) **Note:** Version bump only for package @blockly/plugin-workspace-search diff --git a/plugins/workspace-search/package-lock.json b/plugins/workspace-search/package-lock.json index 83f62bc44..82c30c72a 100644 --- a/plugins/workspace-search/package-lock.json +++ b/plugins/workspace-search/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/plugin-workspace-search", - "version": "9.1.7", + "version": "9.1.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/plugin-workspace-search", - "version": "9.1.7", + "version": "9.1.8", "license": "Apache-2.0", "devDependencies": { "jsdom": "^19.0.0", diff --git a/plugins/workspace-search/package.json b/plugins/workspace-search/package.json index fabac8f45..f24519ba4 100644 --- a/plugins/workspace-search/package.json +++ b/plugins/workspace-search/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/plugin-workspace-search", - "version": "9.1.7", + "version": "9.1.8", "description": "A Blockly plugin that adds workspace search support.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -40,7 +40,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "jsdom": "^19.0.0", "jsdom-global": "3.0.2", "sinon": "^9.0.1", diff --git a/plugins/zoom-to-fit/CHANGELOG.md b/plugins/zoom-to-fit/CHANGELOG.md index 548af3fdf..bb32f3d93 100644 --- a/plugins/zoom-to-fit/CHANGELOG.md +++ b/plugins/zoom-to-fit/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [6.0.14](https://github.com/google/blockly-samples/compare/@blockly/zoom-to-fit@6.0.13...@blockly/zoom-to-fit@6.0.14) (2025-02-13) + +**Note:** Version bump only for package @blockly/zoom-to-fit + + + + + ## [6.0.13](https://github.com/google/blockly-samples/compare/@blockly/zoom-to-fit@6.0.12...@blockly/zoom-to-fit@6.0.13) (2024-12-19) **Note:** Version bump only for package @blockly/zoom-to-fit diff --git a/plugins/zoom-to-fit/package-lock.json b/plugins/zoom-to-fit/package-lock.json index b10867312..b3384a47e 100644 --- a/plugins/zoom-to-fit/package-lock.json +++ b/plugins/zoom-to-fit/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/zoom-to-fit", - "version": "6.0.13", + "version": "6.0.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/zoom-to-fit", - "version": "6.0.13", + "version": "6.0.14", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/zoom-to-fit/package.json b/plugins/zoom-to-fit/package.json index 5c7e72fec..86b7fad92 100644 --- a/plugins/zoom-to-fit/package.json +++ b/plugins/zoom-to-fit/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/zoom-to-fit", - "version": "6.0.13", + "version": "6.0.14", "description": "A Blockly plugin that adds a zoom-to-fit control to the workspace.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -39,7 +39,7 @@ ], "devDependencies": { "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.0.13", + "@blockly/dev-tools": "^8.1.0", "typescript": "^5.4.5" }, "peerDependencies": { From b216e9eeaf84e5f51af2bc72b8b15a40c7137697 Mon Sep 17 00:00:00 2001 From: John Nesky Date: Thu, 13 Feb 2025 09:59:01 -0800 Subject: [PATCH 09/31] fix: update content highlight when undoing the deletion of blocks. (#2487) --- plugins/content-highlight/src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/content-highlight/src/index.ts b/plugins/content-highlight/src/index.ts index 4ec5a2d23..e87c687b9 100644 --- a/plugins/content-highlight/src/index.ts +++ b/plugins/content-highlight/src/index.ts @@ -15,6 +15,7 @@ import * as Blockly from 'blockly/core'; */ const contentChangeEvents = [ Blockly.Events.VIEWPORT_CHANGE, + Blockly.Events.BLOCK_CREATE, Blockly.Events.BLOCK_MOVE, Blockly.Events.BLOCK_DELETE, Blockly.Events.COMMENT_MOVE, From 8f498443c5f8b34616bfe03d7e17d89d4c554441 Mon Sep 17 00:00:00 2001 From: Murali M V P Date: Sat, 15 Feb 2025 06:02:11 +0530 Subject: [PATCH 10/31] fix(codelabs): Update custom generator codelab to use CodeGenerator The custom generator codelab was using the deprecated Blockly.Generator class. This updates it to use Blockly.CodeGenerator instead, which is the new recommended way to create custom generators. Mentioned in #6584 --- codelabs/custom_generator/custom_generator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codelabs/custom_generator/custom_generator.md b/codelabs/custom_generator/custom_generator.md index 34ab94ac6..5f8db1134 100644 --- a/codelabs/custom_generator/custom_generator.md +++ b/codelabs/custom_generator/custom_generator.md @@ -203,7 +203,7 @@ A custom language generator is simply an instance of `Blockly.Generator`. Create ```js import * as Blockly from 'blockly'; -export const jsonGenerator = new Blockly.Generator('JSON'); +export const jsonGenerator = new Blockly.CodeGenerator('JSON'); ``` ### Generate code From e3057fc919bab68a7a2ccad9df5b4e526c653a33 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 17:15:10 +0000 Subject: [PATCH 11/31] Publish - @blockly/workspace-content-highlight@5.0.15 --- plugins/content-highlight/CHANGELOG.md | 11 +++++++++++ plugins/content-highlight/package-lock.json | 4 ++-- plugins/content-highlight/package.json | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/plugins/content-highlight/CHANGELOG.md b/plugins/content-highlight/CHANGELOG.md index e132cae05..6c66ad8e5 100644 --- a/plugins/content-highlight/CHANGELOG.md +++ b/plugins/content-highlight/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.15](https://github.com/google/blockly-samples/compare/@blockly/workspace-content-highlight@5.0.14...@blockly/workspace-content-highlight@5.0.15) (2025-02-20) + + +### Bug Fixes + +* update content highlight when undoing the deletion of blocks. ([#2487](https://github.com/google/blockly-samples/issues/2487)) ([b216e9e](https://github.com/google/blockly-samples/commit/b216e9eeaf84e5f51af2bc72b8b15a40c7137697)) + + + + + ## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/workspace-content-highlight@5.0.13...@blockly/workspace-content-highlight@5.0.14) (2025-02-13) **Note:** Version bump only for package @blockly/workspace-content-highlight diff --git a/plugins/content-highlight/package-lock.json b/plugins/content-highlight/package-lock.json index ecae30e60..fb2c9d961 100644 --- a/plugins/content-highlight/package-lock.json +++ b/plugins/content-highlight/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/workspace-content-highlight", - "version": "5.0.14", + "version": "5.0.15", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/workspace-content-highlight", - "version": "5.0.14", + "version": "5.0.15", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/content-highlight/package.json b/plugins/content-highlight/package.json index cf93aeab6..804914261 100644 --- a/plugins/content-highlight/package.json +++ b/plugins/content-highlight/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/workspace-content-highlight", - "version": "5.0.14", + "version": "5.0.15", "description": "A Blockly workspace plugin that adds a highlight around the content area.", "scripts": { "audit:fix": "blockly-scripts auditFix", From c1050025e41dd456c822301555b1b3a20577d03e Mon Sep 17 00:00:00 2001 From: Erik Pasternak Date: Thu, 20 Feb 2025 15:05:04 -0800 Subject: [PATCH 12/31] fix: #2463 update event handling for field-bitmap to support touch This includes debug logging. A followup commit will remove the debugging. --- plugins/field-bitmap/src/field-bitmap.ts | 81 ++++++++++++++++++------ 1 file changed, 61 insertions(+), 20 deletions(-) diff --git a/plugins/field-bitmap/src/field-bitmap.ts b/plugins/field-bitmap/src/field-bitmap.ts index 70b4fea42..6e340f416 100644 --- a/plugins/field-bitmap/src/field-bitmap.ts +++ b/plugins/field-bitmap/src/field-bitmap.ts @@ -41,7 +41,7 @@ export class FieldBitmap extends Blockly.Field { private valToPaintWith?: number; buttonOptions: Buttons; pixelSize: number; - pixelColours: {empty: string; filled: string}; + pixelColours: { empty: string; filled: string }; fieldHeight?: number; /** @@ -60,8 +60,8 @@ export class FieldBitmap extends Blockly.Field { this.SERIALIZABLE = true; this.CURSOR = 'default'; - this.buttonOptions = {...DEFAULT_BUTTONS, ...config?.buttons}; - this.pixelColours = {...DEFAULT_PIXEL_COLOURS, ...config?.colours}; + this.buttonOptions = { ...DEFAULT_BUTTONS, ...config?.buttons }; + this.pixelColours = { ...DEFAULT_PIXEL_COLOURS, ...config?.colours }; // Configure value, height, and width const currentValue = this.getValue(); @@ -292,11 +292,15 @@ export class FieldBitmap extends Blockly.Field { // This prevents the normal max-height from adding a scroll bar for large images. Blockly.DropDownDiv.getContentDiv().classList.add('contains-bitmap-editor'); - this.bindEvent(dropdownEditor, 'mouseup', this.onMouseUp); - this.bindEvent(dropdownEditor, 'mouseleave', this.onMouseUp); - this.bindEvent(dropdownEditor, 'dragstart', (e: Event) => { - e.preventDefault(); - }); + this.bindEvent(dropdownEditor, 'pointermove', this.onPointerMove); + this.bindEvent(dropdownEditor, 'pointerup', this.onPointerUp); + this.bindEvent(dropdownEditor, 'pointerleave', this.onPointerUp); + this.bindEvent(dropdownEditor, 'pointerdown', this.onPointerDown); + this.bindEvent(dropdownEditor, 'pointercancel', this.onPointerUp); + // Stop the browser from intercepting touch events and cancelling the event + this.bindEvent(dropdownEditor, 'touchmove', (e: Event) => { + e.preventDefault(); + }); this.editorPixels = []; for (let r = 0; r < this.imgHeight; r++) { @@ -314,16 +318,23 @@ export class FieldBitmap extends Blockly.Field { ? this.pixelColours.filled : this.pixelColours.empty; - // Handle clicking a pixel - this.bindEvent(button, 'mousedown', () => { - this.onMouseDownInPixel(r, c); - return true; - }); + // Set the custom data attributes for row and column indices + button.setAttribute('data-row', r.toString()); + button.setAttribute('data-col', c.toString()); + + // // Handle clicking a pixel + // this.bindEvent(button, 'mousedown', () => { + // console.log("handling pointer down") + // this.onMouseDownInPixel(r, c); + // return true; + // }); + + // // Handle dragging into a pixel when mouse is down + // this.bindEvent(button, 'mouseenter', () => { + // console.log("handling pointer enter"); + // this.onMouseEnterPixel(r, c); + // }); - // Handle dragging into a pixel when mouse is down - this.bindEvent(button, 'mouseenter', () => { - this.onMouseEnterPixel(r, c); - }); } pixelContainer.appendChild(rowDiv); } @@ -472,6 +483,35 @@ export class FieldBitmap extends Blockly.Field { return newVal; } + /** + * + * @param e + */ + private onPointerDown(e: PointerEvent) { + const currentElement = document.elementFromPoint(e.clientX, e.clientY); + const rowIndex = currentElement?.getAttribute('data-row'); + const colIndex = currentElement?.getAttribute('data-col'); + console.log("pointer down on " + rowIndex + ", " + colIndex + " element " + currentElement); + if (rowIndex && colIndex) { + this.onMouseDownInPixel(parseInt(rowIndex), parseInt(colIndex)); + } + } + + /** + * + * @param e + */ + private onPointerMove(e: PointerEvent) { + const currentElement = document.elementFromPoint(e.clientX, e.clientY); + const rowIndex = currentElement?.getAttribute('data-row'); + const colIndex = currentElement?.getAttribute('data-col'); + console.log("pointer moving on " + rowIndex + ", " + colIndex); + if (rowIndex && colIndex) { + this.onMouseEnterPixel(parseInt(rowIndex), parseInt(colIndex)); + } + e.preventDefault(); + } + /** * Called when a mousedown event occurs within the bounds of a pixel. * @@ -508,7 +548,8 @@ export class FieldBitmap extends Blockly.Field { * Resets mouse state (e.g. After either a mouseup event or if the mouse * leaves the editor area). */ - private onMouseUp() { + private onPointerUp(e: PointerEvent) { + console.log("onMouseUp " + e.pointerType); this.mouseIsDown = false; this.valToPaintWith = undefined; } @@ -594,10 +635,10 @@ export class FieldBitmap extends Blockly.Field { private bindEvent( element: HTMLElement, eventName: string, - callback: (e: Event) => void, + callback: (e: PointerEvent) => void, ) { this.boundEvents.push( - Blockly.browserEvents.conditionalBind(element, eventName, this, callback), + Blockly.browserEvents.bind(element, eventName, this, callback), ); } From bef02193bc1febd435f64c6a40efc4bf60e37dbf Mon Sep 17 00:00:00 2001 From: Erik Pasternak Date: Fri, 21 Feb 2025 09:49:36 -0800 Subject: [PATCH 13/31] Cleanup of pointer changes to the bitmap field --- plugins/field-bitmap/src/field-bitmap.ts | 65 ++++++++++-------------- 1 file changed, 26 insertions(+), 39 deletions(-) diff --git a/plugins/field-bitmap/src/field-bitmap.ts b/plugins/field-bitmap/src/field-bitmap.ts index 6e340f416..a0a87e513 100644 --- a/plugins/field-bitmap/src/field-bitmap.ts +++ b/plugins/field-bitmap/src/field-bitmap.ts @@ -37,7 +37,7 @@ export class FieldBitmap extends Blockly.Field { private editorPixels: HTMLElement[][] | null = null; private blockDisplayPixels: SVGElement[][] | null = null; /** Stateful variables */ - private mouseIsDown = false; + private pointerIsDown = false; private valToPaintWith?: number; buttonOptions: Buttons; pixelSize: number; @@ -293,14 +293,15 @@ export class FieldBitmap extends Blockly.Field { Blockly.DropDownDiv.getContentDiv().classList.add('contains-bitmap-editor'); this.bindEvent(dropdownEditor, 'pointermove', this.onPointerMove); - this.bindEvent(dropdownEditor, 'pointerup', this.onPointerUp); - this.bindEvent(dropdownEditor, 'pointerleave', this.onPointerUp); - this.bindEvent(dropdownEditor, 'pointerdown', this.onPointerDown); - this.bindEvent(dropdownEditor, 'pointercancel', this.onPointerUp); - // Stop the browser from intercepting touch events and cancelling the event + this.bindEvent(dropdownEditor, 'pointerup', this.onPointerEnd); + this.bindEvent(dropdownEditor, 'pointerleave', this.onPointerEnd); + this.bindEvent(dropdownEditor, 'pointerdown', this.onPointerStart); + this.bindEvent(dropdownEditor, 'pointercancel', this.onPointerEnd); + // Stop the browser from handling touch events and cancelling the event. this.bindEvent(dropdownEditor, 'touchmove', (e: Event) => { e.preventDefault(); - }); + }); + this.editorPixels = []; for (let r = 0; r < this.imgHeight; r++) { @@ -321,20 +322,6 @@ export class FieldBitmap extends Blockly.Field { // Set the custom data attributes for row and column indices button.setAttribute('data-row', r.toString()); button.setAttribute('data-col', c.toString()); - - // // Handle clicking a pixel - // this.bindEvent(button, 'mousedown', () => { - // console.log("handling pointer down") - // this.onMouseDownInPixel(r, c); - // return true; - // }); - - // // Handle dragging into a pixel when mouse is down - // this.bindEvent(button, 'mouseenter', () => { - // console.log("handling pointer enter"); - // this.onMouseEnterPixel(r, c); - // }); - } pixelContainer.appendChild(rowDiv); } @@ -487,13 +474,14 @@ export class FieldBitmap extends Blockly.Field { * * @param e */ - private onPointerDown(e: PointerEvent) { + private onPointerStart(e: PointerEvent) { const currentElement = document.elementFromPoint(e.clientX, e.clientY); const rowIndex = currentElement?.getAttribute('data-row'); const colIndex = currentElement?.getAttribute('data-col'); - console.log("pointer down on " + rowIndex + ", " + colIndex + " element " + currentElement); if (rowIndex && colIndex) { - this.onMouseDownInPixel(parseInt(rowIndex), parseInt(colIndex)); + this.onPointerDownInPixel(parseInt(rowIndex), parseInt(colIndex)); + this.pointerIsDown = true; + e.preventDefault(); } } @@ -502,40 +490,40 @@ export class FieldBitmap extends Blockly.Field { * @param e */ private onPointerMove(e: PointerEvent) { + if (!this.pointerIsDown) { + return; + } const currentElement = document.elementFromPoint(e.clientX, e.clientY); const rowIndex = currentElement?.getAttribute('data-row'); const colIndex = currentElement?.getAttribute('data-col'); - console.log("pointer moving on " + rowIndex + ", " + colIndex); if (rowIndex && colIndex) { - this.onMouseEnterPixel(parseInt(rowIndex), parseInt(colIndex)); + this.updatePixelValue(parseInt(rowIndex), parseInt(colIndex)); } e.preventDefault(); } /** - * Called when a mousedown event occurs within the bounds of a pixel. + * Starts an interaction with the bitmap dropdown when there's a pointerdown + * within one of the pixels in the editor. * * @param r Row number of grid. * @param c Column number of grid. */ - private onMouseDownInPixel(r: number, c: number) { + private onPointerDownInPixel(r: number, c: number) { // Toggle that pixel to the opposite of its value const newPixelValue = 1 - this.getPixel(r, c); this.setPixel(r, c, newPixelValue); - this.mouseIsDown = true; + this.pointerIsDown = true; this.valToPaintWith = newPixelValue; } /** - * Called when the mouse drags over a pixel in the editor. + * Sets the specified pixel in the editor to the current value being painted. * * @param r Row number of grid. * @param c Column number of grid. */ - private onMouseEnterPixel(r: number, c: number) { - if (!this.mouseIsDown) { - return; - } + private updatePixelValue(r: number, c: number) { if ( this.valToPaintWith !== undefined && this.getPixel(r, c) !== this.valToPaintWith @@ -545,12 +533,11 @@ export class FieldBitmap extends Blockly.Field { } /** - * Resets mouse state (e.g. After either a mouseup event or if the mouse - * leaves the editor area). + * Resets pointer state (e.g. After either a pointerup event or if the + * gesture is canceled). */ - private onPointerUp(e: PointerEvent) { - console.log("onMouseUp " + e.pointerType); - this.mouseIsDown = false; + private onPointerEnd(e: PointerEvent) { + this.pointerIsDown = false; this.valToPaintWith = undefined; } From 54b66efbae4655d454eb4579d6651bc36813c7f8 Mon Sep 17 00:00:00 2001 From: Erik Pasternak Date: Fri, 21 Feb 2025 10:01:33 -0800 Subject: [PATCH 14/31] clean up comments --- plugins/field-bitmap/src/field-bitmap.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/field-bitmap/src/field-bitmap.ts b/plugins/field-bitmap/src/field-bitmap.ts index a0a87e513..28ba15df8 100644 --- a/plugins/field-bitmap/src/field-bitmap.ts +++ b/plugins/field-bitmap/src/field-bitmap.ts @@ -471,8 +471,10 @@ export class FieldBitmap extends Blockly.Field { } /** + * Checks if a down event is on a pixel in this editor and if it is starts an + * edit gesture. * - * @param e + * @param e The down event. */ private onPointerStart(e: PointerEvent) { const currentElement = document.elementFromPoint(e.clientX, e.clientY); @@ -486,8 +488,10 @@ export class FieldBitmap extends Blockly.Field { } /** + * Updates the editor if we're in an edit gesture and the pointer is over a + * pixel. * - * @param e + * @param e The move event. */ private onPointerMove(e: PointerEvent) { if (!this.pointerIsDown) { @@ -536,7 +540,7 @@ export class FieldBitmap extends Blockly.Field { * Resets pointer state (e.g. After either a pointerup event or if the * gesture is canceled). */ - private onPointerEnd(e: PointerEvent) { + private onPointerEnd() { this.pointerIsDown = false; this.valToPaintWith = undefined; } From 82d5a48fde202fc8163663de0c93f464d13f09bd Mon Sep 17 00:00:00 2001 From: Erik Pasternak Date: Fri, 21 Feb 2025 10:23:27 -0800 Subject: [PATCH 15/31] Prettier format cleanup --- plugins/field-bitmap/src/field-bitmap.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/plugins/field-bitmap/src/field-bitmap.ts b/plugins/field-bitmap/src/field-bitmap.ts index 28ba15df8..e19156c66 100644 --- a/plugins/field-bitmap/src/field-bitmap.ts +++ b/plugins/field-bitmap/src/field-bitmap.ts @@ -41,7 +41,7 @@ export class FieldBitmap extends Blockly.Field { private valToPaintWith?: number; buttonOptions: Buttons; pixelSize: number; - pixelColours: { empty: string; filled: string }; + pixelColours: {empty: string; filled: string}; fieldHeight?: number; /** @@ -60,8 +60,8 @@ export class FieldBitmap extends Blockly.Field { this.SERIALIZABLE = true; this.CURSOR = 'default'; - this.buttonOptions = { ...DEFAULT_BUTTONS, ...config?.buttons }; - this.pixelColours = { ...DEFAULT_PIXEL_COLOURS, ...config?.colours }; + this.buttonOptions = {...DEFAULT_BUTTONS, ...config?.buttons}; + this.pixelColours = {...DEFAULT_PIXEL_COLOURS, ...config?.colours}; // Configure value, height, and width const currentValue = this.getValue(); @@ -299,10 +299,9 @@ export class FieldBitmap extends Blockly.Field { this.bindEvent(dropdownEditor, 'pointercancel', this.onPointerEnd); // Stop the browser from handling touch events and cancelling the event. this.bindEvent(dropdownEditor, 'touchmove', (e: Event) => { - e.preventDefault(); + e.preventDefault(); }); - this.editorPixels = []; for (let r = 0; r < this.imgHeight; r++) { this.editorPixels.push([]); @@ -473,7 +472,7 @@ export class FieldBitmap extends Blockly.Field { /** * Checks if a down event is on a pixel in this editor and if it is starts an * edit gesture. - * + * * @param e The down event. */ private onPointerStart(e: PointerEvent) { @@ -490,7 +489,7 @@ export class FieldBitmap extends Blockly.Field { /** * Updates the editor if we're in an edit gesture and the pointer is over a * pixel. - * + * * @param e The move event. */ private onPointerMove(e: PointerEvent) { From a37225a6dc4369fcec14e2a704eaa6bef9842b8c Mon Sep 17 00:00:00 2001 From: John Nesky Date: Fri, 21 Feb 2025 19:57:02 -0800 Subject: [PATCH 16/31] fix: Mitigate shareable procedure flyout bug. --- plugins/block-shareable-procedures/src/blocks.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/block-shareable-procedures/src/blocks.ts b/plugins/block-shareable-procedures/src/blocks.ts index 83346409a..07f2cc50c 100644 --- a/plugins/block-shareable-procedures/src/blocks.ts +++ b/plugins/block-shareable-procedures/src/blocks.ts @@ -1068,7 +1068,10 @@ const procedureCallerUpdateShapeMixin = { doProcedureUpdate: function () { if (!this.getProcedureModel()) return; const id = this.getProcedureModel().getId(); - if (!this.getTargetWorkspace_().getProcedureMap().has(id)) { + if ( + !this.getTargetWorkspace_().getProcedureMap().has(id) && + !this.isInFlyout + ) { this.dispose(true); return; } From 5e2852024cce9c10687e48b05253950060348251 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 17:15:08 +0000 Subject: [PATCH 17/31] Publish - @blockly/block-shareable-procedures@5.0.15 - @blockly/field-bitmap@5.0.15 --- plugins/block-shareable-procedures/CHANGELOG.md | 11 +++++++++++ plugins/block-shareable-procedures/package-lock.json | 4 ++-- plugins/block-shareable-procedures/package.json | 2 +- plugins/field-bitmap/CHANGELOG.md | 11 +++++++++++ plugins/field-bitmap/package-lock.json | 4 ++-- plugins/field-bitmap/package.json | 2 +- 6 files changed, 28 insertions(+), 6 deletions(-) diff --git a/plugins/block-shareable-procedures/CHANGELOG.md b/plugins/block-shareable-procedures/CHANGELOG.md index 1a1bc7e6a..462742eba 100644 --- a/plugins/block-shareable-procedures/CHANGELOG.md +++ b/plugins/block-shareable-procedures/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.15](https://github.com/google/blockly-samples/compare/@blockly/block-shareable-procedures@5.0.14...@blockly/block-shareable-procedures@5.0.15) (2025-02-27) + + +### Bug Fixes + +* Mitigate shareable procedure flyout bug. ([a37225a](https://github.com/google/blockly-samples/commit/a37225a6dc4369fcec14e2a704eaa6bef9842b8c)) + + + + + ## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/block-shareable-procedures@5.0.13...@blockly/block-shareable-procedures@5.0.14) (2025-02-13) **Note:** Version bump only for package @blockly/block-shareable-procedures diff --git a/plugins/block-shareable-procedures/package-lock.json b/plugins/block-shareable-procedures/package-lock.json index 075a65956..e6487b02f 100644 --- a/plugins/block-shareable-procedures/package-lock.json +++ b/plugins/block-shareable-procedures/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/block-shareable-procedures", - "version": "5.0.14", + "version": "5.0.15", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockly/block-shareable-procedures", - "version": "5.0.14", + "version": "5.0.15", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.7", diff --git a/plugins/block-shareable-procedures/package.json b/plugins/block-shareable-procedures/package.json index 187a28104..3a90e4928 100644 --- a/plugins/block-shareable-procedures/package.json +++ b/plugins/block-shareable-procedures/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/block-shareable-procedures", - "version": "5.0.14", + "version": "5.0.15", "description": "A plugin that adds procedure blocks which are backed by explicit data models.", "scripts": { "audit:fix": "blockly-scripts auditFix", diff --git a/plugins/field-bitmap/CHANGELOG.md b/plugins/field-bitmap/CHANGELOG.md index 202308c07..0709df261 100644 --- a/plugins/field-bitmap/CHANGELOG.md +++ b/plugins/field-bitmap/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.15](https://github.com/google/blockly-samples/compare/@blockly/field-bitmap@5.0.14...@blockly/field-bitmap@5.0.15) (2025-02-27) + + +### Bug Fixes + +* [#2463](https://github.com/google/blockly-samples/issues/2463) update event handling for field-bitmap to support touch ([c105002](https://github.com/google/blockly-samples/commit/c1050025e41dd456c822301555b1b3a20577d03e)) + + + + + ## [5.0.14](https://github.com/google/blockly-samples/compare/@blockly/field-bitmap@5.0.13...@blockly/field-bitmap@5.0.14) (2025-02-13) **Note:** Version bump only for package @blockly/field-bitmap diff --git a/plugins/field-bitmap/package-lock.json b/plugins/field-bitmap/package-lock.json index 8ee52255e..8ee96365f 100644 --- a/plugins/field-bitmap/package-lock.json +++ b/plugins/field-bitmap/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-bitmap", - "version": "5.0.14", + "version": "5.0.15", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-bitmap", - "version": "5.0.14", + "version": "5.0.15", "license": "Apache-2.0", "devDependencies": { "chai": "^4.3.6", diff --git a/plugins/field-bitmap/package.json b/plugins/field-bitmap/package.json index 41136379c..c7a5f80d5 100644 --- a/plugins/field-bitmap/package.json +++ b/plugins/field-bitmap/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-bitmap", - "version": "5.0.14", + "version": "5.0.15", "description": "A field that lets users input a pixel grid with their mouse.", "scripts": { "audit:fix": "blockly-scripts auditFix", From 369c0cce96debf1ee29c9ded82c08f5fdf4dcd56 Mon Sep 17 00:00:00 2001 From: Erik Pasternak Date: Wed, 5 Mar 2025 14:08:37 -0800 Subject: [PATCH 18/31] Change import.txt to import.js --- .../test/manual-test-data/fix-imports/{import.txt => import.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename plugins/migration/test/manual-test-data/fix-imports/{import.txt => import.js} (100%) diff --git a/plugins/migration/test/manual-test-data/fix-imports/import.txt b/plugins/migration/test/manual-test-data/fix-imports/import.js similarity index 100% rename from plugins/migration/test/manual-test-data/fix-imports/import.txt rename to plugins/migration/test/manual-test-data/fix-imports/import.js From 53c6ef26a2d8bc7c1decbc5ca07a03aa9e54504b Mon Sep 17 00:00:00 2001 From: Erik Pasternak Date: Wed, 5 Mar 2025 14:44:39 -0800 Subject: [PATCH 19/31] Add blockly import migration and rename manual test files to .js --- plugins/migration/bin/fix-imports.js | 19 +++++++++++++++++-- .../manual-test-data/fix-imports/import.js | 4 +++- .../fix-imports/{mixed-1.txt => mixed-1.js} | 2 ++ .../fix-imports/{mixed-2.txt => mixed-2.js} | 2 ++ .../fix-imports/{require.txt => require.js} | 2 ++ .../{rename.txt => rename.js} | 0 6 files changed, 26 insertions(+), 3 deletions(-) rename plugins/migration/test/manual-test-data/fix-imports/{mixed-1.txt => mixed-1.js} (98%) rename plugins/migration/test/manual-test-data/fix-imports/{mixed-2.txt => mixed-2.js} (98%) rename plugins/migration/test/manual-test-data/fix-imports/{require.txt => require.js} (98%) rename plugins/migration/test/manual-test-data/{rename.txt => rename.js} (100%) diff --git a/plugins/migration/bin/fix-imports.js b/plugins/migration/bin/fix-imports.js index abaa79bee..57d5e6b87 100644 --- a/plugins/migration/bin/fix-imports.js +++ b/plugins/migration/bin/fix-imports.js @@ -99,6 +99,13 @@ const database = [ newImport: `import * as libraryBlocks from 'blockly/blocks';`, newRequire: `const libraryBlocks = require('blockly/blocks');`, }, + { + import: 'blockly', + oldIdentifier: 'Blockly', + newIdentifier: 'Blockly', // no-op + newImport: `import * as Blockly from 'blockly';`, + newRequire: `const Blockly = require('blockly');`, // no-op + }, ]; /** @@ -125,9 +132,17 @@ function migrateContents(contents) { */ function fixImport(contents, migrationData) { const identifier = getIdentifier(contents, migrationData); + // Don't need to run if there are no references. if (!identifier) return contents; - const newContents = replaceReferences(contents, migrationData, identifier); - if (newContents !== contents) return addImport(newContents, migrationData); + // If the identifier changed, update all references to it and the import + if (migrationData.oldIdentifier !== migrationData.newIdentifier) { + const newContents = replaceReferences(contents, migrationData, identifier); + if (newContents !== contents) { + return addImport(newContents, migrationData); + } + } else { // Just the import changed + return addImport(contents, migrationData); + } return contents; } diff --git a/plugins/migration/test/manual-test-data/fix-imports/import.js b/plugins/migration/test/manual-test-data/fix-imports/import.js index 4344593a5..2152d7543 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/import.js +++ b/plugins/migration/test/manual-test-data/fix-imports/import.js @@ -1,6 +1,6 @@ // Manual test data for the renamings migration. // Run using: -// node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/import.txt +// node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/import.js import Blockly from 'blockly'; import * as BlocklyDart from "blockly/dart"; @@ -31,3 +31,5 @@ Some.Other.identifer; Blockly.libraryBlocks.something; const something = Blockly.libraryBlocks.something; Some.Other.identifer; + +Blockly.zelos; diff --git a/plugins/migration/test/manual-test-data/fix-imports/mixed-1.txt b/plugins/migration/test/manual-test-data/fix-imports/mixed-1.js similarity index 98% rename from plugins/migration/test/manual-test-data/fix-imports/mixed-1.txt rename to plugins/migration/test/manual-test-data/fix-imports/mixed-1.js index 1c45be79d..77ffed9a2 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/mixed-1.txt +++ b/plugins/migration/test/manual-test-data/fix-imports/mixed-1.js @@ -31,3 +31,5 @@ Some.Other.identifer; Blockly.libraryBlocks.something; const something = Blockly.libraryBlocks.something; Some.Other.identifer; + +Blockly.zelos; diff --git a/plugins/migration/test/manual-test-data/fix-imports/mixed-2.txt b/plugins/migration/test/manual-test-data/fix-imports/mixed-2.js similarity index 98% rename from plugins/migration/test/manual-test-data/fix-imports/mixed-2.txt rename to plugins/migration/test/manual-test-data/fix-imports/mixed-2.js index 320ddd2fe..ee00d671d 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/mixed-2.txt +++ b/plugins/migration/test/manual-test-data/fix-imports/mixed-2.js @@ -31,3 +31,5 @@ Some.Other.identifer; Blockly.libraryBlocks.something; const something = Blockly.libraryBlocks.something; Some.Other.identifer; + +Blockly.zelos; diff --git a/plugins/migration/test/manual-test-data/fix-imports/require.txt b/plugins/migration/test/manual-test-data/fix-imports/require.js similarity index 98% rename from plugins/migration/test/manual-test-data/fix-imports/require.txt rename to plugins/migration/test/manual-test-data/fix-imports/require.js index 58b8fa0d8..5e4a4e43c 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/require.txt +++ b/plugins/migration/test/manual-test-data/fix-imports/require.js @@ -31,3 +31,5 @@ Some.Other.identifer; Blockly.libraryBlocks.something; const something = Blockly.libraryBlocks.something; Some.Other.identifer; + +Blockly.zelos; diff --git a/plugins/migration/test/manual-test-data/rename.txt b/plugins/migration/test/manual-test-data/rename.js similarity index 100% rename from plugins/migration/test/manual-test-data/rename.txt rename to plugins/migration/test/manual-test-data/rename.js From 9088b94102cb191a134d3b10377176688bb1f16d Mon Sep 17 00:00:00 2001 From: Erik Pasternak Date: Wed, 5 Mar 2025 14:44:39 -0800 Subject: [PATCH 20/31] Fix: Migrate Blockly import to use * as Blockly Adds a 'blockly' import migration and renames manual test files to .js --- plugins/migration/bin/fix-imports.js | 19 +++++++++++++++++-- .../manual-test-data/fix-imports/import.js | 4 +++- .../fix-imports/{mixed-1.txt => mixed-1.js} | 2 ++ .../fix-imports/{mixed-2.txt => mixed-2.js} | 2 ++ .../fix-imports/{require.txt => require.js} | 2 ++ .../{rename.txt => rename.js} | 0 6 files changed, 26 insertions(+), 3 deletions(-) rename plugins/migration/test/manual-test-data/fix-imports/{mixed-1.txt => mixed-1.js} (98%) rename plugins/migration/test/manual-test-data/fix-imports/{mixed-2.txt => mixed-2.js} (98%) rename plugins/migration/test/manual-test-data/fix-imports/{require.txt => require.js} (98%) rename plugins/migration/test/manual-test-data/{rename.txt => rename.js} (100%) diff --git a/plugins/migration/bin/fix-imports.js b/plugins/migration/bin/fix-imports.js index abaa79bee..57d5e6b87 100644 --- a/plugins/migration/bin/fix-imports.js +++ b/plugins/migration/bin/fix-imports.js @@ -99,6 +99,13 @@ const database = [ newImport: `import * as libraryBlocks from 'blockly/blocks';`, newRequire: `const libraryBlocks = require('blockly/blocks');`, }, + { + import: 'blockly', + oldIdentifier: 'Blockly', + newIdentifier: 'Blockly', // no-op + newImport: `import * as Blockly from 'blockly';`, + newRequire: `const Blockly = require('blockly');`, // no-op + }, ]; /** @@ -125,9 +132,17 @@ function migrateContents(contents) { */ function fixImport(contents, migrationData) { const identifier = getIdentifier(contents, migrationData); + // Don't need to run if there are no references. if (!identifier) return contents; - const newContents = replaceReferences(contents, migrationData, identifier); - if (newContents !== contents) return addImport(newContents, migrationData); + // If the identifier changed, update all references to it and the import + if (migrationData.oldIdentifier !== migrationData.newIdentifier) { + const newContents = replaceReferences(contents, migrationData, identifier); + if (newContents !== contents) { + return addImport(newContents, migrationData); + } + } else { // Just the import changed + return addImport(contents, migrationData); + } return contents; } diff --git a/plugins/migration/test/manual-test-data/fix-imports/import.js b/plugins/migration/test/manual-test-data/fix-imports/import.js index 4344593a5..2152d7543 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/import.js +++ b/plugins/migration/test/manual-test-data/fix-imports/import.js @@ -1,6 +1,6 @@ // Manual test data for the renamings migration. // Run using: -// node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/import.txt +// node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/import.js import Blockly from 'blockly'; import * as BlocklyDart from "blockly/dart"; @@ -31,3 +31,5 @@ Some.Other.identifer; Blockly.libraryBlocks.something; const something = Blockly.libraryBlocks.something; Some.Other.identifer; + +Blockly.zelos; diff --git a/plugins/migration/test/manual-test-data/fix-imports/mixed-1.txt b/plugins/migration/test/manual-test-data/fix-imports/mixed-1.js similarity index 98% rename from plugins/migration/test/manual-test-data/fix-imports/mixed-1.txt rename to plugins/migration/test/manual-test-data/fix-imports/mixed-1.js index 1c45be79d..77ffed9a2 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/mixed-1.txt +++ b/plugins/migration/test/manual-test-data/fix-imports/mixed-1.js @@ -31,3 +31,5 @@ Some.Other.identifer; Blockly.libraryBlocks.something; const something = Blockly.libraryBlocks.something; Some.Other.identifer; + +Blockly.zelos; diff --git a/plugins/migration/test/manual-test-data/fix-imports/mixed-2.txt b/plugins/migration/test/manual-test-data/fix-imports/mixed-2.js similarity index 98% rename from plugins/migration/test/manual-test-data/fix-imports/mixed-2.txt rename to plugins/migration/test/manual-test-data/fix-imports/mixed-2.js index 320ddd2fe..ee00d671d 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/mixed-2.txt +++ b/plugins/migration/test/manual-test-data/fix-imports/mixed-2.js @@ -31,3 +31,5 @@ Some.Other.identifer; Blockly.libraryBlocks.something; const something = Blockly.libraryBlocks.something; Some.Other.identifer; + +Blockly.zelos; diff --git a/plugins/migration/test/manual-test-data/fix-imports/require.txt b/plugins/migration/test/manual-test-data/fix-imports/require.js similarity index 98% rename from plugins/migration/test/manual-test-data/fix-imports/require.txt rename to plugins/migration/test/manual-test-data/fix-imports/require.js index 58b8fa0d8..5e4a4e43c 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/require.txt +++ b/plugins/migration/test/manual-test-data/fix-imports/require.js @@ -31,3 +31,5 @@ Some.Other.identifer; Blockly.libraryBlocks.something; const something = Blockly.libraryBlocks.something; Some.Other.identifer; + +Blockly.zelos; diff --git a/plugins/migration/test/manual-test-data/rename.txt b/plugins/migration/test/manual-test-data/rename.js similarity index 100% rename from plugins/migration/test/manual-test-data/rename.txt rename to plugins/migration/test/manual-test-data/rename.js From ce253e230596ce024068fda4709e0fde8a4383e7 Mon Sep 17 00:00:00 2001 From: Erik Pasternak Date: Wed, 5 Mar 2025 15:14:02 -0800 Subject: [PATCH 21/31] Linter cleanup --- plugins/migration/bin/fix-imports.js | 3 ++- plugins/migration/test/manual-test-data/fix-imports/import.js | 4 ++-- .../migration/test/manual-test-data/fix-imports/mixed-2.js | 4 ++-- .../migration/test/manual-test-data/fix-imports/require.js | 4 ++-- plugins/migration/test/manual-test-data/rename.js | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/plugins/migration/bin/fix-imports.js b/plugins/migration/bin/fix-imports.js index 57d5e6b87..642767c71 100644 --- a/plugins/migration/bin/fix-imports.js +++ b/plugins/migration/bin/fix-imports.js @@ -140,7 +140,8 @@ function fixImport(contents, migrationData) { if (newContents !== contents) { return addImport(newContents, migrationData); } - } else { // Just the import changed + } else { + // Just the import changed return addImport(contents, migrationData); } return contents; diff --git a/plugins/migration/test/manual-test-data/fix-imports/import.js b/plugins/migration/test/manual-test-data/fix-imports/import.js index 2152d7543..721272e09 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/import.js +++ b/plugins/migration/test/manual-test-data/fix-imports/import.js @@ -3,9 +3,9 @@ // node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/import.js import Blockly from 'blockly'; -import * as BlocklyDart from "blockly/dart"; +import * as BlocklyDart from 'blockly/dart'; import * as BlocklyLua from 'blockly/lua'; -import * as BlocklyPhp from "blockly/php"; +import * as BlocklyPhp from 'blockly/php'; import * as BlocklyPython from 'blockly/python'; Blockly.JavaScript.something; diff --git a/plugins/migration/test/manual-test-data/fix-imports/mixed-2.js b/plugins/migration/test/manual-test-data/fix-imports/mixed-2.js index ee00d671d..d8b8ca3fd 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/mixed-2.js +++ b/plugins/migration/test/manual-test-data/fix-imports/mixed-2.js @@ -3,9 +3,9 @@ // node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/mixed-1.txt const Blockly = require('blockly'); -import * as BlocklyDart from "blockly/dart"; +import * as BlocklyDart from 'blockly/dart'; const BlocklyLua = require('blockly/lua'); -import * as BlocklyPhp from "blockly/php"; +import * as BlocklyPhp from 'blockly/php'; const BlocklyPython = require('blockly/python'); Blockly.JavaScript.something; diff --git a/plugins/migration/test/manual-test-data/fix-imports/require.js b/plugins/migration/test/manual-test-data/fix-imports/require.js index 5e4a4e43c..d6a941058 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/require.js +++ b/plugins/migration/test/manual-test-data/fix-imports/require.js @@ -3,9 +3,9 @@ // node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/require.txt const Blockly = require('blockly'); -const BlocklyDart = require("blockly/dart"); +const BlocklyDart = require('blockly/dart'); const BlocklyLua = require('blockly/lua'); -let BlocklyPhp = require("blockly/php"); +let BlocklyPhp = require('blockly/php'); var BlocklyPython = require('blockly/python'); Blockly.JavaScript.something; diff --git a/plugins/migration/test/manual-test-data/rename.js b/plugins/migration/test/manual-test-data/rename.js index 6ce4c46d6..55bb51b87 100644 --- a/plugins/migration/test/manual-test-data/rename.js +++ b/plugins/migration/test/manual-test-data/rename.js @@ -25,4 +25,4 @@ class SubClass extends Blockly.moduleC { const thingA = /** @type {Blockly.moduleD} */ (new Blockly.moduleE()); return thingA.someMethod(paramA, paramB); } -}; +} From c63173daeb40d97fb5f9f030d8c196385be7dcc9 Mon Sep 17 00:00:00 2001 From: Erik Pasternak Date: Wed, 5 Mar 2025 15:23:49 -0800 Subject: [PATCH 22/31] disable linting for test files --- plugins/migration/test/manual-test-data/fix-imports/import.js | 1 + plugins/migration/test/manual-test-data/fix-imports/mixed-1.js | 1 + plugins/migration/test/manual-test-data/fix-imports/require.js | 1 + plugins/migration/test/manual-test-data/rename.js | 1 + 4 files changed, 4 insertions(+) diff --git a/plugins/migration/test/manual-test-data/fix-imports/import.js b/plugins/migration/test/manual-test-data/fix-imports/import.js index 721272e09..32f5e2c17 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/import.js +++ b/plugins/migration/test/manual-test-data/fix-imports/import.js @@ -1,3 +1,4 @@ +/* eslint no-use-before-define: 0 */ // Manual test data for the renamings migration. // Run using: // node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/import.js diff --git a/plugins/migration/test/manual-test-data/fix-imports/mixed-1.js b/plugins/migration/test/manual-test-data/fix-imports/mixed-1.js index 77ffed9a2..2203c86e7 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/mixed-1.js +++ b/plugins/migration/test/manual-test-data/fix-imports/mixed-1.js @@ -1,3 +1,4 @@ +/* eslint no-use-before-define: 0 */ // Manual test data for the renamings migration. // Run using: // node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/mixed-1.txt diff --git a/plugins/migration/test/manual-test-data/fix-imports/require.js b/plugins/migration/test/manual-test-data/fix-imports/require.js index d6a941058..08d38726e 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/require.js +++ b/plugins/migration/test/manual-test-data/fix-imports/require.js @@ -1,3 +1,4 @@ +/* eslint no-use-before-define: 0 */ // Manual test data for the renamings migration. // Run using: // node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/require.txt diff --git a/plugins/migration/test/manual-test-data/rename.js b/plugins/migration/test/manual-test-data/rename.js index 55bb51b87..2e0ac83ca 100644 --- a/plugins/migration/test/manual-test-data/rename.js +++ b/plugins/migration/test/manual-test-data/rename.js @@ -1,3 +1,4 @@ +/* eslint no-use-before-define: 0 */ // Manual test data for the renamings migration. // Run using: // node ./bin/migrate rename --from ./test/manual-test-data/rename.txt From abadea5064d1d652056fe99ee5726b6c781f1822 Mon Sep 17 00:00:00 2001 From: Erik Pasternak Date: Wed, 5 Mar 2025 15:54:38 -0800 Subject: [PATCH 23/31] Exclude manual test files from eslint --- eslint.config.js | 1 + plugins/migration/test/manual-test-data/fix-imports/import.js | 1 - plugins/migration/test/manual-test-data/fix-imports/mixed-1.js | 1 - plugins/migration/test/manual-test-data/fix-imports/require.js | 1 - plugins/migration/test/manual-test-data/rename.js | 1 - 5 files changed, 1 insertion(+), 4 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 3bd67633d..4ce99166d 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -40,6 +40,7 @@ module.exports = [ '**/dist/', '**/build/', 'examples/blockly-svelte/public/bundle.js', + 'plugins/migration/test/manual-test-data/', // specific examples that are sometimes copied into plugins 'plugins/dev-create/templates/sample-app', 'plugins/dev-create/templates/sample-app-ts', diff --git a/plugins/migration/test/manual-test-data/fix-imports/import.js b/plugins/migration/test/manual-test-data/fix-imports/import.js index 32f5e2c17..721272e09 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/import.js +++ b/plugins/migration/test/manual-test-data/fix-imports/import.js @@ -1,4 +1,3 @@ -/* eslint no-use-before-define: 0 */ // Manual test data for the renamings migration. // Run using: // node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/import.js diff --git a/plugins/migration/test/manual-test-data/fix-imports/mixed-1.js b/plugins/migration/test/manual-test-data/fix-imports/mixed-1.js index 2203c86e7..77ffed9a2 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/mixed-1.js +++ b/plugins/migration/test/manual-test-data/fix-imports/mixed-1.js @@ -1,4 +1,3 @@ -/* eslint no-use-before-define: 0 */ // Manual test data for the renamings migration. // Run using: // node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/mixed-1.txt diff --git a/plugins/migration/test/manual-test-data/fix-imports/require.js b/plugins/migration/test/manual-test-data/fix-imports/require.js index 08d38726e..d6a941058 100644 --- a/plugins/migration/test/manual-test-data/fix-imports/require.js +++ b/plugins/migration/test/manual-test-data/fix-imports/require.js @@ -1,4 +1,3 @@ -/* eslint no-use-before-define: 0 */ // Manual test data for the renamings migration. // Run using: // node ./bin/migrate fix-imports --from ./test/manual-test-data/fix-imports/require.txt diff --git a/plugins/migration/test/manual-test-data/rename.js b/plugins/migration/test/manual-test-data/rename.js index 2e0ac83ca..55bb51b87 100644 --- a/plugins/migration/test/manual-test-data/rename.js +++ b/plugins/migration/test/manual-test-data/rename.js @@ -1,4 +1,3 @@ -/* eslint no-use-before-define: 0 */ // Manual test data for the renamings migration. // Run using: // node ./bin/migrate rename --from ./test/manual-test-data/rename.txt From bf5ae0ac5c9de0c3c708ef47b399d3cb0c86cb2c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 13 Mar 2025 17:14:50 +0000 Subject: [PATCH 24/31] Publish - @blockly/migrate@3.0.3 --- plugins/migration/CHANGELOG.md | 8 ++++++++ plugins/migration/package-lock.json | 6 +++--- plugins/migration/package.json | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/plugins/migration/CHANGELOG.md b/plugins/migration/CHANGELOG.md index d9a8438d5..33a5d899d 100644 --- a/plugins/migration/CHANGELOG.md +++ b/plugins/migration/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.0.3](https://github.com/google/blockly-samples/compare/@blockly/migrate@3.0.2...@blockly/migrate@3.0.3) (2025-03-13) + +**Note:** Version bump only for package @blockly/migrate + + + + + ## [3.0.2](https://github.com/google/blockly-samples/compare/@blockly/migrate@3.0.1...@blockly/migrate@3.0.2) (2024-08-08) diff --git a/plugins/migration/package-lock.json b/plugins/migration/package-lock.json index 24f0cfaea..a485ded8a 100644 --- a/plugins/migration/package-lock.json +++ b/plugins/migration/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/migrate", - "version": "3.0.2", + "version": "3.0.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/migrate", - "version": "3.0.2", + "version": "3.0.3", "license": "Apache-2.0", "dependencies": { "chalk": "^5.0.1", @@ -2062,4 +2062,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/plugins/migration/package.json b/plugins/migration/package.json index 4f93c8118..d752897ff 100644 --- a/plugins/migration/package.json +++ b/plugins/migration/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/migrate", - "version": "3.0.2", + "version": "3.0.3", "description": "A collection of tools that help with migrating apps using Blockly to new versions of BLockly.", "bin": "./bin/migrate.js", "author": "Blockly Team", From e8d4a874c44cdb0e1ad05b08122251b9e758655c Mon Sep 17 00:00:00 2001 From: Aaron Dodson Date: Tue, 25 Mar 2025 14:21:45 -0700 Subject: [PATCH 25/31] fix: Don't call blur() when mouse leaves the colour picker. (#2499) --- plugins/field-colour/src/field_colour.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/field-colour/src/field_colour.ts b/plugins/field-colour/src/field_colour.ts index 0e05fbb5c..7c184d193 100644 --- a/plugins/field-colour/src/field_colour.ts +++ b/plugins/field-colour/src/field_colour.ts @@ -547,11 +547,10 @@ export class FieldColour extends Blockly.Field { } /** - * Handle a mouse leave event. Blur the picker and unhighlight - * the currently highlighted colour. + * Handle a mouse leave event by unnhighlighting the currently highlighted + * colour. */ private onMouseLeave() { - this.picker?.blur(); const highlighted = this.getHighlighted(); if (highlighted) { Blockly.utils.dom.removeClass(highlighted, 'blocklyColourHighlighted'); From c13fd38f977407a0e84956d113572da2bee8b73d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 17:15:17 +0000 Subject: [PATCH 26/31] Publish - @blockly/field-colour@5.0.16 - @blockly/field-colour-hsv-sliders@5.0.16 --- plugins/field-colour-hsv-sliders/CHANGELOG.md | 8 ++++++++ plugins/field-colour-hsv-sliders/package-lock.json | 4 ++-- plugins/field-colour-hsv-sliders/package.json | 4 ++-- plugins/field-colour/CHANGELOG.md | 11 +++++++++++ plugins/field-colour/package-lock.json | 4 ++-- plugins/field-colour/package.json | 2 +- 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/plugins/field-colour-hsv-sliders/CHANGELOG.md b/plugins/field-colour-hsv-sliders/CHANGELOG.md index 6979725e5..83ea24bad 100644 --- a/plugins/field-colour-hsv-sliders/CHANGELOG.md +++ b/plugins/field-colour-hsv-sliders/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.16](https://github.com/google/blockly-samples/compare/@blockly/field-colour-hsv-sliders@5.0.15...@blockly/field-colour-hsv-sliders@5.0.16) (2025-03-27) + +**Note:** Version bump only for package @blockly/field-colour-hsv-sliders + + + + + ## [5.0.15](https://github.com/google/blockly-samples/compare/@blockly/field-colour-hsv-sliders@5.0.14...@blockly/field-colour-hsv-sliders@5.0.15) (2025-02-13) **Note:** Version bump only for package @blockly/field-colour-hsv-sliders diff --git a/plugins/field-colour-hsv-sliders/package-lock.json b/plugins/field-colour-hsv-sliders/package-lock.json index 0505f1b24..c1fb7989d 100644 --- a/plugins/field-colour-hsv-sliders/package-lock.json +++ b/plugins/field-colour-hsv-sliders/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.15", + "version": "5.0.16", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.15", + "version": "5.0.16", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/field-colour-hsv-sliders/package.json b/plugins/field-colour-hsv-sliders/package.json index a72f8882f..67c660347 100644 --- a/plugins/field-colour-hsv-sliders/package.json +++ b/plugins/field-colour-hsv-sliders/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.15", + "version": "5.0.16", "description": "A Blockly colour field using HSV sliders.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ "src" ], "dependencies": { - "@blockly/field-colour": "^5.0.15" + "@blockly/field-colour": "^5.0.16" }, "devDependencies": { "@blockly/dev-scripts": "^4.0.7", diff --git a/plugins/field-colour/CHANGELOG.md b/plugins/field-colour/CHANGELOG.md index 7cab639ee..8aa6400f0 100644 --- a/plugins/field-colour/CHANGELOG.md +++ b/plugins/field-colour/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.16](https://github.com/google/blockly-samples/compare/@blockly/field-colour@5.0.15...@blockly/field-colour@5.0.16) (2025-03-27) + + +### Bug Fixes + +* Don't call blur() when mouse leaves the colour picker. ([#2499](https://github.com/google/blockly-samples/issues/2499)) ([e8d4a87](https://github.com/google/blockly-samples/commit/e8d4a874c44cdb0e1ad05b08122251b9e758655c)) + + + + + ## [5.0.15](https://github.com/google/blockly-samples/compare/@blockly/field-colour@5.0.14...@blockly/field-colour@5.0.15) (2025-02-13) **Note:** Version bump only for package @blockly/field-colour diff --git a/plugins/field-colour/package-lock.json b/plugins/field-colour/package-lock.json index bd7d0b2b6..a7ab28e8e 100644 --- a/plugins/field-colour/package-lock.json +++ b/plugins/field-colour/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-colour", - "version": "5.0.15", + "version": "5.0.16", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-colour", - "version": "5.0.15", + "version": "5.0.16", "license": "Apache-2.0", "devDependencies": { "@typescript-eslint/parser": "^5.59.5", diff --git a/plugins/field-colour/package.json b/plugins/field-colour/package.json index 2419ab0d1..8d6ecab45 100644 --- a/plugins/field-colour/package.json +++ b/plugins/field-colour/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-colour", - "version": "5.0.15", + "version": "5.0.16", "description": "A Blockly colour field.", "scripts": { "audit:fix": "blockly-scripts auditFix", From 049bfd369cbb334bb5ad7d30de6c47489309306f Mon Sep 17 00:00:00 2001 From: Aaron Dodson Date: Fri, 25 Apr 2025 10:17:00 -0700 Subject: [PATCH 27/31] chore: Remove the obsolete keyboard navigation codelab. (#2501) --- codelabs/keyboard_navigation/AST.png | Bin 87916 -> 0 bytes codelabs/keyboard_navigation/block_terms.png | Bin 277551 -> 0 bytes .../keyboard_navigation/flashing_cursor.gif | Bin 359984 -> 0 bytes .../keyboard_navigation.md | 567 ------------------ codelabs/keyboard_navigation/new_cursor.gif | Bin 153802 -> 0 bytes .../keyboard_navigation/skip_connections.png | Bin 50293 -> 0 bytes codelabs/keyboard_navigation/skip_to_top.gif | Bin 113042 -> 0 bytes 7 files changed, 567 deletions(-) delete mode 100644 codelabs/keyboard_navigation/AST.png delete mode 100644 codelabs/keyboard_navigation/block_terms.png delete mode 100644 codelabs/keyboard_navigation/flashing_cursor.gif delete mode 100644 codelabs/keyboard_navigation/keyboard_navigation.md delete mode 100644 codelabs/keyboard_navigation/new_cursor.gif delete mode 100644 codelabs/keyboard_navigation/skip_connections.png delete mode 100644 codelabs/keyboard_navigation/skip_to_top.gif diff --git a/codelabs/keyboard_navigation/AST.png b/codelabs/keyboard_navigation/AST.png deleted file mode 100644 index 556e883ed6ee39b241621851fc0659a32e362304..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87916 zcmeFY`9IWs^fx}Vh>}WD*(ybdvhTF3G$Dqpqhx1>?8cUgR7lyz8nQ2wWehV6Ayf8k z48|Bsc4Id)jNv<7*Hzbb-`~&u2i%XxJ-^Mo-}8E(*Lj`gd7kIIBlI8WaC4pJ0ssKq zckkSM2mtJ<2LRZ+4(w}!m6x6E`hCT3AwZ7a-vMhI?)=naJ^lZE{+|Z^Z`43YZ^UPx zw$HNSkjyvDVy7cT_%+=YRtz?@BU&XDUW%#IbK(dRG}W-jCv$ekE^7nMgitQ;O}Q#& z%~!e`eH#`XqnhLM*ZnK4xRSAXtugw`{VHQjDQ-YW&~kzZ;7I-6WlkRJZ|w9t?%uBf z!v4(?kvd1; zgHdd(`}VVz0*8On{IX1~lcCqI-6R?MQ=H92Z(I(Eum%9w4zWbjqtP{&kp-23q8v55 zpi2RwVgaID)e+R&R~nr|{&}93<+$=`Z{En;{u6{qRmG=K2jRWfxg<|=C$1#VDuu)D zvoqTL*r&{%@J8rWq)(jFQDNRmm|Y6kQ{7e{-@PO@mxBX-PUlSCcw)c1BU3KiKK43z z_k;(4B`!;f0LcM5H|vSK^^ZO3MP%UuoRZe#1n83z^`87i2h82Chd+j;ioI2jQpwQb z)o3~O-S)u(1&OnVF1;M*eZ43pAdF7@L-lXQK*BI_B3%?R2{iUa0`_J{9M-W#9 z-gGAHQF(fJ@42JAUT1mhf{@+{`9&rAr!LIL8N_C~lqVa;tL<$LN}WHfnJr~*V94r#OtRSKb8EP`w}5Ic%nBuSql#a7Ft z`e|^l@ByJBk4vr9C7quIpOr~|h%>ByV4C*SHXb3%FpN#X+}t-3X(!~}Ox8HWipD2d zhnGGMP~wdcJXt>_DE5}G0^u9EzfTxq0Hn8xM6uq>BAE4B@A2g0pMK9T@BOb?}lqS7D*BpU!#uPTi7|M%hUNQZc#TMD;vg zwY2+2U76HT2~bE-jaNO}+V`Zxrfy2hh9^N8=QCm0Z9Ln7sZ=nPxFsob7jxxp6HO%G-p#W#&ibG=aDo!5|6ye+_t$a>AQ)!Q?9AKEOn(wr{^%SWUaFSZHgz(V>|91^K{eTGhsT-&8l- zx2X?N$y0ZYZ~GN6aC`nbewOc!8m82B2TdruJ0$`Zl|$*K&&qYr;ywq{RcdGz02 zz4yvr&il(h4_N=XffYD@g@<2ef6^DgVF_U1PaPaBJ3a{qREoTKn$<~sC;=`cP^dxz z;e5cf5&a4VLs)Bg-Dkw6TI0`xQK})LG9fSv0Ceji0CxB_>EV{-q=bPI7Rrxi__gx2!mx`Xb6MdYExgV)}2a~U8J=`8@ zja81_u%hx^OyJ-s`abQrgPx5kbU|#q61pzDT``jt zL4I*r+jl(SFQu?NjqWU1|M-;!fF^jPeiI3Y9Q+c_N}^nm^r86MszR&?s12P9BF?)O=+9D*Df2}NTkZK3Kz^OtgX;j)H+GfsXSEM?`<-k% zp4pn%R^LHpB%6QC0;x(N#h^&8xi!$>ql_|2_C3VFOq8A!(Cg@eYe6jH+q{g;<>ab> zCw1z>$JJ9zk_&$}AcyqRa(Y}Zl=dNKsE0f_*fwP`#eT_#Y31>i7s_#66Px6yID~#7I6@MaP`pYhEpAitwb84K`UYLt_&zyR^=4$H(s$UX ziCk1jOU*McZ1al6ByLnTkt+%vgGc=>Q(&aWuq2pkd3EYDnC6s{l-V(xXj+R6>KSof zd3q%gKwVTI5R7wT%Rpi~hWO$K|8DSX2*o)B)|b)lif@s-hAP!C4W>^#Vy=#tuQ!-q z&daORAECtgkAK5$&~_P18|m5%>`3xXNyHor$()RFnw_u#?|nJ!cR;C|xP zw=e0lU&TfAjZNd_bmhGog_LJ7_5mi^TGP1GjGjk)bgqi?wh<-R4JS*lHIP|_UCcAd zXA1U%f||4~5C8RQosE_zlL}AL!#Jp{ni z4`S!qsSC41kIJqYo(L#1ZMC~tdkHA9>Ad0I6Yf8?k-M=V&^goFnJa;jYkcXCo+?Vr z&VQ@b{n>PBwpuw2Pxk>E^~{~;8?si;NOe9JKwTa5pCu)<&34YFIxaal4n5=}@E1PQ zc~!mR+5SlF#>9xGs~*jc9Je+8j4q!36Hi~LhQPG<=i_b-=fpd?Uc75;1q?eO*4fKP;2{*#MhZXz zCXQ3%rd#cNjh>B`%1(W*S)RQlW%w7%oP3YmxmAON`5m&R^%LKGu?H|PffQ6*QnPX| z5^WRPQM;}YiDs$=VyPb4lex1|vOY8K$~(IJ5>j)+)BGP@uHF0qsbbvL)Eskc2djeh zu=JNQLVgie{>~{UO78a9bTW+_5tud$!X3+?Mq9M^I^I9H8FtT1(FCO(kQ_vvPj?u= z^Uutg-=0Z1*y){+igiFglk!lQEvI?4yArBeqXjh|@>>SREc(uPOPgWz2l)p5@lBL( zSu*|0^Ot);D2x1qC7Z}*4dvUdN;1719@>3zsK_ovi3&J@!$Et1kL_vA-jzuRh1GILkbFKDa`c)P2~slFg#VxEjwg0kjoOJ1G73@RjTG z{Oxkr)U4{zbPJ#_!&Y;%!4OTK)3sQ@YOQ!#dND!%n-miTn=yNc)Cv;yuCGtEx8j^v zc3R-1YN|&!V!dfi&uL|@(`y4rm?7`1kv+*aG{>)RUTrx{;m{)%Q&bM9vb%q7^~l=| z`dVG@+KnHnqmG z_UFyDE1@0O>&Ts(sTt9BMTCV zJgUB$jl5vzgO$NhkEL$5%CFb+(%|%4e zhTr13q|NJ$L^^i#5%&W?{P6nS$yd`e-S#4cw@_f$jI7UGn@3QQx^VRk$5-Qo#lX|e(OJ2VQF4BxHv{Rx^G{C z#V1BEBjlOxGo*%JHKc}l+w$4u1@z47ThECZ0pwHsvD)1g26{Y6YQ4w#a(4D9wi+PtJ!TwbeNh(;O{QvX{=0RP7KJL7w--B@&S`>bH=QijwPmb33?2 z!WXG9$L7$^_2$pY3IRXeBCA%MNZz{+mU83AQhiqZ{Kq!jx0rM?M!NTMt*X_e*JOcX zp8L@h8^{_-g4c3;hi;9#%WjYTc=p#Pc-d%L;N0F4x^t5Q7JL>2GB=4o-dq3{=C#~a?6qteSW*Ua+9qA?7 z_kC}hkleBt1J{LXRX4dU{TlhuV;%ExDb>bEG3$@=9~D>Q4NeD9CjI9dQC_Stj45t~ z0)xyw;@j{8?s}MBv6_uCD>-m$X9p7wQ}b~I!dskLhm(CGg?1~116I#+W9H6T!U`iO za6@F%-d%BzoY{PSoKvQ08ap_xK%l1OBGB-GUs$NYA26(uw?~C4d*>`owVsV4&sMW5 z(Zxs9jRU3S%j!jS?`}`;=F4|(#pHCP=AfI^c;96wEmQXfF177;@dRz{songVEOw?f zZv9(;r8_AOz18e|zoMf*Y&+6_>l=B#4ZMA)E_jw^7FT)CN6R;1(SHU~+zAA2P@MuR zm*pb`HSg6ayJIfd!i7&UzEl^>D^S1XD!7gqk#e4j5>vF^c3t~`_J+G5XlvXqvg(}TMgP(Qi zDK2jC10Mx{(k-d(t9?vZxKIwC0k>o_IDR3_Cu2RO$itI8)yf(QL zoc)HL;gtyJTrNFeQh|qznvOlUx^C~39_U*?7fn_N8nm7xQ#H=cr1|X@ugR$D*>A5N ziWHVNn_ug925m`_o{^=|^D&qT8K2ZS^La(+Hw{t%x&5?yP*Km@UZlpxK~x+qbgZu5 zd8sZFCR}U2yRjxRS9CB40-5JWyER>@)tUtX!B;?p5pN`xk+n3_R^HjA*TF2^nJ*HV zOEO1vhsGU@GyRaSlOA~AK5b2uxjvjemsu#&V=Ee-%+!`A1jlKmY-U*b+N7{jh6}2w z4!v%2+O7mPY(5d2@-fpV_kjY+tF*d9WVQ{w^GI8bA&#c`&?GJ>-@*#Tv2bMGdYRFr zUwIpPLZa(8MZij%m9=*!S%zhrmf=@8<>cCN+OIOMu%KHUoMqyNwJ08_y59OQL9$K_ zjBf`?5+6==q*pkl?a;^O{k?jmlF)8%FfNZ>pR0n?`lm{|(V@qEEUErwQe_nyfz?X! z5dG@v0C(36W0yxIodg+UZ_}KIWdx_W8ohNKk5#V}uXxqK$fMYtSB2A^<$ME#&Y1kS`=Q42H zGn4WC^FHS(DU2NMl1bcPJAOPid&_zX=Rc8!+UOpZFoTp}@=Cr3q+XCDnteW`SMW?q zzHLbKH}9b3x~Iy{KD$ObuE1fvN`h!C34Ut=lGfsFwiSD?OM=YyA48Fe7LGE8#dDRC ze%`T#p5}L5Dw~@L3n0>>nU5CC|JDngw6JG!OBde?DWMElb=DioWWl>=d*^%&^Lrru zxWb}UPrjrO8RhUmZa%RG{4-&&+p}ZZ@4C0PpYjp-S}={5)()4y6SJN-n|~6HGAXFQ z-n=DNBvlDYZ1ta%pUzjn!77u8+%rHhgXA>abb_}`*t{6H<^D0(XW=ocfREI4=`Hl z9Mt!DRc~pyX2iQ#{Oqu49K7uUG)EGlsEb7F4J8=K*b*~YIdt3eE$65hFJcT{fkLGK-f-TtE;fVBMcn4FBu(%+Z`Zv_Og|8{71le3-DbBBrGGx0^5nE7`{b;_$L@KL? z#jX6yPNDaI>3o?V*?rRpohyS&A9A4)bLGX;np0F#R2D-VRhxFS2!o7@nUP*z0!iG- z{IEvAXuzg7<=Ho?2|C}Qz|CXXy%v1K@QLZxC2;TaR z;I02B(DD8vvREt$Ye}(?KTz)4zc;*K{r(R*y`Sy=Z$|3SUkuriU#lek_m7-^Q)mDG z3wld{ML9MLUY^nWy!DeSbkPvTL2JYyY4mOchnwgJs`Qsm)f937X2Cn^kxL&>B3fto}GWfZn zj6HkWMgR8BZP!cpL1x`*@)9@&fraBaiLE@=!<27!fk9;-JdC9r@q+F2fF$G3zsTP) zsK*&pa+O6Ayf3I(T5n9PxYgXo`(vEd2d5}K?+KDwNr^SbzdJm^_3HS6y~huSljuxM zCn%JVR*OMmY!Zg3iiNh|Mp?Z=cx4A$2lloi5^6Fr;_5_k>5Gq7leSRQ6KVGczZw~C z9GNn~Si&}&Z|LQw4y+C~0)>e9;p!VOrurn04-Qqa=Qp&JIEw9d=%Wms@y0ynZGK$0 z-7T|;T*}Lt{?zz7EBh@0{;ZR|*sDetkVAB-Ee|o@SHOC7ZT8 z%6Svr=80iyjs*_ky9?refM+K3#9IwPPEU{wDa+lnP=W=bmb4@0@ZccaYi#6F+rm;r z;>ib>a!)Z%J01OPp*&Vfz7%6JmiN$p(#ytc{N7^@)>nByaL%y3tF?HVu^eJsCM)K8d;RtO}{8x zI$yba<_OomVaSushDEpUu8JK0IOPkCAYMJ#gD(uyW7_Q9?&rYmiG=;@>9x!+rX}wq z9>}Lsgzi~kjOBCmOpu6s2IV#4Q{JMBXddOGjOaa7uO2)9X!+KYoNI@FLlGXQ+EU_D z1o$zw%NLKm78KcP#7xs4F#7hoA=P)>P=$zR7#;T~*fQ zPOV@Yzt~vi=zJG;~T*CwN^l#QpHz8M!JgmR( ztef0ir*O^0%012)VdXKpk^cIC=CIeXx_`n=FAi6@uW{`4^~KaYQLg=sP7nyb%Kh?e zPpb^!O=}xf^X20FOV?#PUDy`D%XLY?&0I zt3|PJ0*8CRLsV{)n>eh~09LKBX%*3&`hzBf_l^l@_I>oKTOTLg+zuP(-Mj~VqtR8$ zCU{^!-yvLP<&V9~2gO1zp9+FwA5~v}u75|9txmv)1?ZsOl$98Vb*YgcPr#-w`#->4 zZz|*TV&#)7#Ibwra?Pi)1Rj?9r0^58LQF1kftm<7 zeDP_AJz1f(*4_C0Dxaa}83g;(-9IMv0T3m43m_h);dXF2|A^9AfeLfaJ#1dy-cGnE zp{=Ja$2E886GLAfzwllfDW+1r`LWcRAl@cwjd$?*W1B6`@BX;I0&p})l=42^mPm8` z6s5F)ZQ+;*+LTjz;yOGvJw1;%0pnpywbORn^pzwP_so%iHK4Rv#hv2f;>7?Gi6j$3 z*}1{7+cpSUf$x!h%Q05FL~=xo;S~ekvTOTZu*D@L%y+0S^}+4a@;y2=P3+SH zD}#2{(w*tcV@Zn6@k2vHeRw=xpx*nSo5E>T+g9%1G^`C^z6-h+xjURI7AhL^g>&c= zYg1Vfykvq;9bWBRs5dXQRglRHM0v>)2E*Np`; zux!TX?=`XiU4>~>2&iCj&Dp818HY%(uTwWFy9XFIIodb3AM>VD%f0wu0!41=R~9j_ zbGS>PoTGW{cF(B`lrD~s+WkItv>VLc-7PYjhLx4PBm?S7kvJZKUK=9mt5lLZLZGxO zV4DSRDmZvx*sfl13__66NnHNNQR#g+sON4xh`%o8(ROolla0cOIyQm&oJIdOI_2>< ztt0t$oEvZ(O;$U(wDs7#rX2C(#s;R@kZPt@>gLDtjUVf#PGkbFx?ZryxrFW#Ud;Wm z0W{aZ0i_9)dEt$ti_ZVJ63-hzRB->&S2h zT`hB}mgF?jn;lm9U{i_G1rrG@kd4;N!q4|2%WcRK=9QJyK)Y%+(w3uqYj;)Q4Rs=h zWb9eV_S+*Kv8z0@286eH5~GiDgA!yI_Aps`kshY^1bgzN_Y};UoM) zPCeo2VN_mK^CHy9z^nXCA;oX#K|N&%fmGE3f|D`}_AA?NNJ|p?G9Q*FFA+<=iFFy4 zy}=7TIrzJw_~LR1aC-=FIB7OwARifkFp^k>=;$QYt}`^tp*9*F8fU!v(p!~EmrSajpRY`jv)4ZH2`FaF~zMB&%p zQAh&`(+e%iY!>t9*wvZF_di-N9<+9i6nuhhaV55f zx4%3rTWXtEY4fByNBZ;6?bF2_m+)Hu@;R^BRZbrq&Eo{~e=ReA-pG|WK~dLUI@s#U zW|eMP5CDBaY%wDVD)B0I`^kx4g4$g2blo0eF1qP{zfV8Fdx}n}ylIo5J-T&0P)vBt z)!UTaZZK3Pgpjm>|Ib{-2Ad!ymB}Uu>H;=BbsM03+_szZ9>~3#Pz@;YViSC$v-~4j zQaOX}8a}*(4d>AYPgaTsin&{C`vE!~H_xe_;Fne&KIy@W0~r735)S7>UXA z8>U`)P!2d;P&Mt zF|(s~L5#(H2KtY#@O!n^>dlz&TNSDc``&B)P!9S@%F(lv>7QQ$g3PdbUSbN)3nzxc zgn5x-D#_ag!y~rw5}$x#1ti1lWPgi`CWFNoAe#sLOXcF5g3tcB!n=*?==qFkWa-n7 z=7(YaAP<+}6JXv>yqL8mAi0vD2#Z8oxzQc}X1;bJ^Kw8Sb*e;NnE}r>BotCL;bWFC{SgYwRVB+z zZYCL7)S1U|TNcQTnUhYx1tT~e(+}FDv2*`6-hfLs*Sob`tI?&p8^xp~t>CzztyW#H z={+`arVk5;!n{FHQZe3fUy_C^HmAd)h!c9h-*g(B6U?N^v&d>(#kpdADW&7H-P$!d zZxL8vUG=(uBzp21bA{R2=GB+nMJl}fa7}S4f?sjrP4Y&v6r{(MrkxLe`ymcwh6qpd zy-Oe|-Ol&pYq^5j9G(|(ZW}N`T6;xFR(j>N+(ZQWBN5$uzmVRz)b+<7_+#yC0WQ!W zkiBSCzWGKw$qb9V%5UlScBeCV=Xw?drq4UFeJ33;l$SDonh)e+oRMpFmo-Yz1pH&Kx<77*4;6Fd3WEg@TY7hAz- zqQEpQ6O%|Zh(~j$sNbc{Fb4HtDM$gxqq)KXOlDLs2F-A$vido|E958M;q$WzBMi&Sw7fUj)kWlMp*5)Lr zMQUSihpd$!%v=nf8<#@#LS+QmWkU*y`H}P#-FRfG{d@uN0AE(?Os5=$b$ z0qs%r(ah($>jNTIcp)CGd=BB@YikM6uH1tr$@9L~M4^HDgrv1dztvk8r1cCRY>L%B z&fI!M(AM{MtmO*i_J_`~du+9CIZ(Oy@Rbg|B_VS@&GFsDE?&mT&&K~^0^c)i!^2rE zVKTgL+2WE8Jm@Gi=qYe%w~8;Z&Hr{!IuGRTT38@Jt_F~bo7rUP~$Ii*sA?eNrWJw7lrZ0dYIco8? zfyACrY!^0brqrC*T{Y>ocIW zp-Nq!z8c_nj73UZ47K6K)ZPSejI&wTvRA$Qt$E+P{a@Y^nu2(%K{{%|tvk{BTdV5# zMCPZDEJaV-m`}NB1bON2)j52${_MZTME6X&qY;FM?xjK8{{uDaM%V=Z^Ywp)q`%QF zIQ)Nxv;Uc@Jo7IZ{eR??|Mv_3An0X@gVyp#H~8zn(qCEv!rT2qR{&P&pn}kr{dh%= zFl&GgBND7E7E<^p`fzyc#qGS!{*vmp6a))6|Ky>{anKn-d^`nsul3Ty4EwiAiW@9S zrJ$uL1ED&+WF%y_|Jf;@YB64TacREGq3^_}q2-D$q4En<;zSgIvH^p~?{qj5u5}Gp zf4sNwspVf+l(Ue!LR*J++EeSo>&$ z>y&Sei%lu4b}myS6eTTo_)hDUd|`Z z#g|vvB|8atw}?#s>6-G)0V+9M>9-pmUO5s|C;oY{&w1V6}-keXNtlsh0H26OqcZF*~g&8>Or4S@?EwI>fVED}zO;H`WFjX` zJ>$-u=lb=LBoR5>#$M*!s!wv`lm-=i1n@VITDCqgx`Wai0z@Tty=zYAN*&-5JoM5A zha-z_eb!U>DRz9Wd!$w!>A%4ROkIr$u!=VAsOPL|*H8Ds9bSjiF}6BDdKminp+))m zY@ARfgSm6~Rj63#3(fI=*|sOouU^&E40?5Aj6VNdv{br5DTv~cMH1i3p|^EYG)SIJ zIaLS~ms0aEy*)8AY3`oSa748wtd_cmHIwj8Td7;P`~kWRJ!^Dk0Fu)v6cwo{edmu_ z5(m4u!y7pknyKN(xj6VD_A^|BG*xY~)Q@o|PF`Vifz*|IME4h&W;ph08-Q42>J&N| z@}w0}M~+}wG-iOJG@qmU{AxH6iPOnc`tYB^A0Ei%=|Y8WL{gMx1ruC71coj|fnU-jdBnYUjC!UO^gtf`-rHOd6wTGW!17LU90&3y>`)7yk zr=aw;(*U-2jX$B#?b}&nmw}f!vmivfnIpVfZHIo!MYQgt2t0;!CfXA55Ox(+Q$y|K z{5Nx__br^5YaF)nt#7RghAo%YIH}yojPOORN0iYScU1=TYt)YQ?lhecX# zkKr~&OF5Ii4G)fFT<%WQsuIB%73kWG%`mt7mc8dB(7BB0rXdvwGV{`JKO zo9ayEuCSvs<*T`2BTgmbh9Ljzfr#33z9z8T_+qm{J*`xUbk0%zb^6H2O4Xs2gMgFA z*j#Kpt~fb4_0X_1O@7Yco#|lgkA zT%$YV%Cgi7ho#&D=@q4{G4a(Q>H4wP)CwO5V2giyqN)x^abvOKBldpysd0W*ammB( z>guXCo#J6}aeFYGY5I1M`PF@EsLoYPbVtD%n0Vz{hW=~Vy1Vs~-V0`sVq!lpi>8?H z-S0+T2G%g#)1#>oX*Cf|+8X`bnQ~Z%$u=4xSB|qHYcqSbZ^_HaRf+%VNFEsNRSRk4aAh0W?ba?8-@X07 zX?rLl2~f$)dF%M$u!?fmT&=Cq8=7)ck8N$AvV1+Nn74AzufhIag%D|sm-o-_F@d7= z0+#&++fFq$IbYU!cQQj0Ms>UViw$9k5xAGA+6Pm@fl2-!_NeqviG?;E-M8nOqOzi6 z1APT;*Mv92_(#H~=Xg)lcl&nT=HVK4&}P7VBET#*SYzfKJtJKBS@&{o@K)}aO~Be2 zM&Il)*kIjuYu&s1NeU6L%Pjr80PL8BEuZmoLcmUYE_g&Vj(ssRGh5HxtgZ{7Pny}V zBJ;2Isg|UkHq(>r)5WA11f=@FXDg<6JAAObk`fYQX}YYs|4fK`!v*$%W;bW&!Zg^T zs-^#rY%`=2$c052vRb!n0SY65G!pix#?BEinVbkuP$AEBXNgibnto-`BlRk9mK729 zFFPY@a|EC@1`-kyrB{BjKrEu8e_^nkq^^P!9Z%Jc2rM#a&}(<8%ne*iCLa>JaKRmV z;qMjlUFc$VOCz;O%Fr}M-}CYDCx7#I?DTxFv`*H{R&PlzfVX#KWRcys`Q534f`akC5=|mNScTDSyt~Y^I~qEU*xf>4Sgj_Zsl~g0 zt4eYLwd5S4uBP@hNO=Ro_CSzKp8OTOY8gD-Wf`)tmr5O%+JkP zte03+KQzp_ZvcUm%+1f^yShGIJ>z!uqB!f_P1eoLM>wr9x5zs-VSy+pO!I}~g4`e> zEf^o{aF(T?fZD;=NcZ`*&Glvh=nShv(M?~OQ1o7SL|cQ>h-XI1?V}kfjGF)vr`Ep@ z>>UdP5S3q-CfwDCV|pg0@2uyVp*)UvniaS7*Jtk2WZUvS1ipe+ygrk>GbY z74YC@F<~Chq>&MI3{0Izx|!RE-?Zb-_9kQ=!EL3k^peGB)kpZ`;hqX7Z0@k4)sgtv zScOm0pQqD~)r3)?;<&qUs=6 z@0^Qk+ad{L;xX0c9__KadU-b!Ck$)5F$4aL)zg|i=~|`k^R=C7+WY2J zPamk_q^*A^59YV@Jk)%)REwUeSyNal@2r5*Ah#GP%E!{1CZmXITB8+R&v~^RGGm_a zd~@vgs!AuSH|%|JV`&FUD7Q3;U{odV2x~_%cXqQ|#e()f80-A{3AQlH2%KR&5>%a8 znXXDe!0%LacA77L;^ZbR>E(6$AK36Kdb6;r=~l1T5EFDMlY>MPU0H&T!!-MX_aEMX zDfiH1CGG)iX6`n@NlEJOi|ciG>*51-Y+>r6x8JEy2=KtIN~YPuJe+ehgB1WPnl3vq z>ExBbAjLb=@Q8Jk}}{wZX)L2P-aIHX*LARn(pd{@zwecad(JPj%hr zE%YCC;}fKWd6*fLRFl2KT1PF;-3GsYao4lZ74DJv-DKeh}V-vj@nj-CEh(X z;0179>EKiebl0U-Z`e2uv+F90Np44zpLAeg^I{%g?xvjsYRz>Ejcj#P7vgD*cJjRI z6&h6Ce9eR8qEw#UNvm0+X)4{A-l@a4<%C*Lmi>^mW)q2 zA05c&ql7aN3z*m8ZRD+M`>0-dr8#CBR9MQ#Lc2A3dDbWE8I6%DM!<8{Y$ERpBefQ6 zXYU-odCK)lE-}5+$)hSiN9@GD+A+oV9TWz5T);-`Y0v{S2AN$kz`W$r(Qf47n6Y`P zO^Fs^;Zrw|l&<|5tIh4VITRzpz`Dr1iDd3543OETd?xM6F}aV!Gsi-zp*n4n@6b@) z?;>40al}rnR^KjlIeYz>nBC-KN!mC{e4<3MvJRgZ z*IWBe~@AGX86Q&8-J%1RYYCZ4gBnE3!QEg*9p&lv$@uG zK7V*2{;~p@u+M`;QcWOmK9He1^{CwtQ5px9 zAxb6{-l&Z}ufsLkwDQ@2{HzrG{_IFJvLX_Tt<+a^qYgXj_o!KGdzyY zGVew}nTjg{6c>|`mdh3HBQAWG6trP>sNpvKtyIje57dQpLYxx3EuHR6*s$=k>-5r= zQY~*=8p#IdVe$vJ57BuT(HVceBk6k;e2{H>@+zFt=K-Zp)Nfj=P7yYIuE@s*sd-& zDtnTDP6)hMg^(B#xt4Vay@}LnCI{5R6)M>eBp{a~>MDW)hZm=eS&+pp+OnylpzQJBaTAjqzga$wZ$QV53V?MQ8%K#F=r zZVuj&ZH;$Xz%I4zo`ba}Yk!%0jdGH|BgGOH2FK zmN`vWp+tA!1av?Xmzo@2f zzQAp-Agoc|bPZPXy2h2H_UfK)`<9H>1u*o}r>mNNeh`9?5;&`_K4|HnUfUKD^|-&Z zPNmYB;4`j(f!vt#rpU3@+hC0|kl&VkxXvfmZrm}x`OsuKWY0jkckw;@pq$s$JMXK( z90ym2nZw}NB`iTRyVRY`7^l-TWpBN@@zefOS0ITJc?Ri7S+9O_>OG;p$h)wv#D9xz>#*>J^?RI(G zw8X>r0vNCmFj`WXnnZ0VpOaKVS=t5d=aMI_?$vGY z%wSe4L>qq1SY^ucO1~zFW7;RK=bDNz?ore(UcvDvF6qT^X(ea(Af4Nmp3AJ2ce@7h zB&L7-6et8;UuF{w)@H}-^WCh_GfGa%6xNF|ou0zJPp1fTg!e63D!+n|&}7UCj{Ie_ zR-mQT*?m8E_#$-EiSM#Sk>;T4DzQsSG3McW3cJclp12H!=N}sOu&cO; z=A9vLyFdIi)yF-g;t}se5xH}%?%?QqX2Ndc-e2#*F&ee|Y_M#WLsQZw)P~KWq?Dph zo2Ph&v@hwc5>84YgN_avJdQJ^-(wS&9=XuU-M<| zmeYjY48W$lySp3yRN8`;Ep0H~zMKUb7sN2Kn%x6WzLt~#tAmd6we z9b}eIUmY!ca5Lk%^2^x0^?lm=Z=}LGlmIfB<|8LtfuOT`muL6oRXb*A{M;uE3pu#@ zxZ-DhoBi|b##IozoBP?Xh&baXhQbdPi7%XGW4>o#?JZ-Ik4Qmp;xiOY+F!Fskw6wzj zZ;Q*EAwO1SO*1$nLe4HL$nl;EiF-P8B;d+P2SI?#9_z;`AG^2C%Lw1qi5^p9GmE(( zV(g3sSiA49x(CQ1xE-ia$A|uNQ=6Mf94lBep@p@hWHn9L6bwocdZilg>Z~C z2By~11AV@5MjypgNdbCBh|v3OkXF&#iBe>U>qZ{f1P$84Ugx*#X~gKk0T9RoK2}{q zRk9&88C%TzWM37y)w2Q&i6FKKn%}fv@oN#aSjO<`6qURf5sbrx6P#Z==Y75j2>!n{ ze*hldTCQlwob|u!l@_#73z`wgNm|gG6nBJ`GSA89HeoG zsE_VztmY}zdh$O)zvn|Y=lN+L$$ORW(Htc5?n40PaZ&s5BEOoG+e7TtLq4jrh&Vk`r=;B=)Q&YZ)Cd zLT(frY;@|>gY2&-LIAD{e8@^i3aI944c$r8VY1WSxfi}c@?!x@zDdVLhG^fuqXRmz z@k8spS3n7%ruA*m*#i&vX`)(gQLzdxU}JnrJE4|UHGUPBJYbTbuG}ig@<2Z*{vgk` zA7VnshgWYP7f(!1e<7$9`GFdoE&^qPGot2WjH=~8lnBFEZwtpVD|x$Lhxcw>8LOdn zyt2(?Y}=9k&?trLaF6=l;zPD%NXCX*IPH(!s5Gx|kwX>G=<41(o^??Xt z;}N<+n;XmL_v!O|_SB-H@>X^8UqTP?p*mzXm>T;<@5}_#p>_)t+8_Q1 zh8{oxY&cu^bHU}P4MiW7ocOHh0N%{2uz%mh zKn`wWAbx5%1Q688zf4_v&56Rqm_2ZLF^O$Node}F!UP>4n+tjI#0Cha zbfDx$QWoJuM}}H9d9DqR*5bW>bI3NW*3g)2cq$^RTqt$M!}2Il@nwcc-?VG)`#7j{ z!Nop7XOWPrl)D*^C}xjFbf{y{973j0Lz)T?F?>9&O{V;157Wi4jP$1Z8@!lMlB?{H zX%GRSDhk*&GjY=a%vm7TnoD3QcYAl$hEjtF;NsW*@;(8~v|qwz7taw6R~K)U$9^1D zHVUWT7b-@iP_whK+W+|-{1Y-aEx_CLZ%zN=Sxn9Fl@gdM&qF_&?vOw= zoH9266YbD!Cn4l;TDS&OBOmB`+X#ko-f;qd>5(<^&JD1V~nlPXOYZhNvDNT zNLpa$J}(()uDZfJ%zG~aMZufN4l@o%l1f;32k(#vhRzPdjVWYa#PECX0aenWRH<=> z@hbm1n=B3{g(p+qtP6J(hS^SOGQYy9jFwDoXnaPa#_*=u?e;|kUU3Pe6hD0U@Z-kR ze9u)+%n%qK8}l767;(@gdRnX+8XDRKntdN{{)+)(qJS<+E%*L2Jfu=^_Jc5TV!-;i5iR+P5e2fF83zgP$JI8Rk*t>|GTLSJP+$ z@H!50NPG-Xgfl8n?2Y@)RDH+VqJF%kAUi=jA&`H@B)e?**mNuL&M#7exQyL~l3$JO4QF zHNzk%2Jn)wk*Y-U1>AiD*wiDgLp4#Mq{Ig9Xlk(4c8MIRHbO%~^nLs(#^mG5C^ z7PcMwQv!H^LuZu<&?y0s*4)m*v4@HO#Uty_a15zNf{eLZu)M>B4mbg$=CxyJ&_#7% z+zqxMUGGt(8X8nZ@B1Y3F#x}f>wW^m??ilE&&T#_NIwLCc@UHrs8T{bF9(b=H0io9 z;A+qVb8Zo^0Bbs6+!1idf?F5-dbb3snIeZY6ahB1AcuM~fB=?p?4m(kZAD6uAWCnI z7eHq*7OoyJo zfX4q`7L&{RgaL`+1frz1tp59GGixRCH0e+!62x+4EEUAR6%K=shwH6j9LKq)_W-$o zQ(=%S8KAfQ#c#CUZeA*RBjfg8-&@DZasdw4%(-?ejWjg9z7|YFjGP6lthr(2Do*K-CJve$r-$5QUBtOVsayIps^hn zK(Hx_e~-96I{{zApPu^+deD&KocdhWrOZRxRZOs~aiz1NjfyqaRoW;4H6B&9t z-1oEj1;FTqK%(*g_A>S`rZw^y(0Veo(T(0GQj4nr7AKJkaR3sWM436Y&_LlVNy1*9 zTf34y=b4@;<^$wEaD!v=QNm3=ZGDn>EUlj4G|xqfMegK44Vj44GR43za8h&zMi1y{ z&|PFm91NFCj8*UzdY+L%X%nM5d+yGg>Wms$v1ZI)Q^pGXxSf#k#yNG>%8ey6(k0na zx!zVLUUq$<>z;lKFwDM%{2_vLD1o#fEVtEF%>QMP3TvoRAB0kQP?q9ECX~z!<4Y-d>(_ z24!I<@k1RhH^CLHc@Rj}FU|myX$%>4;thxU%#ec0Tb?23#Kezj*&4=`XBUICHWOdm ztPKaoG<4*GXNhsC+x3=@qWQBKGBE+$k_L`ljQ)ssdhJD z(WGlMO6tpTcSzm26EdwFCo}9A$Cvvc7d~7c{>Lqzw*Wmj^PeaBO+I^QObsD8Ee*EZ0=Or&3A}U9c0J?p)Vf5{JcVp8=v<{dVr4P_1^6Jk6E3q zUm(Re-95+Qp{f!~EB%2zne6JfcSR}Xsp;tW@2lV|s_HS$;*g=dr`7D^N5Adog)wii zm=zr@aNntO@&6pUuHBxr08L);9S#o_)|%55tVxGD8=!RLWJuDHxHllKUl3Wf)Vde? zFp&*50PAPYV&nk9g2+3Uj{*FG@t&`&Z=d3@fgGH8wG#E&`Lm`;;de7cA9Gdla+80~ zADWT!%F~%h+dggV?7^bpOeeK_b^$P*}sQhFXLTOd?-NySp5<128ZGF z@c`X~*R2FJC^9GT=T3u323;d*j#6>z^XDeLJ?jUS1-)MpTj_)AN)HS{W*N#4?~)#P zb^9laa7koBmKh3FqgeHE9Zbdijz?k^My5MI>&P_W@zkAtD4x_w`EWMU#K?*EQyzM>z&H z*O)06_ot&#dIL9N=$}YI4vNPht>Bt6T$8_lM}cz{hQ z7}Bym?JPh$!JKGM-(cQOb-VI)tLP_9PVRhS8G&=ZqHj`xJpMz}U^ydQktD#HlY17% ziwv(SF@J+rg}apGZV{;NhI)yh|J`60y&KD6l|K+29_02R1MYVIs*`KzZ}4-I$Bd|`Zyw31r5v%Pq~As@41d$4P#e^boRz#PJv?OX9q?`P z9Yy1BER!}u1JdCdQb2E|{7Ku%ZhU-vmN?A+X_G=}wbwL}?;9y_)VvA?@Xb9fYRB^X z52qLE!o^&WN@-tDp6Rq12hn5XAHI zj}H&jC+iY=n8;WkG#i2Q~g0Yw9$p%%pZnGUwmw-hw{lNoSOUegM+r^x7{_gfz+ zmSZENxBT4u$OOX&BalswGCqA8hWsis z{p)Mh_0Lj#!4O7j9cX)<0EdREHuuv=u+`0GNbjDr zvvau*g_P61Bfrbu$NzXP9~jaAMnqT+j|@1h5ZGHgvaTTE!?66RLZv&FS3@iWXvk}; z9%ryP&SBcsH(MK^p^6~_-|oif1c?8jh2M%smx_4js&2~iHyVo&J(|@Z_v)|#^9bEG z7Ft{1SOe-7n+U#6Z2wK${^lhGY6kl?s9%tRx)6BCnUWk#mhi7$4wOC|ui_!gwa1T< zi2Iy;PkPxa{P;nMF4XO-vSKHlXFkd-G3O8uH-eI`OlVnA;VcWVLxagzKwb0o0N3U9 zLg_=EU)p>n>VVrpc*60b$;KpAxTt(r*kA#YcZ%c;5u}os#OK+;_tOe`WDX6W`x~D9 z&!Z^Xsp@u=6Y-Q>WXLw8=^)1fd4#vV?E^o;#RGcy0QcTa3F0XE=d*n~(Ct zO{*07UyW-_YiiF_Sz7|_&)SBIslrUkewu||y?|DA$jKF>i}fV%oWVC(NG`&juqD=L zDi>|{hq#JctSStwr0~n)2=9WPk>NKrz-mTVwILjT^;7Z}(Nz&kwI032W3a1w4vcHU zGWcTUjFf=b+cp2!mcPwyZ9@Ma_>f@0m#NmyiL`^BdZC7dXWPgBALvy9HiaSlN$X7G zyMzONf6&oiFZ>CY7m=yFZ`ReE-a0Avn0PvV2ebm$&4?g)bi1{FTAvgK>h+mQzIp7C zAVU#Y$V>4Y3>(46V)ulGPxrRW#Jsqg)IIUTKkQ|+@~fD^OP+yDm~mC#>Qr@#nU)lL z{v5kKgw%ejBK-|JmyKLqo;r;C*uC~C5^V_YUO{d}kH z|EO*>c=4z-+XUSXTx$ti5eoV|P-X6Z7_1D|;&9jU-;P?wIzYLOQVvTS*^fVHOawz3 zYjkbD?(ThYb8hEm)Yu?FfXYtuDGWYO<{F4ZAI{;)HQ5Ecx@jKiHsTg6HONd%h)K_ek0z|Ee-Z-tBwe;?M(qj z2Yx8r?4@5Xz6Jc^^C5$+=!DZ%@Cc1|L95E?J+9+6oS%`$n{Cj-ppM^+loN;WEqNT& zF3QSFMN0pN9tM zDk)Ooab!B$Zc`5ft;Pzk4KpkGA2w89RDbcZS17Q0qXN+U8nZ zn9+noAxv}?9L_EBzg#e(VL<+8_FivJPNlv-hbBZ*DK9Sbi9QMK8ZB8eGvuojvtc!p z2-Cn?<(wjNKKIu{_mnqA$)x#J35uu@ecJCWR7s^c;T;SxB2iJ_zghpOniFZNC?FtE zRBa3t^9YFulRnUd4X3F;*yVoEL5OTXfevFCn4 z{Xnz%s$;{=Ib1Wbv&HFUtDt~M-YaZZxg2I?IT|@I;jB*lH4;2>gl$Us`4^&=+-4fI zKswZG3X$0z!<8@cyddczIL4=;SYzWD&9sRo5Np4I;s+;CCoxghD@o1rZs+J+c#b6z zq{B?*SevzCZ>nDvk$z4Kzo!2bTO9c%n;=9T-{RruZnLu)-)00(-x=7E4_7j#N)s}p zd}y@5u${DAR#E7S>EjRfBE@2_aTvnVL&2bzHzn)etw#>Vv%-dB*+*#UOKzQ?5YB{*Wt&xucujfIEpm{xHV0Q$_RN54d zB5#v?W^X%fB3xWVF5Mm9Ab);#PfWr(+zqlDOE+2_qPk!ru;Aai4(-><5-{&AVW$3-B2H^lA_6`wYhL9bVIK%Cf!(>b-% zzO!=vTt}58kh0Syxm=9`iNbwvA&g0rJXc2@m9P``Wd_8WqR=#{Luu=ak59!Vgj%}4 zKQuNXMHT1ohpmZa1c)|cYUcMCb59DE{n{ofSr8t|6Aix>iIjc46Po*w5je7I>X^Fa z&qZZW(V=p6*Ft9ZuUT9JWtfIXc_@ZsMvbSob?-S9V$HNL zfT{yQIaCQ5Bi*clvr)*=e{zq z4FzcL@2P{<|4JPLI2#HrnbM!+yw`oDfje!p~@NNUkt^PfW|N|+NH{3j>cyZg2>OYo(6`#(X*~AiO!q2 zWif*e4h)#|N8<5&oKdnS){eB`qEu)Qa&gAX0u`o!2IB~*M*aIs>01bFBBjfmGHpkG z7h{r{zYrC^5dL_t_|KI2HWS8_Sh5guW#Y|>NAf^Zkzf2c95K!}PTM0N*^-$OI6ao$ zc5XY#>Lp7GvvsJjMEf|(CYueg7*;0pvdXV!s_|tQT#7uemQzs;QEp~G(i^JA=W`8- ze?*1p%&eewlSJ#hB0wWw_Xf}<%8x9;MDaY*-AftpGtL7_;jHjm?TbWz>7W{qj!Btm z(H1NJ2!-MVG&>#(G8g;c{$MNq|#0Hxpa`{KTQf0yKvxKQP0=L(wtO>VS`gxgTqaMdKYG1Dmm z2Z^ejVF3RMkvy5!t6ACAAbPrRp5V+jdF_7Is`20$Pl)xq+pFC(JlQQ1hN-?Ol2IdY zH7;8+Ow{Bsm3`u=k-&@Z0p+LLu{7!aBm0DugLW&HemYO+;jfV9Y!~wLL7y7uDLAtW zz1;KB%~US=I?)Yw*W@@%6}!b~>uxGIlcI_nbxXcZJZu)15fT^K)-k0nO5UT3dwbfN zkuPN-2~w>ra(TFd!@o~8OB8{5=0kWA;BqSSJt%EX;RZOA3{@JMuQ&G2i1Km|vMPI!qDMlv_A1V+H7dZ)ol_@zYRVl9QmXXwaa3P|GqzP0a6AHB# z@&?RuYMKUS;TjRHnM?v_#5T3Ittn=)^b3*9tJBLvc}vVXb#;I03oq-N$;o0#5;i=F zKVVN0-F!WL4>tM_X&3>5_?|{p!OuxM@}b+ndKv5Zj-HyuWz>2TZ{EcJYVoL$H^GbJ z7Z=n&6UHC5ej7lMRN11B=Fkt#$7R3Ys#Oq*foKF>AZr@t%Swvk7y%L(EGYw@S$++# zdl!ex(Mzz0scs)GU?sMj|7&Lt`|eaqw9uB>yQ-@Di^Wc7pNG0aNA$Fxh&4trq+b5e zrs2&Ow_M%E_79d$6~6&3I$;^rO`Q03XWYM*#`HasY5_l@Rjp(+HuP%~skDt)#8otS z^%`4p75>og%@@(&Cv6arx}ad5>J734Auzu9HIrdenP<#?-ZyRC~B*sF(EZFw|!1XJq`Rs7MJ3Lv@lSVL*4g&bV<}5-o$2G56|HLKwbAK-B{> z0?%%U22Dsv*!x?Z!~dJx@5zHy&;^NL`cK017VESAn_YSR{x2l)V&@UGK&(BTK040QB`Xr_Ev-ue% zSJR@}inq$&4>mr!-ggSjQVQ=rk$Ljkx1HT7el((8F#lt2Hf1hcw1zEZRBQbrtVe}3 z{w=OU=fW<10kvXwju3Jx8$$h3!tm>KH4)T|l@e&OMS$Bq3eh!79uSW4MOY6ElziZm zAcSXMY0~-%jC1_Eiuh!4@2XVqXcgpHw@Vq1cCnPowsGDtBF}#kRc=0k#AbypWx*mT zRvqss92NaCvHF4|>-Psc>G5WuM&)?wq2R&d_FN7|LeSjbzDd-%QzSNQ~_ia{P;&%c>?sO{WP(btK!8xM7 zft5>{=Q2SEd&>S+ny5rv$r+#<`GI{Zb3KNV1kh!s2SKN5IbglT zEW}ef?2gl5(qd2VAn|6(OQQcAJsFN1L+Y3Ggx4MKTXujC7je{k&+$9rb(o^iLO)-Q zfVsfcvGjisEiW}*yWgWr87Nfo7CgZeV@t5!FcHi{!sML$i;83Gp9C>GM>0cGw5?(X;U0`|x zSl0xgdb>@$XNUiTr-RT1XMShbfls^RS=Pt*uzK*O*8*U3DUV{5aF{15AKrW8c{#a1 z!p70@3LI&*2czZLPaPP(_O&YDI0|r*#@)LzMtGFS_XTZv=*6LRXI)}@lqphs{5#X9 zBY*o&OoKLRscqME&+jehhYq2#X0MbZ&HGG)YAl7Y=B;7VhjuhhN~fW;VGSm*xQJqS ze^MX+dDDVhb&gn+83nPv0ur~kiv{)$7u0;k4eEPsb+pooC#2ul<0{l->)`6z&AVHf zZ@cm@S`D0i+Wv^)_q=4dndSe4o+a4W|3vhu#&uXSGxv4{1(SfN7N-9S6M?k{mTg{l zlo5E}t3Sn>eEvJWw^+e3H~;SBnTstre}}Nz z2=PO89UbB9>V}5SwK{Qw(s{ZgD#wSYg0j0$?4CUJkVM0xs3e+wv$uY#NB;emZi5G3XVeBFM%U|3-t}BY`8|GeAFUjA3py5O0=Z-ZTLNWS1Bh{E69ngPAwT(`I zM(PMqZeE}jvQ=Q9=?ii*z+{cGsY!i%xyb;!a^Nt5$v z^bE_Z>izW5L0XJqwN}#M^kJlR8+YLYMPkFvm*y0vxu2YmbUWZi2IFKhFb_>Xr?P&` z77Rh-?4c+uT=z4f&Q8R3XA&gV?Co(B3wTxLoaH1v>_5JpVbCnKKj|Al2@(xk=Sy0> zq-8`_O-xFV*`y6xyyYISr^_BJ8e%_!89Ah~GO=8Zx{zEazV;e=KwO<7$dzNpfi)zN zs835-j-pTsWbB0Sh-itcdvLJaAQd$|{>IhHpijrfPHS>Hs-B)+>2a<=4Nes|Ut`Op z@ccofulG&2>8XUv$r-xeUVG2u)(Ezu{l(*`ML%%Drc_O0L7gGQqn_+`0 zO~eCBCq7nNHK)tEU)@HZAJbV5qqm8rbD%v>Dp$xI1CyuS@w@Z|&qx2hb;*zMlN_YV z-5E}C>WL0<1Fr>J(g#Ue2j%<+6bFc2W4GtE&A2Wad--~ya9$IirVZm1x`dTfDCL!~ z1sRf7AA?0{lCDzD@*PWwvU`ac>u0D_vplJQ%exN=2ipd8lY;G*@alWK9Q4GymaI7p z`h9Ac%hX8mx5rDG8_N#P&Nwm7vmTzFCYLG7clpNfPZOtpaj;ta>E2umQ_A>{Ag*l0 z^#-qfR8TW_uM;D1Nk3uwP+7tC?e;Xvjlw@%x$c`0W6~(;MA0(&-1a7-uilU}|s!2&>UG3`24|2gZgegSOzB+%T zxTVq0LHpB>DoJtvZ3!n`^>+V$hRfW6hEoz)m6Ab;ZL`5?!R9s}pYBo^2z3z_rign? zm~xu0FD3<2=TKNbmzSXhs4VznwJG?YEH@G@Eoauc{zPqTYfXrC>bFZrth!oZU1~H2 zjr~#Wx+8tPUV9B`+PAlSn$=9>{>H7RQ5lT7e}tMRQTPd$T02|ehZYm2!)UGP-BtB9 zd-#!D(>Cp+Ow{@Z>+`fK{d4rn!On4Ad5q!uooPb4d*NcY2p55{s!L%HMN@uVn{Siz z#jZEJ5=UPT{vdLv5PhrrmIITkEk%u ze0&@^6}Cu$r{AD7Gzwfu*J8KW70Vjpv8!^OLsINZl7cvGIwn-)sK> zBSb(G5i$})#3xGg!|#E1!1XxroBylO16KTpqbc}j-3Cc1mGP+#l7BGTvg1Ozj11QQ zHUa(ZXv$u`)}$rugA|*@;YhOGvx-Av6Xn3cQcILc5V z{M*JL=yM<9f?)H&{Z1vPM+I(O!gkR}vN}7B!vPrhWLWV-7`aw-)vW&AMvE670ygEH zfc*f?!_g%;B9q-hJ?)sYQ8ON`8?mcPgZsl5H6I8AT-$qHB$J7 ztC$^m*)IexDGVdgN_lL4XQZt|<~Ddt((^VU>6Z19f0wnu6jeTZ}?(uCm`Xu!;$cdQzTZ+FM}>#zQSR?Go=5dnJlOz>xlpZBI-f zNSI98!<3U+0RoiFAwiBdy;h|39|ij|M1)pq-CwDWsMA(DP654TJ$Bng>H41>YmGcH zt_+F(1%36S!4FeyR}#xkTlZ_rqiU=Jt3W2E%EzA7c0uVRU9 zv6Y()fY*|Ht~Gsu8>MN9Ih=lD&7dlMl_2FIy-B_LH_T=FgH7=*Gl|GshQ>C^ETG?g zL^dyH09GTRqY3Sa8+h~$Tq6t|82dy|eR3vYW}%KmoEU$!`R4ZCIj?x)H$7lBb^VVUXL^c%~92(kcgLkBg&JhKbz>8)brujxg9T)s7eb>ULSA@LCq5M06Fb`*Z; zsb&n@&UUF$CJcj&-M9z#|JqQ-bQ}6!3q(|PF+`t^?Q5O8g{SFOU@2Ub za$)LQc{UL`&tn?jwStXQez`8LFd*%E`j=V(dyIilv6MG6k-%F;fB&t*pV%Hu$lozP zcA*Vw9ZV4UK7>y^vr>}=c;BuEHN6IZciugt<-t2&m8&%y!n&*0W!o0PLf-uBbXT|a z%tNfc$JYTsz7W5|^fZ3IzkI`zp8I79-{Max%Wyl(V!cI3BTFfT`~XX*U2L^3w_Hcp zbMhR-e~``pTIp%G+Al=x_2t&$VFOW%-Ra#-z{^n4>ATi=MM2Ke0bn$PGXey%5I;Og zj7Z9j3#YwjSXY#Ulk8}p?9k?7CKE!i(#dg;UtR5R5S^P|6bhOPE$#3!A{ah0@j%LU z(70~a^03zmYY9R$S#0WHx8F0$T&Y8i+i&qOw6CCCarb!ESyooWog(lq?Q&yIi>q`t zj|z@fIemt|e7x>|qf^)Nlm=tcpMa{8&*)6Ck>f9mO_9GOVC9%+7hu%4@78)cmQ3ho z5ptvI+1Vk;6HW#k0qY0ZAlB38?LjA`(eZ>S{#+TTnomYVi}L54zkV{ItkJzrLWh|>8V18}nf=BJ<}Z<4*P;sS?2sr6j`)e-JC|ecp%bTsKEAP$JMJ?CQTVKq z&zOgssjv4;?bkoWkTB0elSkIK|3w?!t~5)@R--W=Ch zuIiDlb)dd@yY<@Mb6zo+`djR(oc$bZWYeY=FZKRIuO;XRho7)*e(1&MOJI6BL4A4svpj%y@7?q;*wscNy1bCa{jM{UprS zK+7*s@5l2bg87gC8NH(G`RU2w>CVw{B!*(C)s;!m?I_&v_2Dm^pV;FO*XR!s5^^(X zinS9RXH0gf79EteokEVxdWO{zoB|{dxsR9BQd4VVc%7`ewUN$>0B ztb}@WZEAgxeGOM3+mJFHNTRGzJxoaxbEAd3IqjBDr(jw2r(oqW-{{$|yW%5>uTE?~ zrryv(7lEQdjZcJfVS|za9%#Pgphzvsl%Nyj(pzYj;e|(|^*a(@z6{1C96hgl&rrzu zszSp~9@V<;9ue0^hq?GqHp8;@y-@(aLrj0^C5_6Ofaq;5?yjKQV{CFG)NVEghPs)5 zXlL6)@|-7w`Ft_Qs2o!s@m5fpzyc<-T>CUGl4A>uBkek3@4poRf5Is8%?k$R6-`Yy zM}OQk-v0$t_vWG_2ksW5U-|gDSe?BozB+~%JJ4K3+FL8;xz^WgX4MYXmO{u^DhNGu zTb1^*VesO42^6(PAummGU}AkMv^x%M#<0cm-vgW!G`?+sQh@nFb;XCBH{|P*f%_(2 z%ij~#6W^o{&WH4Y3qN%gPn{~!<^I8zcm6ZE3r0YQ^fbz#XcRE9egQ{Q<#o@y8?kj# zi#(0I-myKs+}h{4->%L}IWvgvaks;Uh2cV2sHrk!6|d+hNNQoO53~jNCw()*Zx}}m zi5L3OG5LOz8^cB1%XBMkW<7*H+NW&cc>?X;!zNG9T`#BwMBlxg8g4e9THi1dokq8wuGhipvy9h!bYkCGKnYpA z!xDX6J_I#yw~vEzPT-B;*D+AqfEMX<)j%N*EH#VE0LNl}`cqnjjTUA~xnE}a{3t2+ zi*R`Wd2G!e)3nW{uh=rla^*O>>dKw0pyAOoSZ{fGMV@Vf0gba8xh1s(|l#MA_!q<7LVb8OF z!+qefjfQ3|IjSZHo+b}B7s$UwFpV3CLGl>vb>0*NH3ls;bnp9~um^|5*S3(sBkyTo zd)%MQ$NJS9xzjl~8@Ay;3?bRjAf3pb)x<k^T}FgD69mYfEFzR zEhaDvU}ZB;FpEYT(@I>hNF?*_s5fKxQ$-j+4-Dt#e9=_N3bdCWA4erH+HCjSQ*zSd zF(uA_j-!c$d_5^i*pox(sLnvuBVft(vtUKbmZI&IxcWgVS%xlvNCpCliA6%v?D-~s zgouJs$Lq``RAoO?`>xV^*-SN0X^B`1hPpf=n8IYaV80HIDoxD0mezGQJyN1LOE9A) z`+M#$UXaT4X)KGE7=cV*0cFgFF1CE1ILbIP+tK0BDGOW{Ha1o6&e!#Bcv4XxEsw6w zyML&oKe!OPyStmcwo%AeJKtO{aPh#r_myD$9HOmX0$|95MU2=lE4`v!yAHA5E zZeOo4Ut+1+&dxOPfd?$&q|PP18nYvQm#1G;ZWUU{uJVNK`YY_YzK9iR!gvus$Bk~z z682Ur1XNCh#7za^2HlUlgY6$p$OG*4#DUl;VM1~Csf}{BsZs^_L`R0qYXPvW3n4FC zT3B}BQjn#xPvQqG1&B_r0^V?)4c$+x&j^f1q$a|*oBP-0HHkK3vN#uG8iXtwTR+Bz z__nFUat6H+8ko(#e*Htr4s(S|X;firb0czc{c?DHgguDvX*et=*Y>bctILhd1bM5o z%abh5PEW=uSF9?V#(}{z5^FCV?!Q!4N{YjL=wto;7S5f`QYhtw)ERBB&rP_oh3c75 zjVWTLfXm0d#1snO;AFFkLrKYa$;Q=1BCb6i!=AxeJVXl&?#Ep*j$(6F={s_np5df4 z4iBtOSF1N&`a+HZRG^=j7nwE*cLTH|;GcE1w(xvX^X(fn(L9(@4D;Ios_rJ& znV!xRFW>J8Y`dqYWTwr^52x1ZwA&!~Rctw9qSn99(h_(H(9 zQ`3_WZoO!v{=QX_$y#Ih#J_HtA})ZOUKWS_s0DZ4=@#=!XuOdP4cW!U>l3C=lTGNu zjDp2PCidA(=tyIV?L)EQ;q$bYKA3xJKkQIMAS{Bvl0OkCEknASZV(^H^j zX#6)c=&>-hJ#IZHPPC69$2XF0B!!xq8SGxAA8J!O6N(NY+@6A?dmeRo*8aV$P5={>5}d3dZB=GKNa@^S9S>L zO>G_)Yl-+0=Ra9|NO~b(=pY&QAf@fVjl`O+WD$KKJp4A+Q`CIPztM@P!u{9FZ$;0h zCU$Qbxz_BHp$J8or&OpB?ta&v6gl;%pk_4-BJ@3x0}M)GaimxExH~+_*ipUWKo3m~ zR*bGj2(&(U{yO34I-mh-=P7E)T`Ptu^!_(R4pR)84qn|jzNzZY{2TdKp4D(-K^mK$XB98h~#|QtBv&1U~mQ9g*Ej3}@ zBvA>bN5gu(;NEk7X3G?dyEh%kWgHvqH1ioJ=0*F2a5cymL!5X0Gw0v>&KRt<8xiDy zSdq;E`iXG_tq<_6F`D^UqH@1k%KJt;-@up=SZeQTyr6@F@{?BOV_CGQ*jnOS@I;Q? zzx(C%4`&>1ECPZejlV~24Z1)A^OKx^<2*}D9`-ofBmYoLii^X)tn^n3&jYTBrf0h@ z{foJ8<84h{W)9uJ=3ZGc;Zm*0O|@36wOPDb;m-}Ch9xtHyH>kicFsFo% za+=L&`i@(C-_WJs+k1=k9Bx%wp~p)25nPEU)*8km?E-tskV6^SZIK5%yFvF>?9ql^ zW=<7>x;>+ZoWX0SC)0PEAQ@$KIBv>j7M*tZJ-4#U zda_K6jA9uSrh{tqRFt~u8k&O>FxIfSSxAJzra~@-wGP1pDF_o+f>vIf-zIupPxM?E za&`DDIaA_t!V~n{Xoe1vPJR~Cu%6+@oExNZm=O|nAx@Sj;}E}WihLmBC*%sl7@S}A zoosQ$i9VQuR~vjb3XkY(_2fFgZ@Zpse(|1f@uRCMOLF{@9K14P?yFNTzKm_3u(DLB zOf#t%rcg<6En*D^rRRj6N{3QTJ5z9WrT(VG(?*erpc%Jj`Wmo9t3{viM#oHoKp}1K zTyl;PYq+K&1s3>LS;a^MnuhfJ3sL2mizTRUZ9s&L91Z(`J2g;Vg!S{y!w zUvLALdAI2ZzKhiz9&FBXj4n4{K`e#b?atWL*0aBfPmX9Bmq{TcV&_^+8fH1qMH5Bd zm8qL-7~Tc19y*$YaUlrtggySd_xPSDZd&G2afv{js`PJQ3WJ^qBI9eB5TgfYq=p}R z^#wasPhHVG)LvFP@*M%SA+GLNVihAZvqIoke_cPj@56AK`{UrRE{&yz4!!OG-EML~&}e`>Ve&BPHK@Gn86krhP+dDsf#P!evL~ zAr=kp*n?Oo=k;DyOW2E+cRVvd1#FBh*M7!52Jyb)yWGj*++)6JvFU#Ff8-*bdnH)) zKEy2SMOZJDh-1i9l9*v`x{fQOg|C+n>^JcEvJL2!DNfJG|;MK zRyu$;K#Y{XjmJ<_QRp6BsKb^N+`GwInhB9jKqea?)%m&Xn6=}9;SHIM)R_a#QSUd4 ziTXa;a+lm{*1sNcx!gU$rW!5yOI>IS7{evP!^?}JTv=c9cyZf7lsK?G+`1u!Neq3( zd!u>1>m4iT$MXIhXDWMt2S^%LOEfPqEZeRhn$Gp_-}CN|-VL4`869`(haVRLRmgzIFZ)a=~LjHeBN; zY94NzK|^}+QfwfcZA-Pu6CUaCUyB`+p3PWeMW0(l(cMd3Fn@_}djkG?90S-&z)4?g zocf+!0NaYwWd4z8Z|8k`1Zx!jIz8y0tcsZZ}f(F zT-|XnXEHVoRbiZke11m+>Fq6l!$?g#uOS(RPL>S!cer_zE0k{-7{T49NBWK~$SFD7 zJZylK=-9j~f!)b#EA9_IaV0SL=Us|`jk36T_-($y>CJKqbGP_3dRq$H-~r>OskLF` zLH8r5RFDL>7#|;+)gSyn54VFee$O1mx_q3H?Ps)K!sHOp?Xbg(24#D^2YIh7{}S5{ z?H$imV9UClgeM6tpRv;s5rG?9^jf9O;}1}}kRaP@%(Ea3DFP!+#O9ILP2KtnJpkOER<3POcXM*f0W6Tf_@Mbi%f!wG=9-R)Mf ze@wLq6PCPstjfDW;uKsVJXQ&gO~q7`PeOILD0@g6Qtl_xljCGaiw!v4;OHr^_X8J$ zBcA|Bb7+38!;I>I+csD$r`Ka(qs7uIbGZxC@cEfSi^~@Q!)7^rl|{GPeNZKx%`2Gn zT=sAA7}6Fo)>AB&Z@tai{VcVD+OJbSdeL#>(9Yw%!x>!XFidD`=_W_5gKF0rH?Jc9)in>4H1b25RZlyTI-5pxorMSCG0~B|6cXuxk z+=@f7;!xb(-}L#XU$^L{{7{hBz3OxbzEc@&Mli z;F5KMP3(IeAD9cn+|geq@A(4pkcLf~+>Hp@5!WnE0R~Ll$p^kmzwr`sIfI{^&lT;^ zQ|`!p-aM)Kz|$&!6e$A%)L0Cpf1MNrTlfmU&ym4`%)Wa7(PfqVS6lNB`M(c#tB*@) z*XI~=g0=7U)7D$jvxFW>K|1SABTr|PNft_5JHjt$jR=;hv1Fk+ikS%X{#h0H7`{{= zfs18Re(oK4Z||>|g1Xw$-kkXjK9M3uty1H9s}qWkwDj8 z(KG;5w+&Txc&#@IANQS~sdP07Xufi_K5{$OUm{CBE3M9~5Cm7b3O4Oe8aY0@e=}Jg z_o}=&bGMqsK^~65Hu1+jEIt$u`L-XC+%`_E^bx5ljSuzxWsOYcyB~l|)8fwp^-cgp@X_c%leQ< zYL>vmzfv2W$a8ZKuF@vikS*n zli`V7t9(GI!sg?AND^u1m~89Z3Saa0GT~B zkG2sMD|UaxdS`3X9_aHsr-ZZ$!u8%{$C5bv)$QJS;x~nmWp|I02J_Gqr ze8yb2PNRu${)pg zk(46GKqfLutge)fYbqT%l?E9BE+HQY4cs@=KbA+O)?4_GI2s$%u?U-_oPi59mr{>RwczGXy zy5zm<)w|SzvtJmA`QavAEPDM;oqeSMB%5auJN#Lf>Rs=HyE*zrRBToq>;PNlQFzhU ze3ft&Y4v2$Z9cF!L|-S+7YNq)eJOcm`jLTI+jd+j=$qA~RvDS17td)uS*jU;tMVV# zkn5FYw}vUX>#O}qu>}EVi51&VbqAuTqc%i^KiH{GuXJG<1B zqm%`>S=_hbss}C5J@agKqz=~G5Lf&zd8KYoB7P)xw^c_B_k9gw zYuD7I{%}8p4Yf(~9G&NUEdr=p`3nD#47iZc$>K3x{_P)jzv%8XWbiz-Ib^IAb36fW z)ZHfhcuOMnYd^4(nDm{2<&F5!p*dLSecJ0kS!EFqq-b_@3gLB^5>0ZQ1otX2&72jY z*Fle2aCCFOSQx}K*lO7J5pTY0Vv$`N#4^yBUWg^oA}>OFEYrEw1lq-q@DW+Z<8z(mBN3Mu3S> zuzu%7l5JmX>9!R5na!QIW%!OCGR@KE zErfDh8Y6z)(-X8aNh~>ZHuf7DZi5>W^eI6wR&)kMuTSyg@7@_Z9iwlhEe|;WoTxz@WTA$rfyk~TNrVPDpO=Q*?Eg`s46Xv>a$anAn5-k-sP2i+kYvR=AvBP~3Ct>v<<^yZ$jV1zN@_jPW!`wA8Ji6G3frnls#bb>jog8`e;h*%U zVqyrQ2>u-Pc+lmKfJQa-^4)-`H3$67V2bt}#+DmKFZ^14v=QaQrjUSIDf!(6MHK-r zi7u_8*h)AyGN{Obe@|qq(pgiUYyjIb-TUYt z1{jYDlf^^GXRa{_+aS_NDihz_vZ0Jt1(?ynl%G?FzM?@p`l7feGV(8eC)!^8IPQ$CSc^#y=21_Cg$jNqf<~C@lK})e({Y|lTD-u zH@5(dpoburhD1k{?FK2f&mGv*dXl4rit~Um+5{cN{`g0vvBhPQ{Ep-gBj?x}Ep98Q zv*E$8OXCVt!H0H$qZh(t@v3@1yvf2yep@QWCxNY0u_@!ju>2)a*6~|klb`4&m=i&m zrz>#=*0BK-nb=D)_=Fu(C(FT3YaQSAw}ZET)m|0#EG6l(ne!yX`s^(IZBF~sjI9w( z6d^BKYWeo@Qx^QUZiuGYKN*!2gZ&|z_J=4RJJbJJC_J}t_x;sqkXeX- zw0nQVi4g>{g`(vN_nxO%sbY8=u>{_oi9!)(Xi`#MXyt>0e!%$Rh^5f(WVsmb;C!_9oZso8l6r^@h8t;7sV?Qi0y94v}=RxVwfrhTt z2cu(R6mW_&fH8Q_8rF3^GF(*0h#cpJdzeHZtnBp}kskVz{3GJjf!|^Qr4f${lE=;z zRbtd71OZ!sN0<8nd2Ju9xCinvkx$XY8_Jj0l1-)XNs#KPz9;KhG4-as3JG&?=%!Mi zmuY+!8McBR^-`zj6HX2dZN$YN->)8x^Q_P9(5#D~E<((ZbFsina+>hnf_`jfTx_DK z^FFbG*WsJ{qFjEe$;zCy!;p(tpLqAX&u26=n^LwouBFgUGz)R>i=Hg!-UeWDQOi1>{}=GA@nE%e2p%BZye?U z0nEA>9pBLd@7hF_+3|L`)MGmlou+e<2CA>wwl{bW%RR-;xwCkqS!Y%0S{$(bTxr;| zKoK`s(Nl~;I-Z=Wh%mFt@Z{q0Fp2tCpCEEbz9nAS)^Q0G@p=xD(&6;vLhnTGMr479 zt>v=00tH@uqfKYi*M|W>&!i+7?^W^!qf(OVL95nN1Xs6wA-<1Xf{i>qFn(vJ*Y#nS z0@O!I!!!E^1-$oB-Pge0tTR(UPI-bA>R0m6-;_*#Q^9dAo^n&^6JBN z6x^XiK8?iMu!gvI+&~tYJe_PP{l&OnJNv!3cghZV`vi z64l?}Dx8t)PotdEy}=F;)uCCu=;~!)-3aR^vvkhmn-My%J*QV4sA=0^tYx|6IQ5bY zRDSO)6cr(|l++Ts$8ihVQ39V51-$paj5&WSeg=RIvTX0R>jVyONoFTWKXjY15N}NV zmRrx!V_FQO^(rZmTQ_{Nk5tmN0Pq;1_2M>6%bMhx(Ki$%oUmJFnOi4`y)mAb!YKXG z^5?x0z`U2N);&bYZL5t>7z-O<&l*kHtC|U067=i3F=Ac2CJx1A(TjeQx>nDoO$ zCy2!Nz9)$!qI@?iAlUIbgp>UXXBEVpXuy&{T`YGUbS_-{c#-rMMI1NQh3eLrc}lcn zZ)#uR6wkYMqH?4-_80CUF>%@=1%PXYr6Ma7Gm@>xeU>7&{6a80Z~8bGhRLL^5|S1`0YblAq9VVn=P#Fc2{rqlD6 z%MLI3lf=Z6tfUKdx`_5iSKQcVMsGu{~S9_QCHKuEv|7p8G zcFw@f4(fl(bbvN4z%MxQ8cPNzw6daj%mjZ13}U*dVcyo$zOvDUBbYx#i008Sb|}qK z-i)bJ9P9!!CceU&6Uep|ZBwkN%C#n7j)=zM6SJaoi-T>+Bs^7nO3YLp8Xtv)DH^AG z^n8eXe_O?MuQ@+LN&@Afgb4;`f~c`txrA1MObjJ)h%I%*1kxi(y$l*vl=SGdMVbj! zs3Dao;V55nzSgHPT&EpJ)k~c&7;};<#sn;&Hlim#&DFM-$;%J{Mh^lLq7B;%e`ct@6TMP!yxPZ4%4&I-FT}tmrhf{{uid+YF2kO>&vv|J09qIJ*i%5 zJk{p1`q4e9s+N^*J(DDS%j%Lzh~(ZoHF0tlMQXGtoI*mT`iLye;;Q->d2zC}aRlFp zv%W%zaEQU(FO0NwH@$alDneyjfYV0`?_6y(rdBV3g>A!VHi%kP4l@-H6EG8y znu@nFLpgdmB#zP|lh%F?aghG8Ih&sN@V@MW&e~qVaXxqF*=_MV$HF~#?bY2PSAWX$ zZ=;34;Wf_=8y7*{C>IpA;%7oz6X+H;UV=JcItmmug@`tNrS6)wS-JS$5q)#R{MREj z-aj`R_gO9u3)M$?XGi1*{)U3z*N!SW+|K=`+P6H`UDoF`HJONsXPskIa$gig8hGAd z0xbEeLYxN7f?$$EElH3n_&#>yUoWT-KJ0Q1l8elh+4EmN^OJHjK8&6-02O6?5I^}CY^JJCZ1X8aSiP(B-&&Y(RZWZ8+JoJ-UNxppTuR7@6)C4D8?Guk6QJ1zL zjXs0g;4SZ(g>5#lcW*Zw#=E&?!p|dYaxJqk%yt_0b8r_Wb0Jh<0zfBmunO$)wZ~E=C8Y%s_Z=Nt^+baU12_-DDSo7)foPUrx+A zwx4z~VzpelCjXXLs>n^S0w$Nhx|{upjL0}6mEhcfpXZ^!e?e_hQ1zI!86+1}J@@vs z)kgz8<6>3w#Wvb&aaR!BbPc9nfV^gtj^kUL5zoCSfX$ma6US?YJ(4er-0yY!y`$b@ ztpEFKD}Dkf!3%Od{H0k}Wg6}7jUN-eI3`PN5)sNz*wA)n52+a zH5=(GY1jYit^NK>1-&dtlw@g&Hi1kd8;!<1yJUp<@I{kj-YN@+b za*ral0lBoNh`ux8FAAKbqEvb$skxo-U!Y3~&@pdd9mW5dSAQqEn%8lg!jPKft1M2wun{~Zwj9reVpdkc!Bd&i# zixn&w>8JJK&|aC66eV(jmgvS0;gb@nWh9|Bpq6M{SX*bo#myHc8X_7~lOH|wSN_hU z^-DEjlV1Q;ouuZ2`=fE*o(fBI-zEeAXepZ({Mu;s`$p;?Ll4Xe`dpur}1d*(j(~*@HH+~?=&fHE=tt#F3|7Jb9Gjxdt6@S= z_T}6lplV3((}m(#{Zg~s?YFaCqDL<&+EJuv*>sS%jBE!bAC=&*659vdbnt?B5sM}% z2NG!bz~WZqKr?(t@0pVXV|>JsIsG>d6zdhhHX0e^hm8hKFSxu|rT~zmgY((s1?uQd zc_)WmyAV;}jIOEB!M8FH3NrRx6(GET{z3+DqQ^Z14en2#k}><7;sp{90uU4ejCQDi z;EqqmrlcTwUUVq&Cl3j-{X6MD{Zi=QWE8NiEd=`xwl#q>dKOh%FB~+9D<+i+O3s}A z>5Q7td3=%?tt@q_)-tRz1mk75R86zw*k9`sy2fap;jYM-!v~dSar@_J4|EeEdRZh=vX>K?PqqsRA6i!eh)~!P4C7F;q^mHr81M z)LMf8M#^qpKua?8CKe?a5**9WvbM<=c78IMy=B!U0W!;sZI9tFmF&s10ovSeAAmef zjugN;P4hGL&7E;G5q15>NGu;%zy26Z5L*2=q#JHHdK)I`CsSWrTGytW{O4o*34!f-V@!rG?H9{$qxjS$U_zA*F;$ai|- zB{3P*?;>ruuWDr{(s!?hyD$nA{;Kk&jHntXj2jNHE?E{zMk z&~=DAS7~^3_669EeoFcK**NSf|5>D>m6%N6ng{F6+OnG{ZJUp&gbB+CO9gD`-Kysx z3e(m`?CKt7BgG7LLfuF739$bn@boNNvpyn42n_8eiK5%%oTDQCBoP#C0R*!4R!Xv# z%r)y5K9|cT>xu;&qgTC_=J=<~eR$ndlPR!sQp1uW;yh=r`$m?7g$F zT&hc)Rg+OPyr;YQu0{`e=5I*85h2VdwuRUaEVyFVgiuhfG))Qex8!?|enSLr=YMT2 zqAPZQm-f$wCsUP*FuMsMuc>5<0#~3rMUncl_bY~TFbLy+yiXq%f|GW;^1LeODc2j| z;}g_6$TzaDpnL@3sD+QP-~H(w#1c~R*H|5G8*9q*eZBJ!gMZGe-e!0H__3#yQs~>H zI;TeyIx0-hIwuS`oSwHy0~$J#?;?W_Aj9$i2;fJbgsKESwh zy_!Vso5CD1p*9y`(NnC+C0TC4bsx06>p0%?W_9v25qi1Tx48hUWA(2e+!vQAY6)R) z{dOBjWDmD(CPvTTYwWC4tiMZ`l-XjS&X4(IwE6#L@+Q00-tPmFHzW7-YZ9EB>7bD1R*3WHxSD5M&o5elh(p?s~o>rp1CbkTB$mcqWEky z`+Yi-Jp^6UX6N?R;9J#d_BlkIeGPTDm)_e($2jGYDiz5hsbT{(qB=l?o05fI=xrvm zcx6iG63-%6R&-uYH{PmYI;Z^3Ts$`e;DxTbdDZ!@e{m3kO2cRRC%N{43jv19A0X(I zNceJFsP2mBi(2jAoD3rBql2LxOqWO4`9I+|aa;?tAz#Xmqwlx}#LYE8Mly_uFyf?8 z{d@#4y?CN^TWgBwL7WF`-MDV@_&bg~5>sqYNGO&C3qABlHcKyn;6(g~xjA zA(KNGFP~C(4oae}(In&dTxb0bh^a3H#Yt*Czuf#TKXjMao!+nC^89u`=#`E7(ag5E zzhxjR;kK#jeif5ESM7C-=EAoPCoC2ll*$}LiZBCBCTIy~3oG7aD0j9PjO1@R32m3q z`f=!ttU@b@>3l-8$WK_Gte_4-$4z|R?b6X<54dE1&1MV66_jJ-5S|zNi6hR`a3ht{ zoj-RwgoF7@0cyrXdQ-QBL|UUZ^sDq@1`(M;&wJ8?7yFo{>ta^k$x1qA{3gUrgz0bZ z!fsYGbq8AMK|77?{&sJ5vKIfn8|82RD~AD(Fbias*o5w{-!MiYf_}KQ5!^Ar8Lx zYbw4LSq(0rGj6rk2FN2{$6G)3-c97!S``sQ4MhoM`mx^OnaftE0b{0y>&ioAP1P78 z0ELR$!!_W$>$ae-saV0nWxE9Gc{}b&S$!IZcu~ei8wx>nWMf|K*trg`nahea;)I3c zSPTsO1KS8AiR0tW64>Mp#mkc1=)Pxz zP$m3%h13$cw{@;WIX5>@=Ncmod@z^0kcB#0ND+e%X{$y@(*BC1o9$8dbRdIJuiEn~ zLrF1#_6`-P`gyT-%P>qNNpn&MswdL7e0d$v&+`NpL8L>dGZ;q7y&QyQ)%C^FsS2!xa@TIBQm+R`T^WupEEluO zp5l{DK#TcTYm02t6aXIDVIFHKyir>XF-Ho3uKRZ^2$KvpmypX8^G*)%8{tosEtCdd zjO8lZgNAQdAu-pi(C6N=+j0A8@zYGUA(J`ji*TVBH>pOFSH6PdM(ZD=V>N@K%L`gB zb`RpN)mEUxTIrG@Djyn>8 zsRr!yQOA*w7Ts{x^%fa18r|sW_KWnB^q{ot6$|9|HCGg$QTUgTIH-^~L zK7K7dG^ogwF)PpMyfT7Z|6{;9*?VB(S*N)zfOy@D_<3v$(%xyO^Hu8RE=N;f5k~8Y zq3!4k9r*0m+~CxUF#pl;x$DTM7bD>fP|#$%R?s0L&4&P*L%iC#Kovy+|A}4*NV97Z z7EXA&DHYDfdw%RgW>JVB`#YJ9yb^LVSSoZ|&dQYgK>xf$MIEwn2mpsPGkI`xDJK6I znojx*1b>`Qb`Wu#u$Jf&Dw5nr@4!615vhnQ{{B}+0&W54vk)(-vcO5&8<7b0k4v@j z%qwurhq7lQ3bYyV3Q2VS5c4?Q3BBCbe1MjF0GHkOx&GPu5Y~!Rmce{QT=pj_Dj`+h zst_i9kx-b8FaEY^VV)78b+Xqk2C%B{VODiw3|O^8F*CYc z=wBEl>RA1Fw5!EWvEOX`E~sTql0o!|du_ZN!K_O$a1nk7pK z6{^jD!mp5Cy|dH0Jc@KhlQ`^4ASDB=25^iAt_fz#g^$rL_&|{f+`&{CL2sh=ubff< z&_?V>oeZl_n)4^ZuE{rv$SSdt(yxfNnuia(;}PM%G+y|@FmPc3uz%4e)EyYaO@s}> z;2M*mfUW7H2smtKc#UXww7Bo>NXk~Cew0B|0!bGTzp|J|#H!EACKF5iaTs*ddRV!6 zH2o}aj4iGjDD#8Z(eoKit@|BVkeyvO+qXdoxfO|h<(VXle8q|DfDlGUuL7o3qr`1F z&_HfbMr`!5_=;~KOl+j;iRr@eO1+& zqYOr!x7Pw<^6G-ltpD3s z%k9sfX)n_C8v)d;Bg`21rCLc5+ojAITchWaAsaeA9B4#k=noZOi~u<6g~;vZANzl? zU#++vhcPR7i>x1Ac61EMf}eD%@Fl1KDscX=axdtHDSryO$E;a_kq5IN!hpRqtUHbO zhTc1XT6=+cE)trAdGTQ;(P03G^+5ml*t~8;s||&Y4F)oPuTQ4ipFD!79x285#Zor8 ziBNW?xu7=hg+!{l5+{R_y#0*<=9zHeQ7~C!Y#k8m<{csTY|;yd_B}kWm)w_KI@B2R z1~vdXge0-{BPg@7&Sn&=DMfu#YtP)(ekEdZjOk#h3HDSyb4H^%xXFvaj(60#;CK43 z)9@YY8K+kM^LXVIZq0(i3MlCNT>#Qn|JFNw6SSool;Ftfrj>a)`- z(enHDL#*8-%W8}L;0%+l;}6%i3Zza59ju$v#z=yy7|2?!sSNn(_eR1uiRv1)=X$c& zbn5JCUmch59lbpIrc045(Ocln4Q;OeNt0Q8VcUak+8@E3K}?+=SrNdh&;Plf5nz<8 zzCOvsiU4AI+{{%Dq}db^d_e}Rzi!Drq*UjzF9%LCtsd%S3i*>*={rSZE^2uB728bK zGgO>sCJ!8=dDj+xL)Q0b$#;(wPX?E8nxpWdvqT@3>}@YN>#;89(> z8sG|CSw=>DD#M^MI}YVQW_!DUI=R5)ADD#TCy$L_i(8_mh~v{c{hL)?VLUg_?H0Nh z*+os=)4r))WSS?vKZ&iU1HBWg7+Rgcmzz>T^pR07khukVHGsz09UaeO`(f5u+nm>hN`dL)GI3dxD8?6z|SL?)N z+*V?o^1(3?QlwfS`oqFxsssaUA%2{gDPAvOMohXHZ=e%eP1=q!sy2x)!JZ|42>BNjT&)|ax;CxBOyIl^lW@{ z#)_J?V)Fp^sZkTddWB`3dTb$!50AX_5u&w&{Y>?Z{csL9E5?V3{l1}x{j9NPkMi?5t5N#BVN`Btfm&qi;z|KvT} zwN*haxSm(9eF>4!R0$!dhtE*=i@))s^m1d`V<~4q>^U0W*`4d$`t73v3!_ArBS&o?ij7EmrlMUMzEd32O}Z@4`-@DEp_$@UG`L zJ|{8rw|P{|W%kp@57B{yDr*2nqFaS*(gcJbs;^xKLUj;dg=jR3_l%JH#V^B)ynRj{ zF+;Jgzdqbjxc(65sV{|<{z;lNl^beS`!ni``rZ%QbJJ&v1yi!lLUV>lysPi>g=+BS z)#aqGcG3s=Y=t=t!#wAamYxI$mWlBm^<6dQ`BIM^o!ax4-o+&^Z#d_RGHy0aZr>ZG zGF4jlnUN`GBzs&oNKLV!cRQ1^y6H_UonLD0GlH*uwNqX#9ahjEGy;$srXsKVr}udC zBnuCCJ;RQ^Bl8g-WXw$$O-_yS)Tr(~m-HPg+AmwmlemZ{{)C8ytz<6PIDI&(DK%@u zTr+lJS{HX~l{Mgy*ah(6Fq z-}V{`#F>}nsJ7$Mb0LL4ZDzq^>yybdwi>7QSEmy6cPKqh^O6rSWTenaKUk-vSB|&K ze8U8+vTZ^Exb$Ctjr!5)JEAq{$y0KTNP3iTBDN%9JK&G}2nvbJhLU-G`aXymfs;zsO|f zLsbjS*WKH&k*eS4Ml-|bU{MG2R%q8}UQrhCDIeC5wn%-kubs$TOG! z7eH`VC+IYXr$0T&BNRWVA~TibsJD|SU|)|T8-DW{E8alOUMtAUp)2I~U+>4|B3n%c zU3w4RwB@XGcFd1<|zr0u%7Q@3=*QXbWbqm&y$A$}xhm$ahQ&Nl# zLnR1#uokIRCARjW#%YA{`NTn1=La3dMeXET(L29SjoBx8Ge)gEzZXky4XgYfRoLdE zTa^xE;!whJnT#0eyw=u838w$FrsDCHMs*!|Ua+O@jh}r1;5Fw)I^rVgkqy6W^>=vY z4|)?t%C^vP!bQ8MM*V#IH*H7_dJY{F+(mWwdY$_&;O*@#B{Oh+Vsil20aU`>(CS9 z=!;lxhC z@pLl1zE}z>MyVPJDJUZkkCiO|PwfjpmX14sfdp4Jv*Wne^x5F9j_@v{u#y5hB_j5? z=D0D7nU32myQ`_Ew7i?2#tqbRavTrZXzH4G21M!gu@~k^N4iW}-yO&9H}^F8Da3RC zn00P3U7r7V9$WFVNiSWy{kbCRoX?|~Nb;3M2p#3#i&g)n47JnsEWN_X_F|S1@2UX| z_{Aj%e3+xoU3$NsYl4{&pxQPgs`}!Mz6sFf*({lO43ZL6B6XknHdh$57;F{;n zWvJ6z@P5AUPKe&wdU(naiBQv3q2%>D(&Zw9+ioGM)$h2e9IElPUXQ0-1tI~>UL6Rkp^)uqg)ahe1Jm~s^+d{2Y zdyjHUmT|+06uIhxb~OS7^=7+!IJ)(DO^8ei8r%*}JuWTDo?@bcj~kS~cm3Ko1^ZQ- zzv9f^6r`R8ZlAvfJ4*U~XqlWktQwmRS3Ry_cP;VGef;7kNJS^UpJR$7LnqPPR8;siS#?h0qX3I%@x$!bn8W_@Q6p%_&N2Y`cU} z&@<6E%3h6I6$L5uFm%sj;3rA*tv6+e84t~Vy8gSOx&?6q=_QO8~c2^u_j zWFo#|wI`E_VC{4zH9v*Qk876iH%=9YCE2w}PGqVhux@TM#f`HCRf)zyyiWZI2OMNB z+7JS=)oeddy6S$(5-J^uRjr%Mb5lHoRsH?;auKQ5^hc#oOYPisoD=^i(Mr6-2?3OU zD8O){m|`j@wwg>@2X758BBkB?tXnNTi1f?9m4pehk|>i5TL?dE%To_J|9zl&Q1lJl ze=sv4CIm5==nBnp;k=;PD}I=7vsT29o?cv_huQ2!4;1HA#-Dt$Sq|q_c%~>N0A-&! zpAqbqU)7&@mmk9Ph0I@`?RdV_4?Awb;(s%Fl)C-GO}IK4?Ll1ihl}nHBhKK?Fue;= zHgsV*u@_*n1F+xPt<38&}(0d*ugZMc{b}mrsu2I7vS8jS;}z&<^mc>UaWy2oJ)S zSvE%iAnRTta<k>tn{>sYH9j z(2IANUh?^td8d~uE+=}Bc2D_PBjGOqJ3HZYWs~-j-70!;9K$1M?m;b_;8qFMYL(nFMMm-TL69B|bK`~nowznO^lgBFAYGq;%pDzXlK_vH_&+^s zNb4FBT%dq965okw$y`L6JWX+-Zao)At*we0KL)O#bae1vJS4_$Z<85@HAKUJL(-^t zKBab)%L4FRj3Um>WtHF#RqmV)s8t8o5<+!!uvJw0L-<4WZ4Tg~>zU;BhZ(K1<6n9H z%%=OAwyoIgHvG|PpXt=*^-})Y!2>z<|8)2vjebb5d58=i4C7DX$>NmCTNu7r+oJi) zq-235Lv3;pd$WBJALO}RKJ2&-D?D(-Nk*9xMxGOebyBjY*Q+8$%k6OC*`n{wWp1Na z{84B#KNMiTx&lG!rk_;ZM0%45wXqs??LLXyZ zDhR(R@^V{CiPdf;KveOEh9I(P|BiowfGS{V4R(o-_XTYk*`w%dwu#sK?s3@V&u=J> z^dxjz)Orfh^!e%Oq7S+8a**W>Tj+XuYMUeXk@4;9 z{Ed|R^~7SS#g6}5eOnguD62v`p^j-3>HTM!!mQGzcwUP1G)XBNajP`@{%=u@VUFX) z#owt*Dl%+^W6kAQwUl1*E;3U^vHWKhK4>RU^gz4;{%eXLHgFO>YA}rGV6QZ26h&Yi z4KS^ns)TU1;U>p`hwd6jjxKGYXtu1fyuXUfF!25E@I9pG<)#!O<#<)=`8b$5v$mkP zF;hJ76MW^y^(o(V_D()9^#XUR^baXeBjkme9DphfZ;tO_;k!LA}yAZOqpABa@ie{LA)|n z+xLG>vN&KVjtB~5CZYI453vJ*e8Lt>gG;U!KCF@whQLY1*}8bx>X~gN7NN-#U7)kV zajy#bV&VHU)Vh}+S3%b)>l`$z%(f3X>kmEJ1CZRG5;tdUC=t%9XxUXvtX16e_#PCd zaFu7VN^l8rpgNZcu$A_;JLQn-_i^Fr{p?29P5Z+$%;~t34sXSsS;e?zg0DaUf_;AC z=X$kUm=K;f;Ky--xM*lNJ9+L|YW?QJv7*%3;hUKEiH+n9UrEWtxBaW9#EOb{0cvUzigt?@f)a!t-s@we@rQs6Cdw2BWd9J zwKXkpd1;9NV)_eNK>r06T!3-59=P5Bih>?Y32(IRFE*%mTz0+Pe;G(DYX*8h{thUK zEmS&y#=Nyut5&+JETY}aHavfURU#=DQ-0>UakZ5;gy;=?SdB7B@O&TGQoOna zdFFPr2z_$v{N~g3p>PI|#9=k+tVNNh&4M$A^p65)0XjL(x&Xi<8G-rpHvilcS@aF> zN|Mt%_Dt%>7|m=8Hnbf->vXrD>zgafunrz}o6<(wi(Z+~W9RBYTX0K4%XCXcnbMb6 z3^TC}E8zy*=X;I((=zms17`aOsUJxsm8g@@6aRgB*ceNPdNv)`BKwqJEXdBnxQh(B z%LmaPv7*D;n7WU3$6t$WYM$Y&_|)5Y+9oK)yGf~=3tQ+GQfV7If0$2LpQCEN@~gKm zU*+8S<|8goXH~CL?D^p)30-G4@-FDu(eyhn?-dNM+9yoV8n*f}fDxO2P}c9@)E=Dw zm%$Y7$e1=WEK*$L$CxBNL(C%ot(jUytn&7LJoT7P5=)WqUBZ}v=q;7(hU`;Zn5Wap zw0RR*HO+;fQiKeE3pJVr&h~#$Uyz;AzkmZeaE<&VPlGhjOiEweR5gZtwiDj&xs`IZ zInqcR%n~s4G0qJ6PKbW`lkZ0S!zxa0BCToXWp6^AV%|s49}IG(S=sE+F-K1_V4c@D z5=^6U+c8WzlstvlbOW}Nl z+KhqL#W-G}po&Cdg|UP&4=E7;i9ajE(Zw!Fmf6KR<6u+OW_2g6V+RGn2=}keX(VAbY=9 za6Mw~+OiP$E|E^HUg7fhzt;jIxXmq~XD2cUngbam4cZg~+$m!Kh{d7n$^mVqpF{w9 zTqpo|i!YBnfD?(H!zC&Te3<9BLx^>jxrxcY8Y1NQ-@*TS^8e~($ou?z>$eA}3v&s6 zL{K3q1ckX7t3i7Jq1n=Uwa0T6f(wGxx+k zJD&6GeI8Yq*f&JV_@7(={E;8|-_`P8Y{^4cME=+eB9b5ZU+&M)e`$vQy8GKZ`o}~1 z|9R}=j2y;|3_YztHvH5^i&P#AsE<7Fls8)=Ljs^Gza_e-=KeOChvv0t{NIN0uklO~ z2AoHsDG*6yy_S!IDm2$_xr70JhJ&|TUbK`36RN6BYJ%Qo-!C|zg{U3RAKVaHZe+5- zuWet1H~LGyib0Yc*+gV(STFzbYELZ&y}%5|+;$=cgsnxe0C;TyqCd3-0Xmg*L&5<3 z;^fc3!9FBM2M-mXV=lH=al(0f&PE3X9$wgm!KG+w9CMhLV1n1pjAdGvVd!$*YKI49 zVY5TaRfDICC>Ca*`QTX{;b3CPVbgOQRrX5q)plKOok_B`9lkWXFQeVO-F`DS9shfD zc`E?BH91+-#N^j|1?3v;5Q$)=0h#8$pPQt<%3ZLDV>Xo3_BXsegJo2LV6#~Zc*Fkj8UyBb&6d+jv(S@C<(87zsdvR>?9ZbFnm_J*Q zGsBkq?${+>+VzH@{N^ow-a-tyA&3R2V>WkJlB4CBypUTAW_GMbY%LDPlD+pv0D(- z049p}YPH@*ulN6mD{mpdw$njZdJPlA`I2E$0R_$PPEPu^Z_MLH$i1`44x--nVDU?% zOr}yus(eyhd=i`{I-P?NNRFt21~CPSg1kOjBTk}Vrk;u9mG5)Tjsd~Ihi?wg2DUQk z+lM)T^7zqjUYOB!o>H=zar4XFD5{X7_t}Mn6cEzBQ0DI2OT&b&fDE(NumNO@rgiJa zeH27~cFA;|oY6d$eU@65jX=o(Ae{1a7LZE+%+*k(!|z@EN9ZehWy(Oiaz0e4Uv=od z!9^7=cS1Aemb}`&WYP3!Be6K)1o6^uxb=TMBP)^k4Ao#9<54?JKBNz*h>kh!+p1Dp z#>chqu>&NmZ^oIeN`;>V2wtTF3}yhfV>ibx*Xh*H_%{*{Qy9>uqyXXWP8BIzH;l;{-JfDw!_8ze|e|M_N z`s)FTQ&2d;%^;}T$2W4ss&LFx+wf=g#J-Fj{LOW`2tMs|G#QC#42V_46c!K$B$?%< zbuC6Z8@nb`Y5G8I-@J>d>wG@_@?gCeS4gQh)jH4lL^XMmT7Eq_>x}EvyYcz_I~4>+ ziuoCBJE^a1&gfZvu+JND7TRXNrun8ec+F|V76W_swbNPMiS|{bD82}?B^8e6!MN5DUqA)ah?cavNd?u}#GBBkuyo9rDeJYkL#4!h0+>~s)ahD?+3-b( zYugs-qTDjE-bX7TRmh#)*ZEk(_aK1IwNsJ|>F1|yLYTYQTI{E-c{Xz9v2uB8edaub zh;qW@^zJ*72FfDXbqR3~QUujX?ve?Jeaz?15X1cW3WN5tAUVNO&nMY>z~-B4{L7v; zU+jGUvka%v5{>K{Km2wF{CGX+KsI(ox;5R62)F|nr~=8t>MLm25-iQGaqoP^Nhii- z%I6F$uof<}?1DZYthX-4%`m$Wai`bPoAA#~Z9mX(85gii$4mo%ja!ea`3Lf{)DX=zpi98!Lcr~1Gfz~WVyp9t1%Zmh=+mv`4 zg$eyT63rVHK)q@t^%N=yFa6!cR`i#do_NHtcU$x`fNIR?Zb1A~jiG=VjBVh{`y^;o zLSgHR$lX~m)n4bg3}{dvVrQSbZ1tQ1iUl&{lH?3VhOc}b$s6~|BxKPj>$yHNvlN>8 z?8=F)7S{g~Mg#J(bRY?63KZv3&uJ8&kMSgM^G{f8Hhb3;^UR$Co7omsF}o7^5eKXkq)g2&!yT#4>8yR~*6EtzAWAawTzJvT3QjU-1lZx| z=Fe;PwMM_gOz>xT<)n+_c*8QxVZVjsWXTVkIKy8s{ll?7s9O-z)vLmL!lzl_M%2@T zl@3trn`+Adu!~jo9Zxd+u46=35T330yOV)LH8In+v+_CW%Sa7q-EI#hR(}tKa2Thk zfWyk)Q)Hv{8h47_HxxDru_H>L z&uG;=O`h?qrurehcW!2h?jTjo7#^?&ETjZgeDp4IG+ic=YPuUU&K9!eqM^|5+B&&E z7bLeT74HqOlRFD7Fp1k8SXgdNIj@n4q~gJk2=TZX^B9u6!4r?OprC9xkh#6Cm4__U zkTYUW8}59*^86Dp@7S+p(A#a{LlU+r9AFu|WjxQCGfWRWT*3fNvYS@De#@KhDi~qP z8R{t<84v(Gy|}=6Yv51ib?sGt02ggOp0l~!sB4Yj@LLJHToJHXSwZ!SV2hWpX#0+V z`fWN!xtZCfN)Cg*r&~stldKM8D6~@o==aF(-cY}pL5=&y+r!=9d z)moj>t_VI|kn$NRomWa}bqhwLQs|Aqyuc75xi-ugI3e{HJ$O%IBD4G)7%f)6`S%<;}DrDArw^ zrXv#Jv%v>F?Vn2umZ~u|bWcSV+&a58>n;hKFXq(h&;EotUR~uIo&3>=p+J*&B+_ac zUJ!oF`}rS%psgAvjMLk>Sxd(MY({kVNCVF2p&xeAcEKa;IEv-zc7EWrExp{^cDuH` zI-E!)otuwL?I5txd`&PgJtQee(t@Y0T5?L}oid&9 z^>5Z34&frxs~#Q(pUC`Ra?vNmVfN$5)#Z$&6E5BB&I!k(WP|S5x^$^rMN=mG z1d~8|1uWzicVk8tl2|;G2x;D(T3@pAtu)l_r~5EToO>c1(Mv-m9N|L%;)Ea31z*IO z3)^`qj(2C%I8#{DYYFrA?V|@*0;ToW%(qbwN76nU{#Tgy*IXIxn-9wmWEvxas4mN% z;In(PF+5{08k`}ynxV*I=(Nelas&FdSiR5EiR&_^CTs;4CEaHl8Bt{qn__E6vi^}4 z>8(`6dY&k)zH<*^ z5z#Px234{2aDv(83DtgQ&c$+&w?kXtz;D#c#nG~^Jf1ShQ*Tv+Cd^S0ciP%gf23rz zcFus~sk1VZkzMa{^Klo?-TRcIc>jCyk*hL}weJ>wVRZ&xAma2R#bX4MVX=jO3Q^^z z^$>UDa!$;6UmmCL+Dxj${Z+NN->ty^j`rri%0i{_m_Q}22KdYxtr3GGcO0qr@f`3! zS{Cp|meG!@O&`Js#JCafH=ex#Exoa2HVA35Zy@Cu^&=3fWo=KZ8|m<9y+U4aUX%7b zZJ$4klOO3YBlaaWW6|%8JVvfR?l@RUdAJr>@b6vs+#fesl>wEKaXbL0*t`kjZI)mh z_N@R85np1#bGvvK>@v>>fw}W-&z+jy3a?r6A;F8L%Oip1o}X8v6Ha?F7b}8+)ssng zzsnr&imS?f_9sGWKNwTjd2MtRhoi^!auI0-Bkd31%$;2t&A zZ%%A2U*iEF*08IP>U%zYI9%qBt}J>iUk&Cnp>E$ye8FPlH<%}O z58jVx&e!3(mBG7q7nO@$^i!pJ=VaH6UeRV`XE9qrGAIfnlmN>0{;O ziQ^7dBK(Y)s=HP(Y`f}-RwfQpd#N&5CB{r`uzoF<&f0vT6tRPs->b{X=k{_@nAs2Q=^Y^(I@L6Xu==8t6 z@rO^PICLC$A7s~jN7<9LSr>*O>CI<8xl|m#m$Cl!6rL0)f!rn$&m%O+nzJIS%{zW% z5QXr^NJWz#Fx~C-0!!kbR9xN>J0ZaAp2@^C`7t4!gW(U@d=IWfQ)*YX+7Cp2o;}1{ zRSumRRUp)J`*wN%MjYY?_>Sk=D2~x&HlNdQv5V6Ig$DJzJL)T6A)@9ZFuULmS<=mb zznZVq`O}ZPVFQHog#b&f#wIKAIQC$0|t1--PoRQ`u$%|js~Evry}j4!?v2J z6(IeSZh7R><@)GIXG`7P(||N88hk5h=D9DP{`f@AcibblWe>2bsO8}I@=Gwg>CuiI ze?QE5mP9ylo&FbZe?R(;duLNT)N-p%A+Y9hdzkWa7{&S%r-}8=wHR*)=}jQc+m;fr z-p=99JbR}ILeY>_`3DO*@MmOh+Xt>$TUH=xaz7~7->x3OeSxsE`Jo0Qu+V)9n(~soh;TGf69gn={9PcZo_)WX^kl%*i?N;!^Cyfkm z0vCfDTKkrL&SL#zLFVb%cc*unEtiO*CKH2) z8@s(P#voGWnaDycOP%y$w-}T+!)}@lhaXb?d&G?HcW}mQ&)1|X*=~pNva|DIRV9qLe~ETWU@CCn{lUs6pI)T==p7~HWp_=%(kU>OQR-C{L(;an zKutV#llVW2|G#MgQh-poDnCxSG%n3%a0F`1?ulV<58n}7B++PO*C40Fjiqv&2n06| zoKwHFR$txMDTRH!Sp4jUngP?olx276w&8{p;gQcpBdE!h=0T|^|V67v~+na;SOux~pT7Jj%~LZQ#lgAp?3N%4Fgf?GgOV7PJa?^+TY&kz3u=yARJVd0x|i7RDC?#GeP{ zU?uBt*Wfx(S zCALZRUiz}8Uw|ou;${6sDq|R=8j)t|t+Dr8P6UNd`g}c)W>KByu@a3Jzwnt6Z?RbT zB8`f>7D@6Kh+ud;Z@)(%3bWW=kXlCWjArTA2v{m zuMK(GukYK8?~9^TS}Y~z+XaO$ez$;EmtS@N5h$2%#qd~gL{9hJt>brp79QD&<@r!D zTYueau`*@jA7pmW5_qRLAG76<&_5}K$117N@RdNTWHNR1|M-$|0GK`~Tpara27rGf z{-pBHsdmoA9L~FEDlNFEDT8P}fzC^du3s~GDu{dMMbM^7f*mddi}h~>frn&j7v zH$B~8n8wQZ@oqDm->_Iu%odud+~aEB<$MVu8$W>fd@W&8Rd@mC;VfTDS%7&g%1q(j~mrDT# zG0~Wa2^Wq;$@RXqoL38ljnG#LySkX-;l68#$ff z4X?A3wgRJ83z-{;r4RXvm~Z z!o`x2d77<9+9Kog;D{K-I?Lv`gS~8TfFQZU2`+fLNFcB9-mH7ZX8cZ|T`Ti{ZfZV8 zg)PpM+KBA_Uy{&OdU5K@kl;*uQp0F&5GPQ3*7FJHxVe|VST^G~m5M(U3r>sQJ=bT0 z%d3oEQeLj}c%I(xR4`V@7&a2l4{WS9%D07yiTR5Cm|~-OA&9?xbKSOrgL4lmYdd`2 zenMZr5$l3x_z?b$ZSbhc+a9(~oEE@H)tHj`huFFJPu=~=!OMqXvCO;ZsHF!1bG<_f z)^882jZt{bc+rgBotoGC8IE`B7Aq}$R9^wCo5c~IWE2AFGpEaQ+DKmmj*dFxf0r?9 zdU>=9!>|tpW0qEEV6Q%#;oe%y4Hm|6IuDft4Ar6rKR~1EywRc4aZxRmPpS!v;#>J> z^k?_9To;J|tnrp#^$-~p5+d=E{TdkJ-$k*ch|x{Y;tg8wRbZ;GHm3E!Te!Gzxi^=x88ip z!)cIb6MupIqem~s@y>-)`$ZeGnE!5oj^oNjTcFlv+UJO(<-j&`k^S4*_uz#@A{g>f~~fQt|o%f*F*IF0zqo~pFuwZ z7WCt%#Y{U~2n>r-FtnU8fsU!KaTyJN4|lwA9650wH4M+=JXSk#^gA}rsNly>M!Oo8@0bz#jr4XkVbJOW z^3sPhr)pkX>dZ6av)DwZ13itEkrZ;X+-Z9(i#>gCVvf1yO~bEm{tf`Q$w!+13W07_g47E z|8Bzn2$;cYqm2(UN_GcpCcdtyE=G|Y?cl@%Pq`CsO*xy=QU*?u3LwXl5Kd5E(Nz!b zkJ2Rr1&Oij%bR3^e>cPOc4;WyE#sqqr!kIP5_!61Ek1dDfoAF-HfJZlGT#Co752hc zXS>ILixeS;$!&D8@yYYNLa5@lg}6{xzx(^9FKS|%Kj}VW+r#y_{Ly?9N9O>}eGtB^ zjpM2uPr?wPi$q3*w|xsH&i$8xH4Tl`hF*I{e*M5&q^6e-5&4Jn83ti|<`0w(_g6*> zj@`)hdyP~pl+4Qp%U;O)O?PjE&tStd+PtV*g6X!uIGQq2DtB6f|J~rbG{J$*+xl0^ zOvQ)GBQ}6-)tu7qc@;td687n|@!@+RhNj`4O0 z*^ISX&M-b4<6*GE;iku3vFey+ya=ZrL-nvc+T;7R@eYCi7wq@}rzF!<1cQQn6 zccqnZdm=GyA7q_iq%qlqrp_U44M|w7g-0LgJQ12_6*B%*f0d^;enXPsnPh#}dE`mSdBKE8$kyv%UHEwP?@Z|70EK z9}m$7O?N8BZ#fioi+f{Xa~I2AWbJV_)lu4IjqW&Rw&Deo)*0?)YdFqN62m|B9=zJi z`%qAr8rCyMza>&h;YG*VOGPDCj(l%-&|YN*B(+X3^ta@>@)DuhYeH9%v~*aMI^d8j z@+ZXpJWZ`IMln~DR1G#NlzwME=y(e^|Dk3qb~kYGGV}NoA_Gq`O)SNhN^E~k&Q&hVDtwxCZP0SWVD|nkLrkr_6?iuqhC@ave zaas0YqA|4m%Wn)^Mn^o=w=S?JIm@((>c7N}@1>PN?E-*vdBDD)Zb0V^7;y0w42!0x z258nnG^HYt%f}s(!4Bpb;ear!Xig;Sg_`hISv$0FlwMVABLREOf$dimHH0=aJe^N1 zX#jRvKPrOZGhvelZO{w@|Cb5PXW*Z`HZgnOeMt}J;S{lLOgSU(7*>7blfTvC*HG*6 zhFlg3H@~A4P43oC=+8_?>Ev$g5Z5Q@fT6NLb8xL! zF61U~=Ws4#KYlR@zlGWoY$g*(*Q61Qj`FdZE|X^KJq_$l5JB;qq%-;cko+xnAI?iR z0KecQz!nn-n|lE$ZUpEkx$nmU`3*g;uvyl#`(7ELw}0+~36F^z&c2%aczFc)!|Mc{q3~ww3rUtcSOO^JHRefB zVSeB1W97K%O=C@E4x~bEcY=ws+N3}5XX-4JXx-Y$esu9?e9vHAZ>TBt$z>gK_MdQ~ z>Jd>uT*J121V~?j@<@|SXz4I-bSPRGK#yzV`^8;@RZ>uDTgmF3TMtmyCkLsN4*dB2Y9 zal7YX7K^=}$(O%cI$nA~@EnyN^e++gksbBdRScN2_-McQ;ussr{@w@0k`hT6C6oNk zl9A7Wlf2ton1oE-@|9p@R5p|LT$pQF2(u;a&A0ep`W?7ZUlPQnQQk+SXcm2lDA9q)Jb46- z{{Hyu0%ppAGYDcLEf~i30gy1Rae!-L$Eb7u6mFTuHfjinB$D=X0gyXO$1=*59#t4O z(#M(N+HN~>01stA@QB}S_-g>ePq5EE>mWmUpreCEG@yO~84-RM8mRvADQ5l*UzICg zq;CZH>3xa%h3rd*+@ry<$_o{mkK72*1~`8E-?F{Jhp1OYaaR*64l8?7o9(N}U)zR< zl%`|YV~x(6r?1}p`JJN5T8N>{epp&GllJDDp!am>a&Gud%ILCgFRYd^sjuf1rm}AO zP{fMrt5;!2CVh)N51D2TW)K)af%^pz|& z6#s`&hcW11{?K1^A3!?fun6$vEyF_l3t$@v`)zJWP`#zUNF-%}xWP0Lx~Ckj939## z{HESgQ>#k6CNyr3j*vaNf~>Z<$*~-v%wCVew)KN)O!c3tZvFF=`ll&{)^qplb2xJx zN8grq1S?5p&r3d=xkrmttv#pBw*>>jIA6zQzq4cj>*pNCG%@$<&%)6u%|dzEACfnf=5 zfdsT>UzG(g|Feo7xi0|WMIb+w9wL{$X{XA}{586li1;5F)}JA@k}2cUim=z>Mm;;G zbe=;r&tAUysuWH8HDXsLAwgyUDI$S1ATs$!+_(m<=p@ZnHGN%1aoo)>UsI7eocK7L zCKYS&3>GZ!J76XjKptljb`#0BDz`(F>*YI^BYIo{Sg|Hy;tTR$t(nlz77g_>gIsDO z)zbV%I{wJyBc5UPJ5iGgc$ihPWqYBTd1&PPm$7!B$gxc0^@{)ZD^DcBbBAYQcKr1BN!B&9XXP$sDh=;?^^YZXypFrQwu5O)%x0!_ zKPSi>kE)8fDgqpJuYXn|%FX>l#QR%Iz>|?+c_Ka4xKJ!fS{1pDUnXFfuUrpyP7^IO z(u8Nrwn)+=g?O>o=X+rZx0}EY)miph2x>3(RHpk4r>(XaG22(?xgTPp9L%P!s*w;CHhA({N9+t8Bf(s*;31C8%k8)W@?DPrZU}6SJ?=sI7jh z{qJsA;lMstVm68LDS8+L+yGsA<^4HgcW1NdD-(zT6 zWL4kSl0VsO`!Yq8aVIzCo{`{pZQAGyir$~qYw`Xt~^&-|V9l(e?5?TB*;nNpN53Sfc5x%s{LGXCZHH zTv}zbf*$v-X@QarxD%0_^{+wrOSvB^v>Qx(YExg)FeLd5MpjeqKY}G}VcTIx8#}Z9 z`19&V#A`>>glt=-ymT4ipJ8nAW|#0qk8*$IxVvQD@0FOxz`ZcsAO$y{Ro@jMO_}ZQ zbbuL^N(DxvinP}7TBD~-v3=&LbfN4mkS!UimTBdkuJ=7#Oy|8!F+<^st)DGzw#CcfC%Tz1o`rF5Ismt{6BYk!3~4#^2fn2f4wE5v2l57k@eyicW&r*xUa zEdz5_(-8MvXh?P`iF08{jVlaqYzI(oMKm%)+b9|KvKOXSHfw4AcHjkixEWrR z+Deof-K@yMSBP^mE2ishU-VCB)~4b*a~U%};t{&b8rLVn;D7T*{&t`|KLZ@cS*sd8 z1hA2{vI<=O$}>)WIvCwwL2#?h3C)X=QIThaCs0jje*;T}<*HO@g3Q(lJvY-nSlTV} zl`fMf!sj@c)Yus_lXjh-n_6Am4rfDNaT}uo`-rjC>|Pi8E2UmiPMX zz0_~4MHF+wq{Pm`|B!wDqbNX|)SfQ@CNuEwW{hK%?e3V)7Afgy-K$Qv#Rafi4`RdR z);s+3Cj7!sD0~4&VEn`Hd^yf9+$4VY{C$g0*X%9(ffb9-soSR$923m`GP-}&Tm9SU zjy?nM21f!iF!?byAe1esY!RCoCu9|#;Q&us;Gs|T{xTo1O?do)0a{WV(=g-O@7P|J z%(AxqFj@_qVXM;I-@o`Q{~yfn-}y#{%Az`&1K+JTEq|lGt?DVctzXv^4vdI5OKLNu zL~O&OU+(os^X$ixveybb(|&p%>!5r;>p1v!D!G1dy-`HIp=nNsJy~G=r;Q8Vzuez{ zRSp1_17tuIz{m-k%6!??`I-aww{vxc@kQgOgOqdcic0|S5K+3T0l{C9(X=?du~h66 zZ8VFh`ub(9QIba%bKfPo*Z&Y-~zn|gZlT#y<3ANu;Ei-s^TozG^N zzqGFB%Q+jDUfB;x8dZ3IaMr?qMglB--g)b>X^e=CqQ29fYqsgk34XsQb2C1WjL4-# z`H~i{bw!|M!e2U0Zo#zkG_G7}rST_m0vAOr?eK`RnazyqP9zlqT=^>_;Blhw{m++> zntz-OT@2GD-wb)ia=Ew&hgvA@52XqSaHV^@{M@DEcd{k-AX{4^o0;iBvDIBgDV=#r zrU4@$Qz&CTWk(Odjdg#IG>-XHAwHXeW(M&Xsn@&!04)W=&*IVP5+MPl8dO#s_YvOOmtj%e+dz zB>sHA9@UtLny?Yh&Ar|sb1}nLXvj$*h3Bv!73k>GBgH`nnwTw>peW(W8^zjEWy%SG zDCI3K>n$!`9v-9dZ0RI!D?DC@C7%Rz$67Fz68Ut0;>dBOwSj#Q?kiv(03YK8qW@en z&c|)CuC=3Zw4Kdr@(ipPHrVy-=7~{%EWL#lzU3=4Y68Q@cNo3`GLXE(nCK|V zsH)0YahwS%6`FsQp_O5GvA>uk~L?-;H(Lk`% z?s$#ObTy!?d|3o#&GkzY6O2(7T9qPR1STdXPI-_CCl|mw*%%hGF-BkvNh030p|`g_ zad(qvW@cuVwzj4yNw|NFyU#V;Rq$vc{F&^r2O#%|Az3)Qe#SsyQk; zI^I)Qf${doX_2mRTdpLCUm}J$Zm{XPF2#I9X>(|0YdlBsp)js{ro!at?!bTfR>Eid zdm^Xzpkb;|3I0+hAj9(~XA%)CFc5@E#*4|r!$abv@Wl8Al08Z{H|Tf%RT(jPXvmkp z%5N3=hYCWj@9y!nlbL5lyiWUcs~nbFHxj*G_00}foGa%8s2TwIRhe&$jIy@vvwZ_5 ze1j%dQ}po=jS2$!2q*b7m_j+~;eq(*5I#S4vE5K74`HM(c=y6{5ZrUD%n)NxBZC^cy5y0`q-NoRp z1ppi>QDIux>;!$q?4#(s0*W%CwhOA_-Hr$ym|oxL`<_i&T3fH`{PU`Hz8e>9Xwi=! zoNBaYqr^j)|NcleKr|h%xOd5UkS+PXl^i|gQ3@}AqdA^G?bg`p^o5a8u7IbM_ zyo%o(<|(FJ65%6yhJ>uC_{{3lfDvc>)fdwpN+&I_Z*8u=PqP zW8TbwQu%p6#ayJ_Yp;uS>L@wdgaM09%YkI}_2`R@ZoMUS3z0>ojfi84FJHRv%|&Q( zN2)vzESC~a;AaOdsHXY=d9PVk$t3wHCFmg1nl!och00j*@ZVZYjcL+9y%On9H^1fH zal{kBlTeDyI*v{4=yBsb4E*Ju{nh9lWPY}Gv8#UNA*xcnMpuEYcW)B)+>>VynwIa_ zKVy;g@Fn6pyQ7!OeUCxXfv(ZORAUxGiZMdnKI5auDMrYeILq1a@_cwJnIf)J;qTAY zN-73PH1PX$>v5ZLxcqPfYr56sF@@!EgC<|P zy}l)uSqbtKUANTNQ#&>SQjmx~7a3{KHArD=fm{We6AjH<;!)j);_KL|2AYmh~+p1V@HTwmKBd@_&SHdVCeJMU(@A7In}o4b-LvwqtSsN1`WH) zpbi3XNI1bw9tRs_@@N9`;F;Kh5wK>P3_Ujz`8Xu;J-4f2p&?qRiky3h)}EZQbC(H3 zszajc^yb?Ov!9->S9{WzE6aCm_X}s7tU8rwE78lg$^`^p$gSyCnPrdSyxYpJb13Ca zwoHTZY$x^J{&_|jw}}AvqUHKeUeQ8oQji!&vc@)f>{7qG8h@h-o^)AUqKrGn=<~)! zqb8Yj4x?spCdYG%WWYxlrblI=gD}|$Bc+3=8g8go3y?K?&rc~!$NY*3;$Q^{Jq#lZ z1IvD76p76u>OvZplLpBJ-OV)DV)%NU!TfIr#n$d595Vej`OJM;pI9x+z`wxnDrJfFs>@OeXe8#0<)5K?}wpOU4k z`iQxA9|qIOJ6*czps(@@1JX-6mV=*Eq?QJtgxUar2H9&ViFX+x#bGHMM@BIQgmBL< zB!Be*;crm?UciUDcCcEVHDQL)Ntx>K6Y&h&@(ezmt0TS_X@bl&J!x+dQnuf{A_Ag6 zlC!YzKS(uHDz<_N`n*_BskxXP->%i8kg5Lu+LXsn z0pw#yi8u=&IV1=de+6rAJ{Yzy@>bLvvcNRGSZG#r@_TxeDPr;Mk~d_mAkm}R2nR%Z zhUe|xFZAqSw-x0Bqp7!KPCp3_4-HJlZr~2agCeui=d3SMb)A5VjOnVfxM)+4N#ip(W zj(V#TK6qK}2}v3!{PIozrAn#(d&5{-KeCIJU~?qaw_4cTcs-n)DL=V@ohiODj1)bR z5zoAw^U-)bIzvIJd!XWvbl-O&Wphu;eZrIOW1J>3@IpiSiwTEtD^j>2JSUsRi-8|d zBO0$NQ^gLVZz#@RR{HHVH<&m0t@z+?Bq5*ByWZ$l{W{p$z2V9*YpAU{q3jVUjW5u9 zQKwj3)2XW#Sr&Jr%~2t7U{_ikr}^?+{%ikFjkeMB-pxK_%_2G*cV?S<1~m((Tw_&R z1A|~t%;NireEBri=$mNgmrlRU{OQb`e?}!cOdbTh92It1Z2olo0o|J3nut~Atm9LG zRz08wZ-pP_&CQG_J&Dc*f37 z?Yy@jM4iiX?u_F^O58LHyT2TC{&}+kY3*@Svi^{LTaIo^YeoFj|GEvH2cTT zHolHx6aR5OfoqlHw)*xygW2U<)Na()AU}1IhstmMHc>MIYUhdudU4p7HRSg-sEA#s z9ydcYYNXg+?UNSfSc9A6(Y*FNetiu^rOrpKxjHGgRu{#M{1#B50DN3C|F%*Ex(7*& zB>_(Lo4RHv6_DsYpD8CUGFR&TjC>-^ybwaN;*xd-ach#Q-F4K-+A%&q5Be(kDoBHt z{y3%Bky>lNt4FJ$Ahiv^#wZ0fG4I->*qIImY#O<&IA6XWutOIk{?m=I^8tT^xr>4) zM8GE3?}zQn+CR^;jQqYjn&>T&7pKRg233M*6u5^TA|ZeK`DoOesepW2oT=BQ+2*2? z)c{mT@$$!5l8JJwdts?jl6GrCxMM!3IB;F+E%+&ob|J=>3I2U4AAIxre%Z%e!w>7RL7ZwjR$4sn76T_*E16$mpw_ zt2kk=&Hox4AE|{>|E5KR+g1Gf(don_FqAKt!zds5@fZoW_nBQc1uhgYa_ha{o+zM}j~8=BrS-lR7qYlqyt_SCqD0u*&Y|FYLE8 zj-fAV9SWqk7jz+TGZ|=(7Zsipq3Cpjs#qRrl*{H$t9?$= z$swnPto#x9pqZSA)I}plkDn(T_qU<>OG)eE8p`{;2e>jnogn;qpUy81b!(kXlY#P$ zW|(khF$V+;>>j4Ntt48;SeBk=7QRWqYh|`cTgF}-#f)5c*FjQlFlEAP-si^*j3>z$ z8X3~*U|=o=rB;LMd5~B^yQR3ZE`2|Z_L<-!;hU$FG)gCe7+x(jEzGTxc=0sdlyN0E z?-OWu+2RB%Iu4j**B69~`$k{h<;My3rF=CH6!P&`3G^5NW&pJf2}G4acg@^R}!y|?{>9piYYW*7A)k! z>&~GS8Kleg=ZAQ~+m4;Ba@MMY*#(d5^eU7y>t&Big@TL%5$1;Ns*-~o;Wj2DI~2Cn zBE?Q5CDb1qzjOFGrmaC~UuMM^RQw;6)?-w*6V*iBHbH8QR&@UQ)22ZAAp@OC^H56*kCZmxJIg)lgeu}wFq*r^?v_!&9& z$?#t?p$1fve|^I+HYYZr-N;2Uc@D_~WV{1n*WmZLp4U}f3$XcTW4e0K{4l8j1dslYY za4ZIsJN}^U53Of{$uh%ceTzDSUyf;Xxp>~Vsf$4#B|ExG7y6+1;C@r*e^ZCg0CT5) zG_nNniPz9H!S%=-J))Uene-09vzU3iPrY_|5*RSXdAiZSBO4bIORn5CwqnwdpN zVs@X?&WeV8;0KY%yO{fny*+x9(HSz&ga^-kCq+XdOT&;&1lfzAk5-_AC~gl8O+6n& z%)e5Gn%Lk8@{rF6P3@%qC5s-OQWd6pgW@9CRdjLS)S^VT$ez}H7ObcJVBb~542koK zsAf5^RTcdTwvcxaJiQH${mVB)z-pwx(y}tXyRfQ@huKlT&z`~~e8G=h83&PT03)et z0l_~(#o2T;KeJuRtcmIe!ie-V3S+;oBpfJlH?b&yZQBPD;Et%iYB=;TW(_MV>x>V= zUwzCR95_0dJ@a2d@tI+vPh*cCJ`@)GlF+oKA(i}f``pPAi0$@EVb)J{xHb5@e)aC% zH8~IBe~1xyE+n(MRHq&Oi9*w+0w%6y zDi&~M^;%4tFzoo?q9fqFM|lp%gR|>3KJB-oYP@$qWM$0l-aG<42x!a4=5fX*G@(fL z!TqGxJ!2f8-*IMf#TTKsQ$mABicZwL90uWgMHu5-toYl`B*62qX7IvD4iVf^UHvU> z8nS5Wu8GC0A+3}C1=BFVhJn%vvLuIDQ4Pq)lZnL9fX)w%7GGFbwz1Q;Y2S;+EHT6^ zw?w|R~#0@3x@a^y_z# z6YJE{>O1mLHOL~-@erkqsJ|tROCO5E=XZaSkpisv3(fL+;uuy0ViOcsS0oIaj7PxI zdi+#eVow8=Gxmb1l|>l_^IvXOMXAE_q`;vlVK2j3mieDY~)o1PegI+c;fVd zcdpfbq4FokRuTiJHbz4oG0{u#3o{)#5pv-54n$sYbNUB|KmszKV9iG=LRg?v3#bbA z4`1PEgI?U6_gIXIM5JbYR2A?h`a@x(FtH`B-eySqU7MFZpFUGR3bJy(UH~d~CUaCL ze`m_&W^_$ghr#s-Sv`ks<^pVZ>t&-TXIi}ZmPsF{jvE)Q$p|W*Z6dnUS3_?@JM@de zlO0iLzW9aj`TGaU*u@6f(W;0Cyq~O0vdpH8Gkd*1CDdG_p`YA?0X8lf&RHDzeK1Lv z%l3(Op4cIEW!vm<`aEAoB;pXvu>^q5M?)+8tsvfj$Zp)%U2H&6Ig}X(nZS{68_(sT zo$jCC({pL=NmPYobNLf3?Of1#xiw)cFMnXs_k-)7wv`A`Hf>;F`ZY7^R^?^&zc&Z- z)4VD&`@T*wfmvoAuQ~3BK1$*?t?-slsi=YVN~7 zBRAEOc#Exu+7c@AokeIEP?s@UTcu+3*6C-l$+@9=R%ajB!h%$BV)0a5JO4RSv0~)wUnky|?+rvJ9U!d1Tf;hRy^mkvXY z1j<(!0#rEdVHXRLHynF`6-fFWwH@CrpBrFhe075DPm@hJPq_#%4>kCHFB*T_x&ftn z_Vc4Xg)1&=6Zu*F-FJFRb{3xL7n=fo75{(@svzCBZ;eqptf}S}KJ)bBU$VDoPv zj@I}suK8$Vte(S?w_ScLSSB1`m0}d9^O8jAdSG2I&FOVngWQFtGMCf>D86@V9$r~^ z>g2LKbY4_6<<6YGv=bwBrTc$Wy=6d@!TLVDAV|m3je>x5OM}4zihv;9A>G{}Aq^tk zB_Pt>uynVu^wJ0mEZy;6@SNX!-Y@%w<=JOu?z!%|u9+eXr=q|{yd;GgcrkbygmrM* zae1Kf3%xE%-Rdenzu;z@i?HwsXTL`xFK?K0uFT9dLwLE-?2m{)&ab3xf|1i=pTH~7 z?RX5X01)_WfP2Gb61OqMbQ#odGmAFnC!#%OSb$zGjpC+&CYKeE5rryfD3N(KH9cM* z-s>Bhq2>&N??bZ9cHDNIihIOeg=))mzizDcEXSH=_WWrNC^wmVF?735PZUKSBvuqA zcWK#BsQzsu`J9NvuwR96AgFg7p_gh}4 zc=!G)T@lUv)cH83T@9uk$G`m}J$iXnH-EX6>H7!SOYj&VaR7dTMpfYO=$2yX!J%K! zvy0vR5TGpVVHayPzs1)3=Q(_}RKlg5iBmLu7&JKk^ZJkK^G_S?QLAs2NBcYT8L-CH zbulw#ieC*+0e{{y#%h@x-?OxkzgMcj96Zm8;wqVBad!f+le(0!^>hj7_QnZ7!2+m* zm9}K6P{0TAuG7lx$3wI(wUe3G9iw2AFO>Im=J| zEfT})gl=;;%z3c?xuv|u33X>fJyTwV!MM7}iQj^h13cFq{z=e4^y!HkI<3St_A53W zHsiuv8MP18W{b*(0nMZVp5p#^8M~2-MQZP7J%5UCXlw3!=oAiq*ReJEz@TMS!_n!G zfoOTo{(g%n8(fs1e|Ce9>#7U*eoZS-+8H&9q$`zMbZ*`LP$vej4yh5Z%3bggFF57! z5CJaV)FNByI{gdeqfcxFVDLIZCU6RljjuMe)%)`70VtVd{Rk5PWy#{yT3aKeNG{GS zU=w_{OPXJ2hMBq8Mo(KK=9_MC38B=1Ep#lx#6QTNYp(ZhIZy~yCOCM>5$_mh;)IiA zx$Ik6ak9Lw3JFjC@cs2DwI-)Nt@O-EQpl=XOi`hKd3=28s`=;pieOtYu*F%Vx_dmfaX5 zlBhc>1(zloxab-B^vH0qUY<7UB29&0(mpJOL{Fzt6V#kQKcaXMmdA1<4rOj(vn&$g^?cZv(sZOufxrv85py4_?_T# ziB$M!U-VyHJ~8u8V;211$BrosxPF3)tH&l{LDCv#%8LOwxB_Rg^``5~-A(Xz%jlCX zfugVtLDI8?L~@PN3=uRfOsugN5WK!it)Dlk8;&i1w9@0oJ%Eee#!6^QHI;Bf?CnL; zGKm{>(Wr&aX+)tLQ8408 z-%a`F<|h^W1Q4A^u)XjzlE+ZK5-?hhIy2P(u>2;^0OBpVW*OkxkNjGHt&nIqH+CKg zC_>>c@|#x9eS>nAn)BAH$%26bq}=Rybm-I8`q#S?=dbe~zuVzbQ_S`FCo6W2x2MfQ z7dtf&F8JhVxlWgJ8@koF+8Wnt&{l=pi5bElFgV>t-$xeR!z2#RjG_&%#_$gMk4Fvk zM`_&TM~-FcC=WW`;pv}kbyip#bF<{jcb2y*7Ul(Z3}bKqd3JVtGGJ5^ctzQTAa zKJi57ZmVr|^d9bO7?@_7+UNGVo7<8`dy;f!|9&n85KYU69)O11rF9h5d^)Y=cD+}} zdzd0R$U7<;&`axk19scBKk?b+7Crv++3oOh>#!@f*?y%G;-$i(hU=#~ZAX^@X6L70_h8UWI}CVj#Gn5!$X}# z=MsKuG#>b{1a=Te7gyY8U*n{;kdmfpU%1(AbTR4h?s}%t5YdFK-;P3qcJi?yMIG9S@|r>U$5{O=J|6CTaf2z~j( z`H4w1Rg`*Ytu*-Ey^(Td)w>j7MQ z+7dZ`Z--HOQHC{s-|ESgb#7F@wZnS&XRpp+yWT$OZV7+E`_Pu#01RVXyR?4KEY)_z z;sKo*rn=5vfIGKc64NyAV6G4Hnmw)TrgVU*l?8lBFQq^I^L<~;Xak+D zySsaG62B!${>Nm01TDdpOt1g`TrOdQZ*~iDVrn}rM-$Qgp7gz+@5T6iJ ziIyyIB7tLXpM%VXc-5dCfAbC$@j0i&o@N{?%F}jE z)#3#sZoRVwwo+XPOUX2R#CLDe8MsQkA5}O!K%51@9&_9)8E6~Nlg4AlmB#CEc+_&f z)_o0sH~y!ejOEm6E6=xU5Kkg7I@1?d;lrYs`&wj@fEP;I(T(ldPS8H7PDJ9m(31D+ zdw1zlzKK);E25|3M}iqG*W&BAlwV!1PTFtP?le$tjjcG;O;Re*M1{E$219)QtnrP? zJtX;<2O7`8sHmtW>sx2N!^ynC|7;)(MbHHw=~V!$d&ynhbvp6E`bO3{4kYv!;!fmT zX~W(WrCkT%^44E~PF-(Q0c|JXw=gStH(##C`#VEyuU()rDM$BaCBa9^Gw%JiGZt)* zMm$E}3#5$3OOs}39jyfkdyjY>8sXEHfNRbss?Q)F2sGk7M z)>822qZa)+_x56YJXb({+fP z9}}yUB3Qb~wewlb;T-Dm7~3d8IjV%1Tr}|Gp3$5J;oo9$FtzGC(_6n-=FfMBGAQiB z!(>c!H}kTM%ci7vX#36A99}{u*uMu@$}6g=O4GbzkdSp&(h3UO4k^T-xpL zKoQqPzc|@-PwL+@7<4&4n5M_0u&&VJSSBbBrDwH`Mc+yE?a{9!jpwNC@}Zq(a2W62pB9e0EQ2 zi1Hd$+-C!%eL0wE^k?2yKUikCwNW#UJuNsx02(NMz7!N=+ZwgBXxsB0f#-{r8)n6& z-Su^7EBmtdfy}hnppp>fHiTE4JYNd<(JZDG>!n+N%! zo%^ard85_oo`^&cBAuyB8O{$(kv&JgnZXgDvt5^A%Mis-SaKKnCb~!pBOMX&_M@MQ zr@I&#GUfeUQMHGwYsGUB!v@y*KI_6v!xd+f)y>BF77@lm&9p& zhFI(DvbcNGCupm8mSx=ql{ZrRu6oWmVFjaHZ?FGY*R3u3D6C!S-BB1psRDa`Q|unA z8gz!m+YRf5_!mwh;PLvPDDw{QCe!zdX~FK$mg{ycdq$(;sa(o!i9_nw2`^&f{M|@^ zrT3?QEeJ;RgK?Cqwueo>%?ghBJ*}AL?8n;HH;~T|&UF;DHGVuGv6fv_CRJv$c(6RB zwleFv|7QOHh)@YLhs6Z{0zON`=J%4W+c;gSARcH6mxtj!|cSY77y7$+jXMyMVh{iec#n-z>A(xp!DT)X_c!leU7lO6I+<_%Lv;d zHl(H6;@5$rmeKy&1}SKWRsQvAf+v=R<*m;kQ+fgIs zL1I&$kN6!~YM7e-Y!`-`bNkzym^LYqmb&<7F+OEg39-!ci=58%Wr?jtW1I z-QRiIU*4bV)x$=0>|wM%(U6Ulc&yE=@jWj3h~V8feNKL?#LF*v!H;!MO4N&M=)Jg9 zG|h0`w}+w{4ys_9Sa6xV&d=Oi3tuH(??}p263(~dGZjgP?Py6yOZY=HuaJp_+-DRu zzx52Te5Aa3UV1%McFcJwC!6qg5{L~WL%w8c*-EPZ-UHB|vQNDclq$@OX$#p4c6zYM6 zw`52E^kkpCvYALPQAK~JAaiA(^)3Q&3kLx`$gAwOyX;^tH(FLFF~_6dA!7VZ$CYSM z=)2(Mcxlh9^AZ7rj_+d&rHb{k>bS5rtyqHbInKqT+oIZIGNutAN?-XNZMpeIKYm96NR z;F9kZ`2r)4XLrzjP(R$)PmXSw^Zak9*8KrmM4T}B^^)gbj?A*Q3&UmxWU-Sx(!=Fb zNG@bpz-Xo3UY*~Fkp|{MxZjL`yomzDAqdR^HaDlBzb=QiF%lL;VWz`xp-uZ8^oS$L z-7~%YuPT-3bq#ofOL&hpjCt7G(lPCJUcO*8H~u=D1}5OfC@FfOl<-MFpHk-hzlPyRVCL;NHkyUk(a*eBg@-j>rcVk%i0JHr&!L*Y5^2@k;W zYBKKkOu9Z7Zz4Rb0U1qO91E_O#)wUDZMVL$O3qxiMeBhc&iD~L7%l35UD}9A+kAlB z(|lWNK3#n4e=Ow{6+dZ`1>JL9ZkNytjd}8PHFrzzHC)T42do?Y%=Mzc?Y1Jr4e_{g zVN>DF=u4`W(zd4x&TT-3&y3mQ8a6&&GRkTi!wswhRhxqUDIKHG`%_G}L7g}{-(@>e z?qsP26F%!`R8}J9ZXLCr{$+yLLIv$q3cse!}Gxg8ka=7(Y z7o|N{YOeQtQ}NEhexC4dB4%i$Y=ZuLnBmaX!MkQRXv<&U-gFb96$q#jQCURd{e8?) zfHnCIw_A_K3($$y90q)Xw!B}OxOOIcZ}!y0ou-R2}|u2KTKbpPUSf-ffGZ{QQ97= zAYEmiT-GFVL@sbyxd<>nWsFrm)^i7Yx#qR;w-YO2vrglG2R4B2WbJsqdE z&T`U*H%KLKaHwJT{BJa&JTIiOEuTW%UH*Jm6x+LzHluZqM3i&ma^lJPiZS!#cv-7| zV_tZL{UuLC0uSx^$g^U0?I@vKDZ|&JG=DjjZaSWvuc6*5KuEv4ZET?pr@e{=g=<*u~e61)WfR12oNJ+RbbbzdwG)n8{DaF`QMq zUsvYFFdg=j$oCKxQz|OZa!%PxOFe|7K{vKD)EX3Ix3QV^DbRJe+8hCOc>6b^RyrCH zn>!X(341A_Y>D2CZRZ>ryFP?Vuz57BHnM;Y488W}u(~piHvtP;v3-k>%KP8%V?S}( zunpuZNKZ94s5iL*T@p&#eP&w=%K^kkL$J*esdwg~%9^pA!%32l^u&yL5~6Pj@;);eIkr3SeIVa;j5E5e zWKgg3!Z_L(C@u3Tk2MDD)Js^VF|t+KgTf#R{$Pl9!ze2AMhc)^&yp zuqTLq3@}A9FvS^Vi-l9uiO3+D|8*iqs^s!S?~YPku*L78OXmaDOtD{y1Gb;Ggh-HZ z^Sc%I51okhiRV6{AybY1SPp4&2D7oQlj{hNC7Nutpvx>?^8YN={5gWGgongTS`zTI zu#CjkG8xsfXr<^(zfD_B+REnp^$e5o)U)xI8-J_@7A${iBBrS=Emv_}^O_!QBZQ9T?V_W}98)r~O*{{EE5-)0BqgAij(e)mKV zsoyc{Vew!;6K!EB9ColdAKE69I8Y&qAP@3pnPjP{EQ4nByfoW9IZcTuFd;rwZ}V>c zP&zdVG1eLU2>-%Qj2rqZXm7XdEIaZGj-N9lhF!A`iQw%TsBehS%6R>q%U|@#H=%yg zu(zqjo_W|cL+P8I^-|aNO~WA*Us+-{SmF%@QijsTY(AT8J4_wn4)FVP6nULWM}CKJ z$nr+Ub~a-@XZID#jE|rGI#o>jw)iq}QASzyIfs8K0hQw;#r=~X^S@xIADPPDbW~s- z!LzhJV?(AQ{2CUzPWGO#eM-oZo`oe|-g15Q1De;!l-Xe%y?Wl!7xpKWR`#XbhD1fx zBL+|HD>pc-q;g3#9ExUsFRSX?zUOY$t;81z#~NFGS+%bHf+bFT#1b?^wZ#|k29z?s>Y6q$~x{8Pcr+AaYD>4({12LtyC*nuvMCB-da z<*CfMo+#w23cbZo<62TaZ#- zqg|fP>zXLnMGLQ^m{~pUIjBR?4-S$Fu1gpK947X%Rrz!SZ>W zW!UPs@~k77XFB7tRmOXWJ9{DS>}TqriDUy_!^%OvDHQ|US;w87*Xl9FyLBe@2r$M{ zhybL9A@~NtFL;ta+s^xdD~ipi#Tsfbs)eF4%ld4_Rw^acQ{Rc`m=w-CrH7UGcUZ=n z5C5E>J;{QY@4Oz=gFV+ztSY2s*JJi2p8pk>%^zGgP(0aZ`*wicfM>^ny+EZ+u}Qa@ zx%uvIR`!q5^Vqwu46DLv*yWSx2fx#_d4q_4*#Fy25BB4*k6zB8&a6QJu^<(OT75)$ z{yZiOg#Q~FJYmjTu7NT`(6MXhia)ndW38V2cJIE>Tev2=;Pd*lIVbf&D0W?+N2Zs} zH2kVzz?|+=$*TD7 zg5|(P6#vI!^Z&6krQ*w9fF&o$5=y7pa!ms0nThp*Uxt5xa?$rnq_^XeXGBd~r|=+_ z7z)Beu6rV$`lyVjv1+>00UKJJnsJlx3C;Qp?oQKQg-z3qNWCr^1aT~lFwxOK z6r9&F4Z?CS(+I6(Z%@AaJ10GpM{XSrT>g=Eqlz?5>!GBRfg-f#1e5o)!ap4z!ZKZXW*fIA4@#StU}-_T1Crb8lKlK{HSZrh?R&&XPz96w_<~d$ zEa<_7waD6x$j#1Y$T6a%KjgQB$eE?*{rWg0y@o3nt}<90^^YT{lt;DfPLQo!|EPj^ z$=yX(&8Sge^Ug5E7y-(8NxuM&B536q(zMA~sN+v@0uD=X&3E(oEIDYpiZuP^335hoVVoHLrvVGh zlo7uC)YnW(?`6N^;p@lXCFWWS^0VLqqn<=Ns!&}CE^Z}73yGg6eF)CwU$zUm7}#=( zOEfwj(s*EOCZVWXzTmj0Ot5_u`u%oIa-v#=6sc4z`sikM#saGx_f=l5MehPJ-8ZJ+ zyLh=&BEp;HrLKX!^(R6qSLr4PC4P&U3)oqzg#kq>>Q4;KGtKI-;vG$M1trvU56YF_ zW4lnIu{?6*9s#5lt33WTEEU^!0Kt4lv|U8-^{tU_PpQ(M_A^f?K380#*zeSKAu3o+ z3IH+n_EggCvyfhXkPfPG(uA%>@f43He;q(Qj(YFMe@{6`ppP?*%v6a|PX`?U1XuEa zlN*JG5V2CFVET?$2LEnFWlPHGshZ{yB^P~gBK>X&qK6a8LcH8e<=*~Ii9zvmErgU~mYWb07EZV3SKy+|U?Xm2`RYQ}E~xgd zn`OO*ZgmUFret<+t{0@Gd9S#k+}XF)oATU zfe-kc6(2%+%x1ZS z;LXPa5AF-0>SG4mUnX)TFMly%`FYX|Rs=!=aXWqndqm~nWWdPcWmIQ@IVJC1y`QPf-l37@L){1t`30ty5N;vA-$Xu0vJdBAgC!W8smIG)oZNFMX}OF0kvA z<8o#dw~p{n0ZQMMQr_PRef=Lyqeo6F=KVFK%$(E}{}yypR;BXD9ElQ2Fj9DZF%P=($d4}c!cA?>FVX1z-lw*=n`~$PwEj+A z>T5#ddq%lf(_s|Lq}{TpIcgwM=^~&G{h%&9k$&IqIYUn3M1w5|`5jZas4)Be2U!`d zW@E-;wvxEdDzMtMtEeQ0GOpoP6$gGpn<9+*vw$emtG6OUcqq=7j-OIeS>cZ8A>Tm$ zxvI2o|Ks+~u3I*FeJVy zGjQnVypPGtrNVa`W!BKov%C8%BkF`^e%f`2;ixG0jfhUAQ?mPaenKkV)91!3_!zHd z?FFW{MnUHC8JBN*KL!y+QyaTvJirS=-T8ocG015ju*>00uxBt~k=jL9)3ejGbnSv;8Jb~n`2t{Z zREJfW-Lt~awEZnRJm#Dbg;b2uw1$H{F)5@dEk{1BT&FtXWomxdN>Y3@wQPcxT$YZ5 zcXV8`7JPpE(lPy)gEB_^QAm8e)`Z3imva&yJRJ56?q9ShvM#!OyK_O7=o}HF=W61! zQ=WVcVJ5J8UvVdh@9gnOj1`a7bRE!Mj>xX*4CI(W4>YYuO+b~FU#!cqY3#AwEOMF! zqNeLcRiTa&YKQ;zn+MU>rr~W)HytTW7d0I}8qVnRTG}$BCfEG4L*-Qc9EI_>}*bs$#9`;lKPdZg1mvW694j4wpvExZ?!ZM zFMr%ZYykmM1F5UL_=lsd6!E?Oq^Vx9_y3wuF$bNrcjce%eYDE;kt|~$Dw+ZLZz`Qw zWc^~P(e3D>%(PJi2?%25Bl9K;497|Jvb+YA>lx*Q-f&;OpmuayiL?8d;g2bDQe~th z%$RG~Az9BTFSQZ3ZKn`-+pEA+aS=OO&S?9}>l7h<5C$Z(o6p?~q|nrbNE7RDZ#_4gL6tiv0rDC=xi7$sT13t;VUV@?I zXqNs9FlaF(uEwJsPT+MIgpB2{9tfzsGJYlFwuHhz?GPmtg5m%U5UBa>Az4R7Il3Ck zO2X~0BK0SbAD~|>>fcg2Hqs^A-_)k>7)9O8SVYoAB72&bRpnY-68w>IFV<2FnM2m7 zQ*Pzd!i?^MsHmV{-}b&jS7i|+R>FMF%TzusM|Eh1a_#C9-pJ2zz@~>{n=RRntX!rZ zl495poRi1Y5>b@E3F>ZcND@18{CK60t~!$P)q*+ILZeN!7D996CG8qLMF9%>HSyi! zm$u?F*#=q-)eq@ziR|w-j^4U4yi!%6C&Q$F33q*s<|&&ei1NrecyyO%SmoBu%tfKr zlt>A1ZV@c1NNHfSG=4M+{^_3dmwRzZFPxC8)RA=b>hNOgm;|Z7RLY+pDTcQ~d=k+4 z1?VVF!aIBHlyk9DO|~%#Q-1beeX~Y-MZjiA6$-+~LR;5#xb10i@GeZu*E#YoSb&I! z_QdMS1MhwQ_%`9lZfzP&B#kPnZSzQ^B~>17-|k8vL97$bc~~{Sq-#$Gww4V$=nW5t z@a;?2zuBiJlN6*0)`QYCi;fT={Sa-}qjtGerzztra$3T&a_U{1 zIpG*%9i#p^sk~-@L7ws^f#U3&JdPy}g5Ua-ghXS`Wil4g_h}a#q4pmYp!Wpc#(gN zRG>uV5caT8rs6CLP`Mu_W&-QTAd zCI0&d2e0va1e3oNaZy3J**G12%l0$GTwNqW`!~>_71wN*PO$0W8(RJiMDUKpxPF0{ zTd4QBPVB!51j5tOEO026`MTcym6rIh^LJdDt_@moMf>@2t{zt8aWp6r@#<+KPoa*Z zV%Aa>HnedF9Xw*v9^#URXfO(Qn)q&HB~nW6k^vz>!FUt^Af7$0eUbh|8u5M3_i3X! zbpP`wL`0blh+UInVHMW2yoH%%<_hi^>}Bk%ADo!RYg6+Y9eBc5rsr)sbGpN0WEkas z!q3b~T`#1mcP{89cprZC@u#_jR*q8RK-zQ$rk{o>UVIEuPPvavmU+%G?|iSk`H67T zvq{DTgf>43+2;Ea94M(Br640|gdv&3eG%~73fh2G1KZ)UxshzX*?G;T+enmJXVpHk z==r7XqJ7ko&biCrRyK)8CdIcTI zznzk+5wN)feJLyV3Lg*;J)4H8y5R9DX+X?rxrvt~kt-w#V(PUu)&+XkktP zEtSnw7uSqg(i8uCAD;W(Ll3rC8|egG8NFH=fg9zsw1v~ht}clC*K6=2noXuP&f|DA z4$9LPtrM^0^RAVo8Fn3buGO*rMf3#t+|>8f$w}GsSwiiWQyZStnsQJ*0S0=S7d)3=!s-n%QnB zfnDvI^yYGKY$PIFr}nl?i$QVm zy|S@&nMK`*WoE%daT)ZpQE)$!wjG2^w%_h#?pP=onig_v+RaK3M~+utF@m0W((*5&MH-&jgsvVIYp2sP4p)6+Z6h) z-qb4!k(j5__>ZWL*fvvGmn~mPPKw8` zf#^Cwbl|2KnOCxb!_k;j82@8m)r8CSi@sCAaWdMDv7{ok98zoh#vzxgh~n)@{Il6+ zii47vm#`PYO9?+@YKz~{ee!VVEF0u6S>dcoJlhIjTdRyfg*^KWeECi^3pP0H_~KTH z1c^Cu`Gcfa_e_lrs#^p40mm`@Tb^!{$HN)^vpin`b=Jt%k$&;jAaykNIW)b`HRuOQ zd~oL1IS8;e&O<+70nQSdoEp1S`^bNp zu89n!KFpG82q~3(y$&fGRb+W?41Afef!XE7T7I1hnrYNP5v=HqE1LS5_HbIve_Ubg zXEyM5gXQEAYf*Jg=_OUd44$45d#$bRxBSH*x;8p5_9Bp>EPMNDBCWBqjG+9RK4*|F z9{FAEpmG*+p+4%5H^E*b!ih3mHw*-<#%=L3eOoQ_i3anVhRhvO$4>(If0037{m-xM zf;En57_2TM=VQj)t#0YSunHqbpjVUH^Ssr>{`D}jFqEA}dYtNdK;|`3pmtriJ<&>B zj@|qEjl0FOTM-7y@7{R?MPJfi;c#{@S)SJQ2n4l!=F!VT>_z=H zJ%Gz{tYekZlAOyttCn45pmnv@0{?yba6hyI&y9h%$2bbsD|-`BC4tsDM&VN9N$sb+OoVp zE{&H7J<&wgHbEit0j~O8_jSN4P$txjrH#>6hA|c9&E5x}zg+!`sva#@^Rv5UKs@s{ zz|S{Qbe`hH`tg!AXr{ITg_(HyOHPgGLvr(f`&h|uYNT?rP%e+&SRr^lpsa9YD1E-! z5><)uSj*%zlAmW+m?ehq$W3N;*rL&@bWL~wM%^ZJDO!STRXJmG9qh+16AI|nn%0L4 zfM!}7P(lRWSM)rN=D$dh2w)OMC_57XoYIr_g!-;c*fuVz5O2h_63Dx@#LMcGNK3X@ zc47Z&SC2;~IP7EEnXcqK$cFxFOjYmwbj|=u)Is47-+PoEB0ff*BGqm{LX1F7LSNHe z`ox77ze_arpA_0M{-cckifz)d)Fgz0xDo)1 z`@kIEn}u!*W`>r?>?r+&NP1j72abNJnokK3V9yXwB;GzA*ovc0KJ`&ZwJxEXKNI=K zQbbH9V!X&+Z?6CaH#R^WQbRdngt01v!zHT-?Lz~t6v7bwT^oBDV#63cAoQn+?~_`$ z-{65(3iELljaM*SIxw@APwe)sQxlElf3$9o2?XK@E%8$1VjfD;(1=SGptZ~3M7VmD z^xL0m#scc>bi4f7*S`S;l0JlVS)q(-2q90*qLsnkvZr+K_IU)+KTg2E$wKIBrTuDz z92r&-WX~HIzHKQ9lIluHyt4{jPvx*Jdn{dxeauMxs5M48)RLzo*<=Vom5}wH|Kc$Z z4QOFEHw_Z`Vf;T190TqGc&k5w_hGtVJ1vdyAPPb*oguRvWLN{&I3@uNscIPX#zo=Dp zt5hoFh0gd0?9>shrlz=?&9!#?Sba6gXD+yBXPm)1^#}p~Nh-1du5sLQ3W{<20jz_Y z=|u;3mM!*sd2Lc7T`TB(R&T2}EW40XKebJM-N5SA-~9Pp9hM#(X-R5yV#>MFpRss2 z)mNv;buSxn^;bwxOtMXdXtpk*uG*O-}dJzwVnS|fifQH&M5}ZRWARUn9j#gXQv1-WIDNyXea(W`- z{)D^0Zud3CN+;pg3nzefk;$`FE!K%`vGpaT{|7y7iX|3 zbpCL_C{3tV**&q8*G02eS!XRy(WiQSo}+>Y$)zrXi{;Zhx1DS)Nx$Id3ontaHmOw2 zUFXR4wEQD)RMl_8XVD&8aQ}g^g=~Q3rhpiv6mhr>;;Kyo?A?37e#j8DS z@Xos2YvQ(EYRE0nG2h4klMw^K-43FAC$8nsn+;w3SDgG0XxO0{2zbl?ReqPEQB&34 zE@sK)b--JHhS%10!YT1qA1*AJ@`?=U&cq1Vda+B~Oy{4*YyMKo=YkZm14-TTA$u=5 zhkE~Tii6Vybp1p1u%%`PyhNdJgOg@BV+8pf31c)h3o;we&0p%5nxd#xrntT7i=6G{ z*_?(eyPWpt!-=ceB4zFM1_9hw2dsZxF5z~Id2Kzr%n5)3WPX!RC2^zHrk?X?|381R zkPH~)F&M2$-A79^b1^bsvRiQ2fFE9X*Jau5yIK9#jKWz0CEZOmxm}D% z&*?0lAHf_)K2&~80}Onmiyt-J6lj_##cdL4zPu9h%(xi$T_9z`bCyyVY^=Xe^(7V1 z@dRNm({}YWP;b|qt*gb3)Cmt5x%PZfi{Ws_)CVA8`vIf?zD{im9Vf0nFkbnf5x838 z+RRd9g;)QgedknScMfG)nC<=KYW)_iZ74{ukq&gof4IsU{qwt3sOyrKu+8nj)|xc4 z;VAVyaI{350;{ZrEkpD0HJbu=)3Re5p|8&{ZFdV)o9cYg+w!KgcT|&Fbk4nQ_fdi~HP17=4d36)3y}2I?W@Px zkakbN7icW?G=WTKwo!+xr8761zlp$VJ$STtTV#R_yczdp(nc$p>>=?IUeENVT6T`0 z(IU3@Ft@!tCc|M?h3?->G#@Lj%PM^Kst&8R5_%&cIux?BH&Sd`4z}8@%jc`{TdG|% z;FZ6NRs5==P6}*yN0~i4TR!+kTS^xRt{HgC6UsLuWJuW0{E+a$=*tQMv*tZbIhqTk zPnd+)UY|G4RGj)6y24rpQ={)UleXi(_g zbZo6|Gtovs^mNGupl;4Lw@{7$Hdq}!3v2EF{eREpJSr3e)E6n)3 zMs%Uh9LryMa|uPf*p zXIaw=-HXGCnZ*`y8u#U>`nw(3)lEuq+HjjjMw@z*H(pz%-Q$yYQpMh zO-z{cy5UXmdWO5z9f^>#`{52gy(r83^&j;sSiVWN0es@$k?SXT*XY!#Nu%}uzsV#7 zM-s)JBF?9&6UkLw0MGE1#61lGdd}-b zPDyyba3R%=o=6^ zDFTq80&ra~Acvq;VSRB1)g{7qFHPf@S=zrV#R;z3` z!}UT;_b~QRg0YUtxL7?FynlYs|&H!DmwU zhY5ntZnAOmHN7+7sH9)J5m$B!J{6^N`dS`hvk7v0vDbGbCfcZt?*LEG^#Lec$ZjM^ z+8pboy_+B-vPhDEd3dm(c&3V)RRrmME_@_Gl-xw+LtLfO(jhfFKs zLs&HUT=UIFa$bogpq}adkaQTuFDg>b#rm|-i!piXK9>uFW}lr1 zR|4eWtU(8t=p2Zj{)amE!boZUjxQH!x2={EnCd*1n$^tv z&M20Vp+;>sXj}Dq#8g@5eb?GI>7 zi4us3(qpgtdG8|YK^+UX7WSX#6lKu-&!~@i{V19JC@=TEoXbO#lYn5#6r{A?73G`S zVPU`AA95t^*381G1=Io`hE-Oi@-B52c3xYC&DM%WS!&$intV-p%a3YaqHQK+TVd_t zyJ8|pdek4q>m6aJbzHBpo9{O)Uo@f`3fm}kiWnj4(9k#SHM^C$@$mQXgtSWA(HYGryHHXN&FV?$%Q!!k*|buaE| zwKEgHFX~kVr`_@u@Q&zbCg!-=hYzv7H60y}N{j-=V?C+oCI-jv+3)=QCg^d{a`J{` zGJ^j}{c}Gg6fOXAk`MuSiZ5~-P+9=6`GU0YvR9u5oT>z9ODu~sVXfo#&iO)*u7z7=&D(fm|=XfV~_my%a^S0T6h~^rW8SKTo>^f@vjfX~0@XlR=c9fuh9V zDk0Ry1tFsv*Sn$Krw3!4PwoECJkz1Z8f5PO$eLvWfJt{WLGS+ikv%`{v}@u z$i!P-`K4xwO!oR=V979~1+%!E8HpOagM?ouD5JF42s*t7=MR1)DBK&)J!_Vro;*WRxL81~Y2_`+aR# zY2JAC+{Z+JSN0TXtwRq7Y6X)^00^V`bM+Y|Iv>3>f3$+}zc$r`oc3rYGj&WJcvc~k zEtEM9HkQ~0mb_PJ-(e`ZKpT(-50{h4l1uuPZj+_q)=^F8~wyKP)=t+n)U z;Oc2XfBKfM{29*+Ng&#SH6K+^Rqf-FF`OkQcWS#!mz(C_m|1(~tJyglf1M{i_1TmC z=k2-=K65GjRQGMp#FO<7D_j@n{S=32S8uctJ$dtr+VVWTA2wOyKXY328yMJta*%Ao rfQVb%C@?%-{an^LB{Ts58|$8v diff --git a/codelabs/keyboard_navigation/block_terms.png b/codelabs/keyboard_navigation/block_terms.png deleted file mode 100644 index 789a3dce15566169168769e307a5ff5b3c6ea4a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277551 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�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%0AWmip01$mPw`P=t!m_u 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 z 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�LTLK*k?pX?7aIbg4>hFG-Tzl5up7_)Z- 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 |^+Ys)IG$_)v4DIKTbnRJgyQ}Yl)HCC4V+@R6B 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 VC+Ei-{f8Jpz|+;wWt~$(697`AKsf*a diff --git a/codelabs/keyboard_navigation/flashing_cursor.gif b/codelabs/keyboard_navigation/flashing_cursor.gif deleted file mode 100644 index a6db40a29ea9cbc3d4a5fc7e0c321444cbf00534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359984 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 z 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 z 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

~sWabzxxZO%Hb>3!LGaF` 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 diff --git a/codelabs/keyboard_navigation/skip_to_top.gif b/codelabs/keyboard_navigation/skip_to_top.gif deleted file mode 100644 index 2da398380a5f6eae9e430cb6053889afed1b2576..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113042 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 z 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 From c75ead22d69f639e98016786b71dc1c224d9b866 Mon Sep 17 00:00:00 2001 From: Ben Henning Date: Wed, 7 May 2025 04:07:16 -0700 Subject: [PATCH 28/31] fix: Fix auto-assignment workflow. (#2505) --- .github/workflows/assign_reviewers.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/assign_reviewers.yml b/.github/workflows/assign_reviewers.yml index 042f1553e..850c7c805 100644 --- a/.github/workflows/assign_reviewers.yml +++ b/.github/workflows/assign_reviewers.yml @@ -15,9 +15,11 @@ on: jobs: requested-reviewer: runs-on: ubuntu-latest + permissions: + pull-requests: write steps: - name: Assign requested reviewer - uses: actions/github-script@v5 + uses: actions/github-script@v7 with: script: | try { From f5a577b8fe25b6fbf1502ca85902c22777fd8270 Mon Sep 17 00:00:00 2001 From: Aaron Dodson Date: Wed, 7 May 2025 12:32:08 -0700 Subject: [PATCH 29/31] fix: Add `getClass()` to `FieldColour`. (#2506) --- plugins/field-colour/src/field_colour.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plugins/field-colour/src/field_colour.ts b/plugins/field-colour/src/field_colour.ts index 7c184d193..1fb72115c 100644 --- a/plugins/field-colour/src/field_colour.ts +++ b/plugins/field-colour/src/field_colour.ts @@ -731,6 +731,15 @@ export class FieldColour extends Blockly.Field { // the static fromJson method. return new this(options.colour, undefined, options); } + + /** + * Returns the class of this field. + * + * @returns FieldColour. + */ + getClass() { + return FieldColour; + } } /** The default value for this field. */ From faec563b408f102005fc7bcc06bcc325ad9213d9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 May 2025 17:15:06 +0000 Subject: [PATCH 30/31] Publish - @blockly/field-colour@5.0.17 - @blockly/field-colour-hsv-sliders@5.0.17 --- plugins/field-colour-hsv-sliders/CHANGELOG.md | 8 ++++++++ plugins/field-colour-hsv-sliders/package-lock.json | 4 ++-- plugins/field-colour-hsv-sliders/package.json | 4 ++-- plugins/field-colour/CHANGELOG.md | 11 +++++++++++ plugins/field-colour/package-lock.json | 4 ++-- plugins/field-colour/package.json | 2 +- 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/plugins/field-colour-hsv-sliders/CHANGELOG.md b/plugins/field-colour-hsv-sliders/CHANGELOG.md index 83ea24bad..ae1ce742a 100644 --- a/plugins/field-colour-hsv-sliders/CHANGELOG.md +++ b/plugins/field-colour-hsv-sliders/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.17](https://github.com/google/blockly-samples/compare/@blockly/field-colour-hsv-sliders@5.0.16...@blockly/field-colour-hsv-sliders@5.0.17) (2025-05-08) + +**Note:** Version bump only for package @blockly/field-colour-hsv-sliders + + + + + ## [5.0.16](https://github.com/google/blockly-samples/compare/@blockly/field-colour-hsv-sliders@5.0.15...@blockly/field-colour-hsv-sliders@5.0.16) (2025-03-27) **Note:** Version bump only for package @blockly/field-colour-hsv-sliders diff --git a/plugins/field-colour-hsv-sliders/package-lock.json b/plugins/field-colour-hsv-sliders/package-lock.json index c1fb7989d..ec5a03693 100644 --- a/plugins/field-colour-hsv-sliders/package-lock.json +++ b/plugins/field-colour-hsv-sliders/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.16", + "version": "5.0.17", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.16", + "version": "5.0.17", "license": "Apache-2.0", "devDependencies": { "typescript": "^5.4.5" diff --git a/plugins/field-colour-hsv-sliders/package.json b/plugins/field-colour-hsv-sliders/package.json index 67c660347..ddb261481 100644 --- a/plugins/field-colour-hsv-sliders/package.json +++ b/plugins/field-colour-hsv-sliders/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-colour-hsv-sliders", - "version": "5.0.16", + "version": "5.0.17", "description": "A Blockly colour field using HSV sliders.", "scripts": { "audit:fix": "blockly-scripts auditFix", @@ -41,7 +41,7 @@ "src" ], "dependencies": { - "@blockly/field-colour": "^5.0.16" + "@blockly/field-colour": "^5.0.17" }, "devDependencies": { "@blockly/dev-scripts": "^4.0.7", diff --git a/plugins/field-colour/CHANGELOG.md b/plugins/field-colour/CHANGELOG.md index 8aa6400f0..e932b64a7 100644 --- a/plugins/field-colour/CHANGELOG.md +++ b/plugins/field-colour/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [5.0.17](https://github.com/google/blockly-samples/compare/@blockly/field-colour@5.0.16...@blockly/field-colour@5.0.17) (2025-05-08) + + +### Bug Fixes + +* Add `getClass()` to `FieldColour`. ([#2506](https://github.com/google/blockly-samples/issues/2506)) ([f5a577b](https://github.com/google/blockly-samples/commit/f5a577b8fe25b6fbf1502ca85902c22777fd8270)) + + + + + ## [5.0.16](https://github.com/google/blockly-samples/compare/@blockly/field-colour@5.0.15...@blockly/field-colour@5.0.16) (2025-03-27) diff --git a/plugins/field-colour/package-lock.json b/plugins/field-colour/package-lock.json index a7ab28e8e..29292421d 100644 --- a/plugins/field-colour/package-lock.json +++ b/plugins/field-colour/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockly/field-colour", - "version": "5.0.16", + "version": "5.0.17", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@blockly/field-colour", - "version": "5.0.16", + "version": "5.0.17", "license": "Apache-2.0", "devDependencies": { "@typescript-eslint/parser": "^5.59.5", diff --git a/plugins/field-colour/package.json b/plugins/field-colour/package.json index 8d6ecab45..e6c02aed0 100644 --- a/plugins/field-colour/package.json +++ b/plugins/field-colour/package.json @@ -1,6 +1,6 @@ { "name": "@blockly/field-colour", - "version": "5.0.16", + "version": "5.0.17", "description": "A Blockly colour field.", "scripts": { "audit:fix": "blockly-scripts auditFix", From 04abb7bb050c8206aa35c0bfb32ea8889bab9e85 Mon Sep 17 00:00:00 2001 From: Christopher Allen Date: Thu, 8 May 2025 23:23:10 +0100 Subject: [PATCH 31/31] fix!: Delete old keyboard-navigation plugin (#2508) This depends on things that no longer exist in blockly@v12.0.0-beta.4, like BasicCursor and Cursor, and also on other things that will cease to exist before 12.0.0, like ASTNode. We need to update the samples repository to be able to test plugins with v12, and this plugin is soon to be replaced by the new plugin being developed in google/blockly-keyboard-experimentation, so the most expedient course of action is just to delete this one to allow upgrading this repo's blockly devDependency. BREAKING CHANGE: Removes the keyboard-experimentation plugin, obviously. Conflicts: plugins/keyboard-navigation/CHANGELOG.md plugins/keyboard-navigation/package-lock.json plugins/keyboard-navigation/package.json plugins/keyboard-navigation/src/navigation.js plugins/keyboard-navigation/src/navigation_controller.js plugins/keyboard-navigation/test/navigation_test.mocha.js --- gh-pages/_index.html | 8 +- plugins/keyboard-navigation/CHANGELOG.md | 582 ---- plugins/keyboard-navigation/GETSTARTED.md | 24 - plugins/keyboard-navigation/README.md | 52 - plugins/keyboard-navigation/package-lock.json | 3070 ----------------- plugins/keyboard-navigation/package.json | 60 - plugins/keyboard-navigation/src/constants.js | 63 - .../keyboard-navigation/src/flyout_cursor.js | 93 - .../src/gesture_monkey_patch.js | 59 - plugins/keyboard-navigation/src/index.js | 25 - .../keyboard-navigation/src/line_cursor.js | 190 - plugins/keyboard-navigation/src/navigation.js | 1287 ------- .../src/navigation_controller.js | 1020 ------ plugins/keyboard-navigation/test/index.html | 53 - plugins/keyboard-navigation/test/index.js | 83 - .../test/navigation_modify_test.mocha.js | 691 ---- .../test/navigation_test.mocha.js | 1365 -------- .../test/shortcuts_test.mocha.js | 531 --- .../keyboard-navigation/test/test_helper.js | 89 - plugins/keyboard-navigation/test/toolbox.js | 218 -- 20 files changed, 7 insertions(+), 9556 deletions(-) delete mode 100644 plugins/keyboard-navigation/CHANGELOG.md delete mode 100644 plugins/keyboard-navigation/GETSTARTED.md delete mode 100644 plugins/keyboard-navigation/README.md delete mode 100644 plugins/keyboard-navigation/package-lock.json delete mode 100644 plugins/keyboard-navigation/package.json delete mode 100644 plugins/keyboard-navigation/src/constants.js delete mode 100644 plugins/keyboard-navigation/src/flyout_cursor.js delete mode 100644 plugins/keyboard-navigation/src/gesture_monkey_patch.js delete mode 100644 plugins/keyboard-navigation/src/index.js delete mode 100644 plugins/keyboard-navigation/src/line_cursor.js delete mode 100644 plugins/keyboard-navigation/src/navigation.js delete mode 100644 plugins/keyboard-navigation/src/navigation_controller.js delete mode 100644 plugins/keyboard-navigation/test/index.html delete mode 100644 plugins/keyboard-navigation/test/index.js delete mode 100644 plugins/keyboard-navigation/test/navigation_modify_test.mocha.js delete mode 100644 plugins/keyboard-navigation/test/navigation_test.mocha.js delete mode 100644 plugins/keyboard-navigation/test/shortcuts_test.mocha.js delete mode 100644 plugins/keyboard-navigation/test/test_helper.js delete mode 100644 plugins/keyboard-navigation/test/toolbox.js diff --git a/gh-pages/_index.html b/gh-pages/_index.html index eb8d2e97f..ac2486fc2 100644 --- a/gh-pages/_index.html +++ b/gh-pages/_index.html @@ -286,7 +286,7 @@

- + @@ -297,6 +297,12 @@

A plugin that allows users to manipulate and connect blocks using a keyboard-driven cursor.

+

+ This plugin (and its demo) is temporarily unavailable while we + develop an new and improved version; you can follow along with + our work in the blockly-keyboard-experimentation + GitHub repository. +

diff --git a/plugins/keyboard-navigation/CHANGELOG.md b/plugins/keyboard-navigation/CHANGELOG.md deleted file mode 100644 index 805ed4315..000000000 --- a/plugins/keyboard-navigation/CHANGELOG.md +++ /dev/null @@ -1,582 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## [0.6.14](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.13...@blockly/keyboard-navigation@0.6.14) (2025-02-13) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.6.13](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.12...@blockly/keyboard-navigation@0.6.13) (2024-12-19) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.6.12](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.11...@blockly/keyboard-navigation@0.6.12) (2024-12-03) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.6.11](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.10...@blockly/keyboard-navigation@0.6.11) (2024-11-07) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.6.10](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.9...@blockly/keyboard-navigation@0.6.10) (2024-09-26) - - -### Bug Fixes - -* **field-*:** Remove unneeded `fieldRegistry.unregister` calls ([#2454](https://github.com/google/blockly-samples/issues/2454)) ([b3ba30e](https://github.com/google/blockly-samples/commit/b3ba30e23dddf0bd98c266659aa229ba6ba685b0)), closes [#2453](https://github.com/google/blockly-samples/issues/2453) - - - - - -## [0.6.9](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.8...@blockly/keyboard-navigation@0.6.9) (2024-08-29) - - -### Bug Fixes - -* predeploy plugins ([#2449](https://github.com/google/blockly-samples/issues/2449)) ([6b36d8b](https://github.com/google/blockly-samples/commit/6b36d8b344a969f79d89bbc7dcee29ae554759f9)) - - - - - -## [0.6.8](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.7...@blockly/keyboard-navigation@0.6.8) (2024-08-22) - - -### Bug Fixes - -* lerna v8 breaking our whole shebangle ([#2446](https://github.com/google/blockly-samples/issues/2446)) ([b8b4c21](https://github.com/google/blockly-samples/commit/b8b4c21d4eaf81f527336ae46f6679ff99ac23c3)) - - - - - -## [0.6.7](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.6...@blockly/keyboard-navigation@0.6.7) (2024-08-08) - - -### Bug Fixes - -* **keyboard-navigation:** remove references to blockly.fieldcolour ([#2441](https://github.com/google/blockly-samples/issues/2441)) ([81787b7](https://github.com/google/blockly-samples/commit/81787b7008b2e255da74487ee32eafeff2477177)) - - - -## [0.6.6](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.5...@blockly/keyboard-navigation@0.6.6) (2024-08-01) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.6.5](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.4...@blockly/keyboard-navigation@0.6.5) (2024-07-25) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.6.4](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.3...@blockly/keyboard-navigation@0.6.4) (2024-07-11) - - -### Reverts - -* Revert "chore(deps): Bump the npm_and_yarn group across 54 directories with 19 updates (#2403)" (#2410) ([bad8ffb](https://github.com/google/blockly-samples/commit/bad8ffbf85caa4e5b68d2f010cd0deaa9e3dd98f)), closes [#2403](https://github.com/google/blockly-samples/issues/2403) [#2410](https://github.com/google/blockly-samples/issues/2410) -* Revert "chore(deps): Bump the npm_and_yarn group across 6 directories with 11…" (#2408) ([95b13c7](https://github.com/google/blockly-samples/commit/95b13c7de3b6b3892b5c04bdc02a798ff04061b4)), closes [#2408](https://github.com/google/blockly-samples/issues/2408) - - - -## [0.6.3](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.2...@blockly/keyboard-navigation@0.6.3) (2024-07-04) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.6.2](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.1...@blockly/keyboard-navigation@0.6.2) (2024-06-06) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.6.1](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.0...@blockly/keyboard-navigation@0.6.1) (2024-05-30) - - -### Bug Fixes - -* multiple blockly instances ([#2375](https://github.com/google/blockly-samples/issues/2375)) ([b231e59](https://github.com/google/blockly-samples/commit/b231e598f2f5f5b0abbfd01d981e35572ad50a26)) - - - -## [0.6.0](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.13...@blockly/keyboard-navigation@0.6.0) (2024-05-21) - - -### ⚠ BREAKING CHANGES - -* update all plugins to v11 of blockly -* **dev-scripts:** This PR removes the support that was added - -### Features - -* support keyboard navigation of flyout buttons ([#2200](https://github.com/google/blockly-samples/issues/2200)) ([c2abe4d](https://github.com/google/blockly-samples/commit/c2abe4da9808f64161d5dc89a5e4d1b546ec279b)) -* update all plugins to v11 of blockly ([5fcd3e7](https://github.com/google/blockly-samples/commit/5fcd3e7d53eaadffe9bda9a378b404d34b2f8be2)) - - -### Bug Fixes - -* build for the v11 branch ([#2268](https://github.com/google/blockly-samples/issues/2268)) ([c7a4fc5](https://github.com/google/blockly-samples/commit/c7a4fc5e72c5e8d9e9bc926bbbbadd1eb31792fc)) -* Call blocks handle both manual disabling and disabled defs ([#2334](https://github.com/google/blockly-samples/issues/2334)) ([5eade55](https://github.com/google/blockly-samples/commit/5eade55779c4022d14ad4472ff32c93c78199887)) -* **dev-scripts:** Fixes, refactoring and simplification of `webpack.config.js` and `'blockly'` imports ([#2229](https://github.com/google/blockly-samples/issues/2229)) ([f5ffdb9](https://github.com/google/blockly-samples/commit/f5ffdb961e3b60ddb164087f4bddc4e6215906b7)), closes [#335](https://github.com/google/blockly-samples/issues/335) [#335](https://github.com/google/blockly-samples/issues/335) [#1630](https://github.com/google/blockly-samples/issues/1630) [#335](https://github.com/google/blockly-samples/issues/335) [#226](https://github.com/google/blockly-samples/issues/226) [google/blockly#7822](https://github.com/google/blockly/issues/7822) [google/blockly#7822](https://github.com/google/blockly/issues/7822) [/github.com/google/blockly-samples/pull/2229#issuecomment-1979123919](https://github.com/google//github.com/google/blockly-samples/pull/2229/issues/issuecomment-1979123919) -* update keyboard nav to use proper getContents ([#2342](https://github.com/google/blockly-samples/issues/2342)) ([4d429c0](https://github.com/google/blockly-samples/commit/4d429c092c59045b6a284f0d62a4afcda994e90d)) - - - -## [0.5.13](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.12...@blockly/keyboard-navigation@0.5.13) (2024-05-16) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.5.12](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.11...@blockly/keyboard-navigation@0.5.12) (2024-05-09) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.5.11](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.10...@blockly/keyboard-navigation@0.5.11) (2024-04-25) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.5.10](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.9...@blockly/keyboard-navigation@0.5.10) (2024-04-04) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.5.9](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.8...@blockly/keyboard-navigation@0.5.9) (2024-03-28) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.5.8](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.7...@blockly/keyboard-navigation@0.5.8) (2024-02-08) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.5.7](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.6...@blockly/keyboard-navigation@0.5.7) (2023-12-14) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.5.6](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.5...@blockly/keyboard-navigation@0.5.6) (2023-12-07) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.5.5](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.4...@blockly/keyboard-navigation@0.5.5) (2023-12-07) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.5.4](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.3...@blockly/keyboard-navigation@0.5.4) (2023-11-16) - - -### Bug Fixes - -* resolved 15 ESLint warnings ([#2065](https://github.com/google/blockly-samples/issues/2065)) ([2436337](https://github.com/google/blockly-samples/commit/243633746542bb1518fe2893c0421a5a6f79fd32)) - - - -## [0.5.3](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.2...@blockly/keyboard-navigation@0.5.3) (2023-11-09) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.5.2](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.1...@blockly/keyboard-navigation@0.5.2) (2023-11-02) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.5.1](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.0...@blockly/keyboard-navigation@0.5.1) (2023-10-30) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.5.0](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.7...@blockly/keyboard-navigation@0.5.0) (2023-09-28) - - -### ⚠ BREAKING CHANGES - -* changes for v10.2.0 (#1989) - -### release - -* changes for v10.2.0 ([#1989](https://github.com/google/blockly-samples/issues/1989)) ([4d81ea7](https://github.com/google/blockly-samples/commit/4d81ea7254412ef199a270fc740c2f45755a2725)), closes [#1844](https://github.com/google/blockly-samples/issues/1844) [#1845](https://github.com/google/blockly-samples/issues/1845) [#1863](https://github.com/google/blockly-samples/issues/1863) [#1880](https://github.com/google/blockly-samples/issues/1880) [#1885](https://github.com/google/blockly-samples/issues/1885) [#1886](https://github.com/google/blockly-samples/issues/1886) [#1887](https://github.com/google/blockly-samples/issues/1887) [#1888](https://github.com/google/blockly-samples/issues/1888) [#1919](https://github.com/google/blockly-samples/issues/1919) [#1920](https://github.com/google/blockly-samples/issues/1920) [#1983](https://github.com/google/blockly-samples/issues/1983) [#1984](https://github.com/google/blockly-samples/issues/1984) [#1985](https://github.com/google/blockly-samples/issues/1985) [#1991](https://github.com/google/blockly-samples/issues/1991) - - - -## [0.4.7](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.6...@blockly/keyboard-navigation@0.4.7) (2023-09-28) - - -### Bug Fixes - -* make keyboard nav compatible with v10.2.0 ([#1990](https://github.com/google/blockly-samples/issues/1990)) ([e0915b3](https://github.com/google/blockly-samples/commit/e0915b36afb7d049665673e89c4340bc01cdf08c)) - - - -## [0.4.6](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.5...@blockly/keyboard-navigation@0.4.6) (2023-09-14) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.4.5](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.4...@blockly/keyboard-navigation@0.4.5) (2023-08-17) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.4.4](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.3...@blockly/keyboard-navigation@0.4.4) (2023-07-24) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.4.3](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.2...@blockly/keyboard-navigation@0.4.3) (2023-07-20) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.4.2](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.1...@blockly/keyboard-navigation@0.4.2) (2023-07-13) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.4.1](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.0...@blockly/keyboard-navigation@0.4.1) (2023-07-06) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.4.0](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.18...@blockly/keyboard-navigation@0.4.0) (2023-06-28) - - -### ⚠ BREAKING CHANGES - -* update all plugins to use blockly-v10.0.0 (#1744) - -### Features - -* update all plugins to use blockly-v10.0.0 ([#1744](https://github.com/google/blockly-samples/issues/1744)) ([6cc88cb](https://github.com/google/blockly-samples/commit/6cc88cbef39d4ad664a668d3d46eb29ba7292f9c)) - - - -## [0.3.18](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.17...@blockly/keyboard-navigation@0.3.18) (2023-06-22) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.17](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.16...@blockly/keyboard-navigation@0.3.17) (2023-05-18) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.16](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.15...@blockly/keyboard-navigation@0.3.16) (2023-05-11) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.15](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.14...@blockly/keyboard-navigation@0.3.15) (2023-05-04) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.14](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.13...@blockly/keyboard-navigation@0.3.14) (2023-04-27) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.13](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.12...@blockly/keyboard-navigation@0.3.13) (2023-04-13) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.12](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.11...@blockly/keyboard-navigation@0.3.12) (2023-03-23) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.11](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.10...@blockly/keyboard-navigation@0.3.11) (2023-03-09) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.10](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.9...@blockly/keyboard-navigation@0.3.10) (2023-03-02) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.9](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.8...@blockly/keyboard-navigation@0.3.9) (2023-02-23) - - -### Bug Fixes - -* remove prepublishOnly scripts ([#1579](https://github.com/google/blockly-samples/issues/1579)) ([27da6cd](https://github.com/google/blockly-samples/commit/27da6cd04c38f6ba417f4e7446bb6218c475448d)) - - - -## [0.3.8](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.7...@blockly/keyboard-navigation@0.3.8) (2023-02-23) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.7](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.6...@blockly/keyboard-navigation@0.3.7) (2023-02-16) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.6](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.5...@blockly/keyboard-navigation@0.3.6) (2023-02-09) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.5](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.4...@blockly/keyboard-navigation@0.3.5) (2023-01-26) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.4](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.3...@blockly/keyboard-navigation@0.3.4) (2023-01-05) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.3](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.2...@blockly/keyboard-navigation@0.3.3) (2022-12-15) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.2](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.1...@blockly/keyboard-navigation@0.3.2) (2022-10-27) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.1](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.0...@blockly/keyboard-navigation@0.3.1) (2022-10-13) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## [0.3.0](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.2.22...@blockly/keyboard-navigation@0.3.0) (2022-10-05) - - -### ⚠ BREAKING CHANGES - -* update peer and devDependencies of all plugins to require Blockly v9 (#1314) - -### Bug Fixes - -* keyboard navigation tests ([#1311](https://github.com/google/blockly-samples/issues/1311)) ([8299646](https://github.com/google/blockly-samples/commit/8299646ecf26bf0a95df11bfb24ae2e219c88176)) -* references to deprecated functions in v9 ([#1313](https://github.com/google/blockly-samples/issues/1313)) ([cb2e679](https://github.com/google/blockly-samples/commit/cb2e67987e0b62a77c26adc660cc6ade1ba67954)) - - -### Miscellaneous Chores - -* update peer and devDependencies of all plugins to require Blockly v9 ([#1314](https://github.com/google/blockly-samples/issues/1314)) ([03d4912](https://github.com/google/blockly-samples/commit/03d4912c42c8de0f30493037ccc28dddaea0f266)) - - - -## 0.2.22 (2022-08-11) - - -### Bug Fixes - -* Remove the deprecated block-extension-tooltip ([#1215](https://github.com/google/blockly-samples/issues/1215)) ([a044478](https://github.com/google/blockly-samples/commit/a044478c86a73e3065bc866e427f175cbec6fc13)) - - - - - -## 0.2.21 (2022-08-04) - - -### Bug Fixes - -* fix the name of the package of suggested-blocks ([#1214](https://github.com/google/blockly-samples/issues/1214)) ([35aa8ec](https://github.com/google/blockly-samples/commit/35aa8ec73a60a4eb5b1e80cb2fc71dcd83d05e27)) - - - - - -## 0.2.19 (2022-07-21) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## 0.2.18 (2022-07-06) - - -### Bug Fixes - -* Update blockly-react to use functional components instead of class components. ([#1178](https://github.com/google/blockly-samples/issues/1178)) ([fa21187](https://github.com/google/blockly-samples/commit/fa21187cdbe4ec3a5c69f185540dd68a98eb69d7)) - - - - - -## 0.2.17 (2022-06-27) - - -### Bug Fixes - -* Update package import for keyboard navigation demo ([#1170](https://github.com/google/blockly-samples/issues/1170)) ([69c1725](https://github.com/google/blockly-samples/commit/69c1725b775279fcc397dc178935208d5f42b08c)) - - - - - -## 0.2.16 (2022-06-21) - -**Note:** Version bump only for package @blockly/keyboard-navigation - - - - - -## 0.2.15 (2022-06-08) - - -### Bug Fixes - -* package versions to support patch releases ([#1150](https://github.com/google/blockly-samples/issues/1150)) ([e1ae378](https://github.com/google/blockly-samples/commit/e1ae378d779531621c3d948566257d069002963f)) - - - - - -## 0.2.14 (2022-06-02) - - -### Bug Fixes - -* add git identity ([#1156](https://github.com/google/blockly-samples/issues/1156)) ([8d80924](https://github.com/google/blockly-samples/commit/8d809243b277375beb2ce75d4e157b5e17f78193)) diff --git a/plugins/keyboard-navigation/GETSTARTED.md b/plugins/keyboard-navigation/GETSTARTED.md deleted file mode 100644 index 99e93c7e9..000000000 --- a/plugins/keyboard-navigation/GETSTARTED.md +++ /dev/null @@ -1,24 +0,0 @@ -This package was bootstrapped with [@blockly/create-package](https://www.npmjs.com/package/@blockly/create-package). - -## Available Scripts - -In this directory, you can run: - -### `npm start` - -Runs the package in development mode. - -Open [http://localhost:3000/test](http://localhost:3000/test) to view the test -playground in the browser. The page will reload if you make edits. - -### `npm run build` - -Builds the package into the `dist` directory. - -### `npm run lint` - -Runs eslint on the `src` and `test` directories. - -### `npm run clean` - -Deletes the `dist` and `build` directories if they exist. diff --git a/plugins/keyboard-navigation/README.md b/plugins/keyboard-navigation/README.md deleted file mode 100644 index abf069175..000000000 --- a/plugins/keyboard-navigation/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# @blockly/keyboard-navigation [![Built on Blockly](https://tinyurl.com/built-on-blockly)](https://github.com/google/blockly) - -A [Blockly](https://www.npmjs.com/package/blockly) plugin that adds keyboard -navigation to Blockly. This allows users to use the keyboard to navigate the -toolbox and the blocks. More information on keyboard navigation can be found -on our [keyboard navigation documentation page](https://developers.google.com/blockly/guides/configure/web/keyboard-nav). - -## Installation - -### Yarn - -``` -yarn add @blockly/keyboard-navigation -``` - -### npm - -``` -npm install @blockly/keyboard-navigation --save -``` - -## Usage - -```js -import * as Blockly from 'blockly'; -import {NavigationController} from '@blockly/keyboard-navigation'; -// Inject Blockly. -const workspace = Blockly.inject('blocklyDiv', { - toolbox: toolboxCategories, -}); -// Initialize plugin. -const navigationController = new NavigationController(); -navigationController.init(); -navigationController.addWorkspace(workspace); -// Turns on keyboard navigation. -navigationController.enable(workspace); -``` - -## API - -This plugin exports the following classes: - -- `NavigationController`: Class in charge of registering all keyboard shortcuts. -- `Navigation`: This holds all the functions necessary to navigate around Blockly using the keyboard. -- `FlyoutCursor`: Cursor in charge of navigating the flyout. -- `LineCursor`: Alternative cursor that tries to navigate blocks like lines of code. - -You should only need to use these if you plan on changing the default functionality. - -## License - -Apache 2.0 diff --git a/plugins/keyboard-navigation/package-lock.json b/plugins/keyboard-navigation/package-lock.json deleted file mode 100644 index 2037b4798..000000000 --- a/plugins/keyboard-navigation/package-lock.json +++ /dev/null @@ -1,3070 +0,0 @@ -{ - "name": "@blockly/keyboard-navigation", - "version": "0.6.14", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@blockly/keyboard-navigation", - "version": "0.6.14", - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "jsdom": "^16.4.0", - "jsdom-global": "^3.0.2", - "mocha": "^10.7.0", - "sinon": "^9.0.1" - }, - "engines": { - "node": ">=8.17.0" - }, - "peerDependencies": { - "blockly": "^11.0.0" - } - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz", - "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.6.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - } - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", - "dev": true - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom-global": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz", - "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=", - "dev": true, - "peerDependencies": { - "jsdom": ">=10.0.0" - } - }, - "node_modules/just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "dev": true - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/loupe": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz", - "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mocha": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.0.tgz", - "integrity": "sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nise": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz", - "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0", - "@sinonjs/fake-timers": "^6.0.0", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/sinon": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", - "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.8.1", - "@sinonjs/fake-timers": "^6.0.1", - "@sinonjs/samsam": "^5.3.1", - "diff": "^4.0.2", - "nise": "^4.0.4", - "supports-color": "^7.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "node_modules/sinon/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@sinonjs/samsam": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz", - "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.6.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - } - }, - "@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", - "dev": true - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "requires": { - "fill-range": "^7.1.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - } - }, - "jsdom-global": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz", - "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=", - "dev": true - }, - "just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "loupe": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz", - "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "mocha": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.0.tgz", - "integrity": "sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nise": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz", - "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0", - "@sinonjs/fake-timers": "^6.0.0", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "sinon": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", - "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.8.1", - "@sinonjs/fake-timers": "^6.0.1", - "@sinonjs/samsam": "^5.3.1", - "diff": "^4.0.2", - "nise": "^4.0.4", - "supports-color": "^7.1.0" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true - } - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true - }, - "workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} \ No newline at end of file diff --git a/plugins/keyboard-navigation/package.json b/plugins/keyboard-navigation/package.json deleted file mode 100644 index 14cba18f4..000000000 --- a/plugins/keyboard-navigation/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "@blockly/keyboard-navigation", - "version": "0.6.14", - "description": "A Blockly plugin that adds keyboard navigation support.", - "scripts": { - "audit:fix": "blockly-scripts auditFix", - "build": "blockly-scripts build", - "clean": "blockly-scripts clean", - "lint": "eslint .", - "predeploy": "blockly-scripts predeploy", - "start": "blockly-scripts start", - "test": "blockly-scripts test" - }, - "main": "./dist/index.js", - "module": "./src/index.js", - "unpkg": "./dist/index.js", - "author": "Blockly Team", - "keywords": [ - "blockly", - "blockly-plugin", - "keyboard-navigation" - ], - "homepage": "https://github.com/google/blockly-samples/tree/master/plugins/keyboard-navigation#readme", - "bugs": { - "url": "https://github.com/google/blockly-samples/issues" - }, - "repository": { - "type": "git", - "url": "https://github.com/google/blockly-samples.git", - "directory": "plugins/keyboard-navigation" - }, - "license": "Apache-2.0", - "directories": { - "dist": "dist", - "src": "src" - }, - "files": [ - "dist", - "src" - ], - "devDependencies": { - "@blockly/dev-scripts": "^4.0.7", - "@blockly/dev-tools": "^8.1.0", - "chai": "^4.2.0", - "jsdom": "^16.4.0", - "jsdom-global": "^3.0.2", - "mocha": "^10.7.0", - "sinon": "^9.0.1" - }, - "peerDependencies": { - "blockly": "^11.0.0" - }, - "publishConfig": { - "access": "public", - "registry": "https://wombat-dressing-room.appspot.com" - }, - "engines": { - "node": ">=8.17.0" - } -} diff --git a/plugins/keyboard-navigation/src/constants.js b/plugins/keyboard-navigation/src/constants.js deleted file mode 100644 index 187ad47dc..000000000 --- a/plugins/keyboard-navigation/src/constants.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @fileoverview Constants for keyboard navigation. - * @author aschmiedt@google.com (Abby Schmiedt) - */ - -/** - * Keyboard navigation states. - * The different parts of Blockly that the user navigates between. - * @enum {string} - * @const - * @public - */ -export const STATE = { - WORKSPACE: 'workspace', - FLYOUT: 'flyout', - TOOLBOX: 'toolbox', -}; - -/** - * Default keyboard navigation shortcut names. - * @enum {string} - * @const - * @public - */ -export const SHORTCUT_NAMES = { - PREVIOUS: 'previous', - NEXT: 'next', - IN: 'in', - OUT: 'out', - INSERT: 'insert', - MARK: 'mark', - DISCONNECT: 'disconnect', - TOOLBOX: 'toolbox', - EXIT: 'exit', - TOGGLE_KEYBOARD_NAV: 'toggle_keyboard_nav', - COPY: 'keyboard_nav_copy', - CUT: 'keyboard_nav_cut', - PASTE: 'keyboard_nav_paste', - DELETE: 'keyboard_nav_delete', - MOVE_WS_CURSOR_UP: 'workspace_up', - MOVE_WS_CURSOR_DOWN: 'workspace_down', - MOVE_WS_CURSOR_LEFT: 'workspace_left', - MOVE_WS_CURSOR_RIGHT: 'workspace_right', -}; - -/** - * Types of possible messages passed into the loggingCallback in the Navigation - * class. - * @enum {string} - * @const - * @public - */ -export const LOGGING_MSG_TYPE = { - ERROR: 'error', - WARN: 'warn', - LOG: 'log', -}; diff --git a/plugins/keyboard-navigation/src/flyout_cursor.js b/plugins/keyboard-navigation/src/flyout_cursor.js deleted file mode 100644 index 20cd17b95..000000000 --- a/plugins/keyboard-navigation/src/flyout_cursor.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @fileoverview The class representing a cursor used to navigate the flyout. - * @author aschmiedt@google.com (Abby Schmiedt) - */ - -import * as Blockly from 'blockly/core'; - -/** - * Class for a flyout cursor. - * This controls how a user navigates blocks in the flyout. - * This cursor only allows a user to go to the previous or next stack. - * @constructor - * @extends {Blockly.Cursor} - */ -export class FlyoutCursor extends Blockly.Cursor { - /** - * The constructor for the FlyoutCursor. - */ - constructor() { - super(); - } - - /** - * Moves the cursor to the next stack of blocks in the flyout. - * @returns {Blockly.ASTNode} The next element, or null if the current node is - * not set or there is no next value. - * @override - */ - next() { - const curNode = this.getCurNode(); - if (!curNode) { - return null; - } - const newNode = curNode.next(); - - if (newNode) { - this.setCurNode(newNode); - } - return newNode; - } - - /** - * This is a no-op since a flyout cursor can not go in. - * @returns {null} Always null. - * @override - */ - in() { - return null; - } - - /** - * Moves the cursor to the previous stack of blocks in the flyout. - * @returns {Blockly.ASTNode} The previous element, or null if the current - * node is not set or there is no previous value. - * @override - */ - prev() { - const curNode = this.getCurNode(); - if (!curNode) { - return null; - } - const newNode = curNode.prev(); - - if (newNode) { - this.setCurNode(newNode); - } - return newNode; - } - - /** - * This is a no-op since a flyout cursor can not go out. - * @returns {null} Always null. - * @override - */ - out() { - return null; - } -} - -export const registrationType = Blockly.registry.Type.CURSOR; -export const registrationName = 'FlyoutCursor'; - -Blockly.registry.register(registrationType, registrationName, FlyoutCursor); - -export const pluginInfo = { - [registrationType]: registrationName, -}; diff --git a/plugins/keyboard-navigation/src/gesture_monkey_patch.js b/plugins/keyboard-navigation/src/gesture_monkey_patch.js deleted file mode 100644 index ba5d6eb79..000000000 --- a/plugins/keyboard-navigation/src/gesture_monkey_patch.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @fileoverview Overrides methods on Blockly.Gesture in order to allow users - * to move the cursor to blocks or the workspace using shift click. - * TODO(google/blockly#4584): We do not have a way to do this currently without - * monkey patching Blockly. - * @author aschmiedt@google.com (Abby Schmiedt) - */ - -import * as Blockly from 'blockly/core'; - -const oldDoWorkspaceClick = Blockly.Gesture.prototype.doWorkspaceClick_; - -/** - * Execute a workspace click. When in accessibility mode shift clicking will - * move the cursor. - * @param {!Event} e A mouse up or touch end event. - * @this {Blockly.Gesture} - * @override - */ -Blockly.Gesture.prototype.doWorkspaceClick_ = function (e) { - oldDoWorkspaceClick.call(this, e); - const ws = this.creatorWorkspace_; - if (e.shiftKey && ws.keyboardAccessibilityMode) { - const screenCoord = new Blockly.utils.Coordinate(e.clientX, e.clientY); - const wsCoord = Blockly.utils.svgMath.screenToWsCoordinates( - ws, - screenCoord, - ); - const wsNode = Blockly.ASTNode.createWorkspaceNode(ws, wsCoord); - ws.getCursor().setCurNode(wsNode); - } -}; - -const oldDoBlockClick = Blockly.Gesture.prototype.doBlockClick_; - -/** - * Execute a block click. When in accessibility mode shift clicking will move - * the cursor to the block. - * @this {Blockly.Gesture} - * @override - */ -Blockly.Gesture.prototype.doBlockClick_ = function (e) { - oldDoBlockClick.call(this, e); - if ( - !this.targetBlock_.isInFlyout && - this.mostRecentEvent_.shiftKey && - this.targetBlock_.workspace.keyboardAccessibilityMode - ) { - this.creatorWorkspace_ - .getCursor() - .setCurNode(Blockly.ASTNode.createTopNode(this.targetBlock_)); - } -}; diff --git a/plugins/keyboard-navigation/src/index.js b/plugins/keyboard-navigation/src/index.js deleted file mode 100644 index 75ef7e015..000000000 --- a/plugins/keyboard-navigation/src/index.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as Constants from '../src/constants'; - -import { - FlyoutCursor, - pluginInfo as FlyoutCursorPluginInfo, -} from './flyout_cursor'; -import {LineCursor, pluginInfo as LineCursorPluginInfo} from './line_cursor'; -import {Navigation} from './navigation'; -import {NavigationController} from './navigation_controller'; - -export { - Constants, - FlyoutCursor, - FlyoutCursorPluginInfo, - LineCursor, - LineCursorPluginInfo, - Navigation, - NavigationController, -}; diff --git a/plugins/keyboard-navigation/src/line_cursor.js b/plugins/keyboard-navigation/src/line_cursor.js deleted file mode 100644 index 8f1595b92..000000000 --- a/plugins/keyboard-navigation/src/line_cursor.js +++ /dev/null @@ -1,190 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @fileoverview The class representing a line cursor. - * A line cursor tries to traverse the blocks and connections on a block as if - * they were lines of code in a text editor. Previous and next traverse previous - * connections, next connections and blocks, while in and out traverse input - * connections and fields. - * @author aschmiedt@google.com (Abby Schmiedt) - */ - -import * as Blockly from 'blockly/core'; - -/** - * Class for a line cursor. - * @constructor - * @extends {Blockly.BasicCursor} - */ -export class LineCursor extends Blockly.BasicCursor { - /** - * Constructor for a line cursor. - */ - constructor() { - super(); - } - - /** - * Moves the cursor to the next previous connection, next connection or block - * in the pre order traversal. Finds the next node in the pre order traversal. - * @returns {Blockly.ASTNode} The next node, or null if the current node is - * not set or there is no next value. - * @override - */ - next() { - const curNode = this.getCurNode(); - if (!curNode) { - return null; - } - let newNode = this.getNextNode_(curNode, this.validLineNode); - - // Skip the input or next value if there is a connected block. - if ( - newNode && - (newNode.getType() == Blockly.ASTNode.types.INPUT || - newNode.getType() == Blockly.ASTNode.types.NEXT) && - newNode.getLocation().targetBlock() - ) { - newNode = this.getNextNode_(newNode, this.validLineNode); - } - if (newNode) { - this.setCurNode(newNode); - } - return newNode; - } - - /** - * Moves the cursor to the next input connection or field - * in the pre order traversal. - * @returns {Blockly.ASTNode} The next node, or null if the current node is - * not set or there is no next value. - * @override - */ - in() { - const curNode = this.getCurNode(); - if (!curNode) { - return null; - } - const newNode = this.getNextNode_(curNode, this.validInLineNode); - - if (newNode) { - this.setCurNode(newNode); - } - return newNode; - } - /** - * Moves the cursor to the previous next connection or previous connection in - * the pre order traversal. - * @returns {Blockly.ASTNode} The previous node, or null if the current node - * is not set or there is no previous value. - * @override - */ - prev() { - const curNode = this.getCurNode(); - if (!curNode) { - return null; - } - let newNode = this.getPreviousNode_(curNode, this.validLineNode); - - if ( - newNode && - (newNode.getType() == Blockly.ASTNode.types.INPUT || - newNode.getType() == Blockly.ASTNode.types.NEXT) && - newNode.getLocation().targetBlock() - ) { - newNode = this.getPreviousNode_(newNode, this.validLineNode); - } - - if (newNode) { - this.setCurNode(newNode); - } - return newNode; - } - /** - * Moves the cursor to the previous input connection or field in the pre order - * traversal. - * @returns {Blockly.ASTNode} The previous node, or null if the current node - * is not set or there is no previous value. - * @override - */ - out() { - const curNode = this.getCurNode(); - if (!curNode) { - return null; - } - const newNode = this.getPreviousNode_(curNode, this.validInLineNode); - - if (newNode) { - this.setCurNode(newNode); - } - return newNode; - } - - /** - * Decides if the previous and next methods should traverse the given node. - * The previous and next method only traverse previous connections, next - * connections and blocks. - * @param {Blockly.ASTNode} node The AST node to check. - * @returns {boolean} True if the node should be visited, false otherwise. - * @protected - */ - validLineNode(node) { - if (!node) { - return false; - } - let isValid = false; - const location = node.getLocation(); - const type = node && node.getType(); - if (type == Blockly.ASTNode.types.BLOCK) { - if (location.outputConnection === null) { - isValid = true; - } - } else if ( - type == Blockly.ASTNode.types.INPUT && - location.type == Blockly.NEXT_STATEMENT - ) { - isValid = true; - } else if (type == Blockly.ASTNode.types.NEXT) { - isValid = true; - } - return isValid; - } - - /** - * Decides if the in and out methods should traverse the given node. - * The in and out method only traverse fields and input connections. - * @param {Blockly.ASTNode} node The AST node to check whether it is valid. - * @returns {boolean} True if the node should be visited, false otherwise. - * @protected - */ - validInLineNode(node) { - if (!node) { - return false; - } - let isValid = false; - const location = node.getLocation(); - const type = node && node.getType(); - if (type == Blockly.ASTNode.types.FIELD) { - isValid = true; - } else if ( - type == Blockly.ASTNode.types.INPUT && - location.type == Blockly.INPUT_VALUE - ) { - isValid = true; - } - return isValid; - } -} - -export const registrationName = 'LineCursor'; -export const registrationType = Blockly.registry.Type.CURSOR; - -Blockly.registry.register(registrationType, registrationName, LineCursor); - -export const pluginInfo = { - [registrationType]: registrationName, -}; diff --git a/plugins/keyboard-navigation/src/navigation.js b/plugins/keyboard-navigation/src/navigation.js deleted file mode 100644 index 9fc285ba8..000000000 --- a/plugins/keyboard-navigation/src/navigation.js +++ /dev/null @@ -1,1287 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @fileoverview Holds all methods necessary to use Blockly through the - * keyboard. - * @author aschmiedt@google.com (Abby Schmiedt) - */ - -import * as Blockly from 'blockly/core'; -import * as Constants from './constants'; -import { - registrationName as cursorRegistrationName, - registrationType as cursorRegistrationType, -} from './flyout_cursor'; - -/** - * Class that holds all methods necessary for keyboard navigation to work. - */ -export class Navigation { - /** - * Constructor for keyboard navigation. - */ - constructor() { - /** - * Object holding the location of the cursor for each workspace. - * Possible locations of the cursor are: workspace, flyout or toolbox. - * @type {Object} - * @protected - */ - this.workspaceStates = {}; - - /** - * An optional method that allows a developer to customize how to handle - * logs, warnings, and errors. The first argument is one of 'log', 'warn', - * or 'error'. The second argument is the message. - * @type {?function(Constants.LOGGING_MSG_TYPE, string)} - * @public - */ - this.loggingCallback = null; - - /** - * The distance to move the cursor when the cursor is on the workspace. - * @type {number} - * @public - */ - this.WS_MOVE_DISTANCE = 40; - - /** - * The name of the marker to use for keyboard navigation. - * @type {string} - * @public - */ - this.MARKER_NAME = 'local_marker_1'; - - /** - * The default coordinate to use when focusing on the workspace and no - * blocks are present. In pixel coordinates, but will be converted to - * workspace coordinates when used to position the cursor. - * @type {!Blockly.utils.Coordinate} - * @public - */ - this.DEFAULT_WS_COORDINATE = new Blockly.utils.Coordinate(100, 100); - - /** - * The default coordinate to use when moving the cursor to the workspace - * after a block has been deleted. In pixel coordinates, but will be - * converted to workspace coordinates when used to position the cursor. - * @type {!Blockly.utils.Coordinate} - * @public - */ - this.WS_COORDINATE_ON_DELETE = new Blockly.utils.Coordinate(100, 100); - - /** - * Wrapper for method that deals with workspace changes. - * Used for removing change listener. - * @type {Function} - * @protected - */ - this.wsChangeWrapper = this.workspaceChangeListener.bind(this); - - /** - * Wrapper for method that deals with flyout changes. - * Used for removing change listener. - * @type {Function} - * @protected - */ - this.flyoutChangeWrapper = this.flyoutChangeListener.bind(this); - - /** - * The list of registered workspaces. - * Used when removing change listeners in dispose. - * @type {!Array} - * @protected - */ - this.workspaces = []; - } - - /** - * Adds all necessary change listeners and markers to a workspace for keyboard - * navigation to work. This must be called for keyboard navigation to work - * on a workspace. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to add keyboard - * navigation to. - * @public - */ - addWorkspace(workspace) { - this.workspaces.push(workspace); - const flyout = workspace.getFlyout(); - workspace - .getMarkerManager() - .registerMarker(this.MARKER_NAME, new Blockly.Marker()); - workspace.addChangeListener(this.wsChangeWrapper); - - if (flyout) { - this.addFlyout(flyout); - } - } - - /** - * Removes all keyboard navigation change listeners and markers. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to remove keyboard - * navigation from. - * @public - */ - removeWorkspace(workspace) { - const workspaceIdx = this.workspaces.indexOf(workspace); - const flyout = workspace.getFlyout(); - - if (workspace.getCursor()) { - this.disableKeyboardAccessibility(workspace); - } - - if (workspaceIdx > -1) { - this.workspaces.splice(workspaceIdx, 1); - } - if (workspace.getMarkerManager()) { - workspace.getMarkerManager().unregisterMarker(this.MARKER_NAME); - } - workspace.removeChangeListener(this.wsChangeWrapper); - - if (flyout) { - this.removeFlyout(flyout); - } - } - - /** - * Sets the state for the given workspace. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to set the state on. - * @param {!Constants.STATE} state The navigation state. - * @protected - */ - setState(workspace, state) { - this.workspaceStates[workspace.id] = state; - } - - /** - * Gets the navigation state of the current workspace. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to get the state of. - * @returns {!Constants.STATE} The state of the given workspace. - * @package - */ - getState(workspace) { - return this.workspaceStates[workspace.id]; - } - - /** - * Gets the marker created for keyboard navigation. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to get the marker - * from. - * @returns {?Blockly.Marker} The marker created for keyboard navigation. - * @protected - */ - getMarker(workspace) { - return workspace.getMarker(this.MARKER_NAME); - } - - /** - * Adds all event listeners and cursors to the flyout that are needed for - * keyboard navigation to work. - * @param {!Blockly.IFlyout} flyout The flyout to add a cursor and change - * listeners to. - * @protected - */ - addFlyout(flyout) { - const flyoutWorkspace = flyout.getWorkspace(); - flyoutWorkspace.addChangeListener(this.flyoutChangeWrapper); - const FlyoutCursorClass = Blockly.registry.getClass( - cursorRegistrationType, - cursorRegistrationName, - ); - flyoutWorkspace.getMarkerManager().setCursor(new FlyoutCursorClass()); - } - - /** - * Removes all change listeners from the flyout that are needed for - * keyboard navigation to work. - * @param {!Blockly.IFlyout} flyout The flyout to add a cursor and event - * listeners to. - * @protected - */ - removeFlyout(flyout) { - const flyoutWorkspace = flyout.getWorkspace(); - flyoutWorkspace.removeChangeListener(this.flyoutChangeWrapper); - } - - /** - * Updates the state of keyboard navigation and the position of the cursor - * based on workspace events. - * @param {!Blockly.Events.Abstract} e The Blockly event to process. - * @protected - */ - workspaceChangeListener(e) { - const workspace = Blockly.Workspace.getById(e.workspaceId); - if (!workspace || !workspace.keyboardAccessibilityMode) { - return; - } - switch (e.type) { - case Blockly.Events.DELETE: - this.handleBlockDeleteByDrag(workspace, e); - break; - case Blockly.Events.BLOCK_CHANGE: - if (e.element === 'mutation') { - this.handleBlockMutation( - workspace, - /** @type {Blockly.Events.BlockChange} */ (e), - ); - } - break; - case Blockly.Events.CLICK: - this.handleWorkspaceClick( - workspace, - /** @type {Blockly.Events.Click} */ (e), - ); - break; - case Blockly.Events.TOOLBOX_ITEM_SELECT: - this.handleToolboxCategoryClick( - workspace, - /** @type {Blockly.Events.ToolboxItemSelect} */ (e), - ); - break; - case Blockly.Events.BLOCK_CREATE: - this.handleBlockCreate(workspace, e); - } - } - - /** - * Updates the state of keyboard navigation and the position of the cursor - * based on events emitted from the flyout's workspace. - * @param {!Blockly.Events.Abstract} e The Blockly event to process. - * @protected - */ - flyoutChangeListener(e) { - const flyoutWorkspace = Blockly.Workspace.getById(e.workspaceId); - const mainWorkspace = flyoutWorkspace.targetWorkspace; - const flyout = mainWorkspace.getFlyout(); - - // This is called for simple toolboxes and for toolboxes that have a flyout - // that does not close. Autoclosing flyouts close before we need to focus - // the cursor on the block that was clicked. - if ( - mainWorkspace && - mainWorkspace.keyboardAccessibilityMode && - !flyout.autoClose - ) { - if (e.type === Blockly.Events.CLICK && e.targetType === 'block') { - const block = flyoutWorkspace.getBlockById(e.blockId); - this.handleBlockClickInFlyout(mainWorkspace, block); - } else if (e.type === Blockly.Events.SELECTED) { - const block = flyoutWorkspace.getBlockById(e.newElementId); - this.handleBlockClickInFlyout(mainWorkspace, block); - } - } - } - - /** - * Moves the cursor to the workspace if a block has been dragged from a simple - * toolbox. For a category toolbox this is handled in - * handleToolboxCategoryClick_. - * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor belongs - * to. - * @param {!Blockly.Events.Abstract} e The Blockly event to process. - * @protected - */ - handleBlockCreate(workspace, e) { - if (this.getState(workspace) === Constants.STATE.FLYOUT) { - this.resetFlyout(workspace, !!workspace.getToolbox()); - this.setState(workspace, Constants.STATE.WORKSPACE); - } - } - - /** - * Moves the cursor to the block level when the block the cursor is on - * mutates. - * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor belongs - * to. - * @param {!Blockly.Events.BlockChange} e The Blockly event to process. - * @protected - */ - handleBlockMutation(workspace, e) { - const mutatedBlockId = e.blockId; - const cursor = workspace.getCursor(); - if (cursor) { - const curNode = cursor.getCurNode(); - const block = curNode ? curNode.getSourceBlock() : null; - if (block && block.id === mutatedBlockId) { - cursor.setCurNode(Blockly.ASTNode.createBlockNode(block)); - } - } - } - - /** - * Moves the cursor to the workspace when a user clicks on the workspace. - * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor belongs - * to. - * @param {!Blockly.Events.Click} e The Blockly event to process. - * @protected - */ - handleWorkspaceClick(workspace, e) { - const workspaceState = this.getState(workspace); - if (workspaceState !== Constants.STATE.WORKSPACE) { - this.resetFlyout(workspace, !!workspace.getToolbox()); - this.setState(workspace, Constants.STATE.WORKSPACE); - } - } - - /** - * Moves the cursor to the toolbox when a user clicks on a toolbox category. - * Moves the cursor to the workspace if theh user closes the toolbox category. - * @param {!Blockly.WorkspaceSvg} workspace The workspace the toolbox is on. - * @param {!Blockly.Events.ToolboxItemSelect} e The event emitted from the - * workspace. - * @protected - */ - handleToolboxCategoryClick(workspace, e) { - const workspaceState = this.getState(workspace); - if (e.newItem && workspaceState !== Constants.STATE.TOOLBOX) { - // If the toolbox category was just clicked, focus on the toolbox. - this.focusToolbox(workspace); - } else if (!e.newItem) { - // If the toolbox was closed, focus on the workspace. - this.resetFlyout(workspace, !!workspace.getToolbox()); - this.setState(workspace, Constants.STATE.WORKSPACE); - } - } - - /** - * Moves the cursor to the workspace when its parent block is deleted by - * being dragged to the flyout or to the trashcan. - * @param {!Blockly.WorkspaceSvg} workspace The workspace the block was on. - * @param {!Blockly.Events.Delete} e The event emitted when a block is - * deleted. - * @protected - */ - handleBlockDeleteByDrag(workspace, e) { - const deletedBlockId = e.blockId; - const ids = e.ids; - const cursor = workspace.getCursor(); - - // Make sure the cursor is on a block. - if ( - !cursor || - !cursor.getCurNode() || - !cursor.getCurNode().getSourceBlock() - ) { - return; - } - - const curNode = cursor.getCurNode(); - const sourceBlock = curNode.getSourceBlock(); - if (sourceBlock.id === deletedBlockId || ids.indexOf(sourceBlock.id) > -1) { - cursor.setCurNode( - Blockly.ASTNode.createWorkspaceNode( - workspace, - this.WS_COORDINATE_ON_DELETE, - ), - ); - } - } - - /** - * Handles when a user clicks on a block in the flyout by moving the cursor - * to that stack of blocks and setting the state of navigation to the flyout. - * @param {!Blockly.WorkspaceSvg} mainWorkspace The workspace the user clicked - * on. - * @param {!Blockly.BlockSvg} block The block the user clicked on. - * @protected - */ - handleBlockClickInFlyout(mainWorkspace, block) { - if (!block) { - return; - } - if (block.isShadow()) { - block = /** @type {Blockly.BlockSvg}*/ (block.getParent()); - } - this.getFlyoutCursor(mainWorkspace).setCurNode( - Blockly.ASTNode.createStackNode(block), - ); - this.setState(mainWorkspace, Constants.STATE.FLYOUT); - } - - /** - * Moves the cursor to the appropriate location before a block is deleted. - * This is used when the user deletes a block using the delete or backspace - * key. - * @param {!Blockly.WorkspaceSvg} workspace The workspace the block is being - * deleted on. - * @param {!Blockly.BlockSvg} deletedBlock The block that is being deleted. - * @package - */ - moveCursorOnBlockDelete(workspace, deletedBlock) { - if (!workspace || !workspace.getCursor()) { - return; - } - const cursor = workspace.getCursor(); - const curNode = cursor.getCurNode(); - const block = curNode ? curNode.getSourceBlock() : null; - - if (block === deletedBlock) { - // If the block has a parent move the cursor to their connection point. - if (block.getParent()) { - const topConnection = - block.previousConnection || block.outputConnection; - if (topConnection) { - cursor.setCurNode( - Blockly.ASTNode.createConnectionNode( - topConnection.targetConnection, - ), - ); - } - } else { - // If the block is by itself move the cursor to the workspace. - cursor.setCurNode( - Blockly.ASTNode.createWorkspaceNode( - block.workspace, - block.getRelativeToSurfaceXY(), - ), - ); - } - // If the cursor is on a block whose parent is being deleted, move the - // cursor to the workspace. - } else if (block && deletedBlock.getChildren(false).indexOf(block) > -1) { - cursor.setCurNode( - Blockly.ASTNode.createWorkspaceNode( - block.workspace, - block.getRelativeToSurfaceXY(), - ), - ); - } - } - - /** - * Sets the navigation state to toolbox and selects the first category in the - * toolbox. No-op if a toolbox does not exist on the given workspace. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to get the toolbox - * on. - * @package - */ - focusToolbox(workspace) { - const toolbox = workspace.getToolbox(); - if (!toolbox) { - return; - } - - this.setState(workspace, Constants.STATE.TOOLBOX); - this.resetFlyout(workspace, false /* shouldHide */); - - if (!this.getMarker(workspace).getCurNode()) { - this.markAtCursor(workspace); - } - - if (!toolbox.getSelectedItem()) { - // Find the first item that is selectable. - const toolboxItems = toolbox.getToolboxItems(); - for (let i = 0, toolboxItem; (toolboxItem = toolboxItems[i]); i++) { - if (toolboxItem.isSelectable()) { - toolbox.selectItemByPosition(i); - break; - } - } - } - } - - /** - * Sets the navigation state to flyout and moves the cursor to the first - * block or button in the flyout. - * @param {!Blockly.WorkspaceSvg} workspace The workspace the flyout is on. - * @package - */ - focusFlyout(workspace) { - const flyout = workspace.getFlyout(); - - this.setState(workspace, Constants.STATE.FLYOUT); - - if (!this.getMarker(workspace).getCurNode()) { - this.markAtCursor(workspace); - } - - if (flyout && flyout.getWorkspace()) { - const flyoutContents = flyout.getContents(); - const firstFlyoutItem = flyoutContents[0]; - if (!firstFlyoutItem) return; - if (firstFlyoutItem.button) { - const astNode = Blockly.ASTNode.createButtonNode( - firstFlyoutItem.button, - ); - this.getFlyoutCursor(workspace).setCurNode(astNode); - } else if (firstFlyoutItem.block) { - const astNode = Blockly.ASTNode.createStackNode(firstFlyoutItem.block); - this.getFlyoutCursor(workspace).setCurNode(astNode); - } - } - } - - /** - * Sets the navigation state to workspace and moves the cursor to either the - * top block on a workspace or to the workspace. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to focus on. - * @package - */ - focusWorkspace(workspace) { - workspace.hideChaff(); - const reset = !!workspace.getToolbox(); - - this.resetFlyout(workspace, reset); - this.setState(workspace, Constants.STATE.WORKSPACE); - this.setCursorOnWorkspaceFocus(workspace); - } - - /** - * Moves the cursor to the top connection point on on the first top block. - * If the workspace is empty, moves the cursor to the default location on - * the workspace. - * @param {!Blockly.WorkspaceSvg} workspace The main Blockly workspace. - * @protected - */ - setCursorOnWorkspaceFocus(workspace) { - const topBlocks = workspace.getTopBlocks(true); - const cursor = workspace.getCursor(); - const wsCoordinates = new Blockly.utils.Coordinate( - this.DEFAULT_WS_COORDINATE.x / workspace.scale, - this.DEFAULT_WS_COORDINATE.y / workspace.scale, - ); - if (topBlocks.length > 0) { - cursor.setCurNode(Blockly.ASTNode.createTopNode(topBlocks[0])); - } else { - const wsNode = Blockly.ASTNode.createWorkspaceNode( - workspace, - wsCoordinates, - ); - cursor.setCurNode(wsNode); - } - } - - /** - * Gets the cursor on the flyout's workspace. - * @param {!Blockly.WorkspaceSvg} workspace The main workspace the flyout is - * on. - * @returns {?Blockly.FlyoutCursor} The flyout's cursor or null if no flyout - * exists. - * @protected - */ - getFlyoutCursor(workspace) { - const flyout = workspace.getFlyout(); - const cursor = flyout ? flyout.getWorkspace().getCursor() : null; - - return /** @type {?Blockly.FlyoutCursor} */ (cursor); - } - - /** - * Inserts a block from the flyout. - * Tries to find a connection on the block to connect to the marked - * location. If no connection has been marked, or there is not a compatible - * connection then the block is placed on the workspace. - * @param {!Blockly.WorkspaceSvg} workspace The main workspace. The workspace - * the block will be placed on. - * @package - */ - insertFromFlyout(workspace) { - const newBlock = this.createNewBlock(workspace); - if (!newBlock) { - return; - } - const markerNode = this.getMarker(workspace).getCurNode(); - if ( - !this.tryToConnectMarkerAndCursor( - workspace, - markerNode, - Blockly.ASTNode.createBlockNode(newBlock), - ) - ) { - this.warn( - 'Something went wrong while inserting a block from the flyout.', - ); - } - - this.focusWorkspace(workspace); - workspace.getCursor().setCurNode(Blockly.ASTNode.createTopNode(newBlock)); - this.removeMark(workspace); - } - - /** - * Creates a new block based on the current block the flyout cursor is on. - * @param {!Blockly.WorkspaceSvg} workspace The main workspace. The workspace - * the block will be placed on. - * @returns {?Blockly.BlockSvg} The newly created block. - * @protected - */ - createNewBlock(workspace) { - const flyout = workspace.getFlyout(); - if (!flyout || !flyout.isVisible()) { - this.warn( - 'Trying to insert from the flyout when the flyout does not ' + - ' exist or is not visible', - ); - return null; - } - - const curBlock = /** @type {!Blockly.BlockSvg} */ ( - this.getFlyoutCursor(workspace).getCurNode().getLocation() - ); - if (!curBlock.isEnabled()) { - this.warn("Can't insert a disabled block."); - return null; - } - - const newBlock = flyout.createBlock(curBlock); - // Render to get the sizing right. - newBlock.render(); - // Connections are not tracked when the block is first created. Normally - // there's enough time for them to become tracked in the user's mouse - // movements, but not here. - newBlock.setConnectionTracking(true); - return newBlock; - } - - /** - * Hides the flyout cursor and optionally hides the flyout. - * @param {!Blockly.WorkspaceSvg} workspace The workspace. - * @param {boolean} shouldHide True if the flyout should be hidden. - * @protected - */ - resetFlyout(workspace, shouldHide) { - if (this.getFlyoutCursor(workspace)) { - this.getFlyoutCursor(workspace).hide(); - if (shouldHide) { - workspace.getFlyout().hide(); - } - } - } - - /** - * Connects the location of the marker and the location of the cursor. - * No-op if the marker or cursor node are null. - * @param {!Blockly.WorkspaceSvg} workspace The main workspace. - * @returns {boolean} True if the cursor and marker locations were connected, - * false otherwise. - * @package - */ - connectMarkerAndCursor(workspace) { - const markerNode = this.getMarker(workspace).getCurNode(); - const cursorNode = workspace.getCursor().getCurNode(); - - if (markerNode && cursorNode) { - return this.tryToConnectMarkerAndCursor( - workspace, - markerNode, - cursorNode, - ); - } - return false; - } - - /** - * Tries to connect the given marker and cursor node. - * @param {!Blockly.WorkspaceSvg} workspace The main workspace. - * @param {!Blockly.ASTNode} markerNode The node to try to connect to. - * @param {!Blockly.ASTNode} cursorNode The node to connect to the markerNode. - * @returns {boolean} True if the key was handled; false if something went - * wrong. - * @protected - */ - tryToConnectMarkerAndCursor(workspace, markerNode, cursorNode) { - if (!this.logConnectionWarning(markerNode, cursorNode)) { - return false; - } - - const markerType = markerNode.getType(); - const cursorType = cursorNode.getType(); - - const cursorLoc = cursorNode.getLocation(); - const markerLoc = markerNode.getLocation(); - if (markerNode.isConnection() && cursorNode.isConnection()) { - const cursorConnection = /** @type {!Blockly.RenderedConnection} */ ( - cursorLoc - ); - const markerConnection = /** @type {!Blockly.RenderedConnection} */ ( - markerLoc - ); - return this.connect(cursorConnection, markerConnection); - } else if ( - markerNode.isConnection() && - (cursorType == Blockly.ASTNode.types.BLOCK || - cursorType == Blockly.ASTNode.types.STACK) - ) { - const cursorBlock = /** @type {!Blockly.BlockSvg} */ (cursorLoc); - const markerConnection = /** @type {!Blockly.RenderedConnection} */ ( - markerLoc - ); - return this.insertBlock(cursorBlock, markerConnection); - } else if (markerType == Blockly.ASTNode.types.WORKSPACE) { - const block = cursorNode ? cursorNode.getSourceBlock() : null; - return this.moveBlockToWorkspace( - /** @type {Blockly.BlockSvg} */ (block), - markerNode, - ); - } - this.warn('Unexpected state in tryToConnectMarkerAndCursor.'); - return false; - } - - /** - * Warns the user if the given cursor or marker node can not be connected. - * @param {!Blockly.ASTNode} markerNode The node to try to connect to. - * @param {!Blockly.ASTNode} cursorNode The node to connect to the markerNode. - * @returns {boolean} True if the marker and cursor are valid types, false - * otherwise. - * @protected - */ - logConnectionWarning(markerNode, cursorNode) { - if (!markerNode) { - this.warn('Cannot insert with no marked node.'); - return false; - } - - if (!cursorNode) { - this.warn('Cannot insert with no cursor node.'); - return false; - } - const markerType = markerNode.getType(); - const cursorType = cursorNode.getType(); - - // Check the marker for invalid types. - if (markerType == Blockly.ASTNode.types.FIELD) { - this.warn('Should not have been able to mark a field.'); - return false; - } else if (markerType == Blockly.ASTNode.types.BLOCK) { - this.warn('Should not have been able to mark a block.'); - return false; - } else if (markerType == Blockly.ASTNode.types.STACK) { - this.warn('Should not have been able to mark a stack.'); - return false; - } - - // Check the cursor for invalid types. - if (cursorType == Blockly.ASTNode.types.FIELD) { - this.warn('Cannot attach a field to anything else.'); - return false; - } else if (cursorType == Blockly.ASTNode.types.WORKSPACE) { - this.warn('Cannot attach a workspace to anything else.'); - return false; - } - return true; - } - - /** - * Disconnects the block from its parent and moves it to the position of the - * workspace node. - * @param {?Blockly.BlockSvg} block The block to be moved to the workspace. - * @param {!Blockly.ASTNode} wsNode The workspace node holding the position - * the block will be moved to. - * @returns {boolean} True if the block can be moved to the workspace, - * false otherwise. - * @protected - */ - moveBlockToWorkspace(block, wsNode) { - if (!block) { - return false; - } - if (block.isShadow()) { - this.warn('Cannot move a shadow block to the workspace.'); - return false; - } - if (block.getParent()) { - block.unplug(false); - } - block.moveTo(wsNode.getWsCoordinate()); - return true; - } - - /** - * Disconnects the child block from its parent block. No-op if the two given - * connections are unrelated. - * @param {!Blockly.RenderedConnection} movingConnection The connection that - * is being moved. - * @param {!Blockly.RenderedConnection} destConnection The connection to be - * moved to. - * @protected - */ - disconnectChild(movingConnection, destConnection) { - const movingBlock = movingConnection.getSourceBlock(); - const destBlock = destConnection.getSourceBlock(); - let inferiorConnection; - - if (movingBlock.getRootBlock() === destBlock.getRootBlock()) { - if (movingBlock.getDescendants(false).indexOf(destBlock) > -1) { - inferiorConnection = this.getInferiorConnection(destConnection); - if (inferiorConnection) { - inferiorConnection.disconnect(); - } - } else { - inferiorConnection = this.getInferiorConnection(movingConnection); - if (inferiorConnection) { - inferiorConnection.disconnect(); - } - } - } - } - - /** - * Tries to connect the given connections. - * - * If the given connections are not compatible try finding compatible - * connections on the source blocks of the given connections. - * @param {?Blockly.RenderedConnection} movingConnection The connection that - * is being moved. - * @param {?Blockly.RenderedConnection} destConnection The connection to be - * moved to. - * @returns {boolean} True if the two connections or their target connections - * were connected, false otherwise. - * @protected - */ - connect(movingConnection, destConnection) { - if (!movingConnection || !destConnection) { - return false; - } - - const movingInferior = this.getInferiorConnection(movingConnection); - const destSuperior = this.getSuperiorConnection(destConnection); - - const movingSuperior = this.getSuperiorConnection(movingConnection); - const destInferior = this.getInferiorConnection(destConnection); - - if ( - movingInferior && - destSuperior && - this.moveAndConnect(movingInferior, destSuperior) - ) { - return true; - // Try swapping the inferior and superior connections on the blocks. - } else if ( - movingSuperior && - destInferior && - this.moveAndConnect(movingSuperior, destInferior) - ) { - return true; - } else if (this.moveAndConnect(movingConnection, destConnection)) { - return true; - } else { - const checker = movingConnection.getConnectionChecker(); - const reason = checker.canConnectWithReason( - movingConnection, - destConnection, - false, - ); - this.warn( - 'Connection failed with error: ' + - checker.getErrorMessage(reason, movingConnection, destConnection), - ); - return false; - } - } - - /** - * Finds the inferior connection on the source block if the given connection - * is superior. - * @param {?Blockly.RenderedConnection} connection The connection trying to be - * connected. - * @returns {?Blockly.RenderedConnection} The inferior connection or null if - * none exists. - * @protected - */ - getInferiorConnection(connection) { - const block = /** @type{!Blockly.BlockSvg} */ (connection.getSourceBlock()); - if (!connection.isSuperior()) { - return connection; - } else if (block.previousConnection) { - return block.previousConnection; - } else if (block.outputConnection) { - return block.outputConnection; - } else { - return null; - } - } - - /** - * Finds a superior connection on the source block if the given connection is - * inferior. - * @param {?Blockly.RenderedConnection} connection The connection trying to be - * connected. - * @returns {?Blockly.RenderedConnection} The superior connection or null if - * none exists. - * @protected - */ - getSuperiorConnection(connection) { - if (connection.isSuperior()) { - return connection; - } else if (connection.targetConnection) { - return connection.targetConnection; - } - return null; - } - - /** - * Moves the moving connection to the target connection and connects them. - * @param {?Blockly.RenderedConnection} movingConnection The connection that - * is being moved. - * @param {?Blockly.RenderedConnection} destConnection The connection to be - * moved to. - * @returns {boolean} True if the connections were connected, false otherwise. - * @protected - */ - moveAndConnect(movingConnection, destConnection) { - if (!movingConnection || !destConnection) { - return false; - } - const movingBlock = movingConnection.getSourceBlock(); - const checker = movingConnection.getConnectionChecker(); - - if ( - checker.canConnect(movingConnection, destConnection, false) && - !destConnection.getSourceBlock().isShadow() - ) { - this.disconnectChild(movingConnection, destConnection); - - // Position the root block near the connection so it does not move the - // other block when they are connected. - if (!destConnection.isSuperior()) { - const rootBlock = movingBlock.getRootBlock(); - - const originalOffsetToTarget = { - x: destConnection.x - movingConnection.x, - y: destConnection.y - movingConnection.y, - }; - const originalOffsetInBlock = movingConnection - .getOffsetInBlock() - .clone(); - rootBlock.positionNearConnection( - movingConnection, - originalOffsetToTarget, - originalOffsetInBlock, - ); - } - destConnection.connect(movingConnection); - return true; - } - return false; - } - - /** - * Tries to connect the given block to the destination connection, making an - * intelligent guess about which connection to use on the moving block. - * @param {!Blockly.BlockSvg} block The block to move. - * @param {!Blockly.RenderedConnection} destConnection The connection to - * connect to. - * @returns {boolean} Whether the connection was successful. - * @protected - */ - insertBlock(block, destConnection) { - switch (destConnection.type) { - case Blockly.PREVIOUS_STATEMENT: - if (this.connect(block.nextConnection, destConnection)) { - return true; - } - break; - case Blockly.NEXT_STATEMENT: - if (this.connect(block.previousConnection, destConnection)) { - return true; - } - break; - case Blockly.INPUT_VALUE: - if (this.connect(block.outputConnection, destConnection)) { - return true; - } - break; - case Blockly.OUTPUT_VALUE: - for (let i = 0; i < block.inputList.length; i++) { - const inputConnection = /** @type {Blockly.RenderedConnection} */ ( - block.inputList[i].connection - ); - if ( - inputConnection && - inputConnection.type === Blockly.INPUT_VALUE && - this.connect(inputConnection, destConnection) - ) { - return true; - } - } - // If there are no input values pass the output and destination - // connections to connect_ to find a way to connect the two. - if ( - block.outputConnection && - this.connect(block.outputConnection, destConnection) - ) { - return true; - } - break; - } - this.warn('This block can not be inserted at the marked location.'); - return false; - } - - /** - * Disconnects the connection that the cursor is pointing to, and bump blocks. - * This is a no-op if the connection cannot be broken or if the cursor is not - * pointing to a connection. - * @param {!Blockly.WorkspaceSvg} workspace The workspace. - * @package - */ - disconnectBlocks(workspace) { - const curNode = workspace.getCursor().getCurNode(); - if (!curNode.isConnection()) { - this.log( - 'Cannot disconnect blocks when the cursor is not on a connection', - ); - return; - } - const curConnection = /** @type {!Blockly.RenderedConnection} */ ( - curNode.getLocation() - ); - if (!curConnection.isConnected()) { - this.log('Cannot disconnect unconnected connection'); - return; - } - const superiorConnection = curConnection.isSuperior() - ? curConnection - : curConnection.targetConnection; - - const inferiorConnection = curConnection.isSuperior() - ? curConnection.targetConnection - : curConnection; - - if (inferiorConnection.getSourceBlock().isShadow()) { - this.log('Cannot disconnect a shadow block'); - return; - } - superiorConnection.disconnect(); - inferiorConnection.bumpAwayFrom(superiorConnection); - - const rootBlock = superiorConnection.getSourceBlock().getRootBlock(); - rootBlock.bringToFront(); - - const connectionNode = - Blockly.ASTNode.createConnectionNode(superiorConnection); - workspace.getCursor().setCurNode(connectionNode); - } - - /** - * Moves the marker to the cursor's current location. - * @param {!Blockly.WorkspaceSvg} workspace The workspace. - * @protected - */ - markAtCursor(workspace) { - this.getMarker(workspace).setCurNode(workspace.getCursor().getCurNode()); - } - - /** - * Removes the marker from its current location and hide it. - * @param {!Blockly.WorkspaceSvg} workspace The workspace. - * @protected - */ - removeMark(workspace) { - const marker = this.getMarker(workspace); - marker.setCurNode(null); - marker.hide(); - } - - /** - * Enables accessibility mode. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to enable keyboard - * accessibility mode on. - * @package - */ - enableKeyboardAccessibility(workspace) { - if ( - this.workspaces.indexOf(workspace) > -1 && - !workspace.keyboardAccessibilityMode - ) { - workspace.keyboardAccessibilityMode = true; - this.focusWorkspace(workspace); - } - } - - /** - * Disables accessibility mode. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to disable keyboard - * accessibility mode on. - * @package - */ - disableKeyboardAccessibility(workspace) { - if ( - this.workspaces.indexOf(workspace) > -1 && - workspace.keyboardAccessibilityMode - ) { - workspace.keyboardAccessibilityMode = false; - workspace.getCursor().hide(); - this.getMarker(workspace).hide(); - if (this.getFlyoutCursor(workspace)) { - this.getFlyoutCursor(workspace).hide(); - } - } - } - - /** - * Navigation log handler. If loggingCallback is defined, use it. - * Otherwise just log to the console.log. - * @param {string} msg The message to log. - * @protected - */ - log(msg) { - if (this.loggingCallback) { - this.loggingCallback(Constants.LOGGING_MSG_TYPE.LOG, msg); - } else { - console.log(msg); - } - } - - /** - * Navigation warning handler. If loggingCallback is defined, use it. - * Otherwise call console.warn. - * @param {string} msg The warning message. - * @protected - */ - warn(msg) { - if (this.loggingCallback) { - this.loggingCallback(Constants.LOGGING_MSG_TYPE.WARN, msg); - } else { - console.warn(msg); - } - } - - /** - * Navigation error handler. If loggingCallback is defined, use it. - * Otherwise call console.error. - * @param {string} msg The error message. - * @protected - */ - error(msg) { - if (this.loggingCallback) { - this.loggingCallback(Constants.LOGGING_MSG_TYPE.ERROR, msg); - } else { - console.error(msg); - } - } - - /** - * Moves the workspace cursor in the given direction. - * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor is on. - * @param {number} xDirection -1 to move cursor left. 1 to move cursor right. - * @param {number} yDirection -1 to move cursor up. 1 to move cursor down. - * @returns {boolean} True if the current node is a workspace, false - * otherwise. - * @package - */ - moveWSCursor(workspace, xDirection, yDirection) { - const cursor = workspace.getCursor(); - const curNode = workspace.getCursor().getCurNode(); - - if (curNode.getType() !== Blockly.ASTNode.types.WORKSPACE) { - return false; - } - - const wsCoord = curNode.getWsCoordinate(); - const newX = xDirection * this.WS_MOVE_DISTANCE + wsCoord.x; - const newY = yDirection * this.WS_MOVE_DISTANCE + wsCoord.y; - - cursor.setCurNode( - Blockly.ASTNode.createWorkspaceNode( - workspace, - new Blockly.utils.Coordinate(newX, newY), - ), - ); - return true; - } - - /** - * Handles hitting the enter key on the workspace. - * @param {!Blockly.WorkspaceSvg} workspace The workspace. - * @package - */ - handleEnterForWS(workspace) { - const cursor = workspace.getCursor(); - const curNode = cursor.getCurNode(); - const nodeType = curNode.getType(); - if (nodeType == Blockly.ASTNode.types.FIELD) { - /** @type {!Blockly.Field} */ (curNode.getLocation()).showEditor(); - } else if ( - curNode.isConnection() || - nodeType == Blockly.ASTNode.types.WORKSPACE - ) { - this.markAtCursor(workspace); - } else if (nodeType == Blockly.ASTNode.types.BLOCK) { - this.warn('Cannot mark a block.'); - } else if (nodeType == Blockly.ASTNode.types.STACK) { - this.warn('Cannot mark a stack.'); - } - } - - /** - * Pastes the copied block to the marked location. - * @param {Blockly.BlockCopyData} copyData The data - * to paste into the workspace. - * @param {Blockly.WorkspaceSvg} workspace The workspace to paste the data - * into. - * @returns {boolean} True if the paste was sucessful, false otherwise. - * @package - */ - paste(copyData, workspace) { - let isHandled = false; - Blockly.Events.setGroup(true); - const block = /** @type {Blockly.BlockSvg} */ ( - Blockly.clipboard.paste(copyData, workspace) - ); - if (block) { - isHandled = this.insertPastedBlock(workspace, block); - } - Blockly.Events.setGroup(false); - return isHandled; - } - - /** - * Inserts the pasted block at the marked location if a compatible connection - * exists. If no connection has been marked, or there is not a compatible - * connection then the block is placed on the workspace. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to paste the block - * on. - * @param {!Blockly.BlockSvg} block The block to paste. - * @returns {boolean} True if the block was pasted to the workspace, false - * otherwise. - * @protected - */ - insertPastedBlock(workspace, block) { - let isHandled = false; - const markedNode = workspace.getMarker(this.MARKER_NAME).getCurNode(); - if (markedNode) { - isHandled = this.tryToConnectMarkerAndCursor( - workspace, - markedNode, - Blockly.ASTNode.createBlockNode(block), - ); - } - return isHandled; - } - - /** - * Triggers a flyout button's callback. - * @param {!Blockly.WorkspaceSvg} workspace The main workspace. The workspace - * containing a flyout with a button. - * @package - */ - triggerButtonCallback(workspace) { - const button = /** @type {!Blockly.FlyoutButton} */ ( - this.getFlyoutCursor(workspace).getCurNode().getLocation() - ); - const buttonCallback = workspace.flyoutButtonCallbacks.get( - button.callbackKey, - ); - if (typeof buttonCallback === 'function') { - buttonCallback(button); - } else { - throw new Error('No callback function found for flyout button.'); - } - } - - /** - * Removes the change listeners on all registered workspaces. - * @package - */ - dispose() { - for (const workspace of this.workspaces) { - this.removeWorkspace(workspace); - } - } -} diff --git a/plugins/keyboard-navigation/src/navigation_controller.js b/plugins/keyboard-navigation/src/navigation_controller.js deleted file mode 100644 index 8f3820a90..000000000 --- a/plugins/keyboard-navigation/src/navigation_controller.js +++ /dev/null @@ -1,1020 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @fileoverview Registers all of the keyboard shortcuts that are necessary for - * navigating blockly using the keyboard. - * @author aschmiedt@google.com (Abby Schmiedt) - */ - -import './gesture_monkey_patch'; - -import * as Blockly from 'blockly/core'; - -import * as Constants from './constants'; -import {Navigation} from './navigation'; - -/** - * Class for registering shortcuts for keyboard navigation. - */ -export class NavigationController { - /** Data copied by the copy or cut keyboard shortcuts. */ - copyData = null; - - /** The workspace a copy or cut keyboard shortcut happened in. */ - copyWorkspace = null; - - /** - * Constructor used for registering shortcuts. - * This will register any default shortcuts for keyboard navigation. - * This is intended to be a singleton. - * @param {!Navigation=} optNavigation The class that handles keyboard - * navigation shortcuts. (Ex: inserting a block, focusing the flyout). - */ - constructor(optNavigation) { - /** - * Handles any keyboard navigation shortcuts. - * @type {!Navigation} - * @public - */ - this.navigation = optNavigation || new Navigation(); - } - - /** - * Registers the default keyboard shortcuts for keyboard navigation. - * @public - */ - init() { - this.addShortcutHandlers(); - this.registerDefaults(); - } - - /** - * Adds methods to core Blockly components that allows them to handle keyboard - * shortcuts when in keyboard navigation mode. - * @protected - */ - addShortcutHandlers() { - if (Blockly.FieldDropdown) { - Blockly.FieldDropdown.prototype.onShortcut = this.fieldDropdownHandler; - } - - if (Blockly.Toolbox) { - Blockly.Toolbox.prototype.onShortcut = this.toolboxHandler; - } - } - - /** - * Removes methods on core Blockly components that allows them to handle - * keyboard shortcuts. - * @protected - */ - removeShortcutHandlers() { - if (Blockly.FieldDropdown) { - Blockly.FieldDropdown.prototype.onShortcut = null; - } - - if (Blockly.Toolbox) { - Blockly.Toolbox.prototype.onShortcut = null; - } - } - - /** - * Handles the given keyboard shortcut. - * This is only triggered when keyboard accessibility mode is enabled. - * @param {!Blockly.ShortcutRegistry.KeyboardShortcut} shortcut The shortcut - * to be handled. - * @returns {boolean} True if the field handled the shortcut, - * false otherwise. - * @this {Blockly.FieldDropdown} - * @protected - */ - fieldDropdownHandler(shortcut) { - if (this.menu_) { - switch (shortcut.name) { - case Constants.SHORTCUT_NAMES.PREVIOUS: - this.menu_.highlightPrevious(); - return true; - case Constants.SHORTCUT_NAMES.NEXT: - this.menu_.highlightNext(); - return true; - default: - return false; - } - } - // If we haven't already handled the shortcut, let the default Field - // handler try. - return Blockly.Field.prototype.onShortcut.call(this, shortcut); - } - - /** - * Handles the given keyboard shortcut. - * This is only triggered when keyboard accessibility mode is enabled. - * @param {!Blockly.ShortcutRegistry.KeyboardShortcut} shortcut The shortcut - * to be handled. - * @returns {boolean} True if the toolbox handled the shortcut, - * false otherwise. - * @this {Blockly.Toolbox} - * @protected - */ - toolboxHandler(shortcut) { - if (!this.selectedItem_) { - return false; - } - switch (shortcut.name) { - case Constants.SHORTCUT_NAMES.PREVIOUS: - return this.selectPrevious_(); - case Constants.SHORTCUT_NAMES.OUT: - return this.selectParent_(); - case Constants.SHORTCUT_NAMES.NEXT: - return this.selectNext_(); - case Constants.SHORTCUT_NAMES.IN: - return this.selectChild_(); - default: - return false; - } - } - - /** - * Adds all necessary event listeners and markers to a workspace for keyboard - * navigation to work. This must be called for keyboard navigation to work - * on a workspace. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to add keyboard - * navigation to. - * @public - */ - addWorkspace(workspace) { - this.navigation.addWorkspace(workspace); - } - - /** - * Removes all necessary event listeners and markers to a workspace for - * keyboard navigation to work. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to remove keyboard - * navigation from. - * @public - */ - removeWorkspace(workspace) { - this.navigation.removeWorkspace(workspace); - } - - /** - * Turns on keyboard navigation. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to turn on keyboard - * navigation for. - * @public - */ - enable(workspace) { - this.navigation.enableKeyboardAccessibility(workspace); - } - - /** - * Turns off keyboard navigation. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to turn off keyboard - * navigation on. - * @public - */ - disable(workspace) { - this.navigation.disableKeyboardAccessibility(workspace); - } - - /** - * Gives the cursor to the field to handle if the cursor is on a field. - * @param {!Blockly.WorkspaceSvg} workspace The workspace to check. - * @param {!Blockly.ShortcutRegistry.KeyboardShortcut} shortcut The shortcut - * to give to the field. - * @returns {boolean} True if the shortcut was handled by the field, false - * otherwise. - * @protected - */ - fieldShortcutHandler(workspace, shortcut) { - const cursor = workspace.getCursor(); - if (!cursor || !cursor.getCurNode()) { - return false; - } - const curNode = cursor.getCurNode(); - if (curNode.getType() === Blockly.ASTNode.types.FIELD) { - return /** @type {!Blockly.Field} */ (curNode.getLocation()).onShortcut( - shortcut, - ); - } - return false; - } - - /** - * Keyboard shortcut to go to the previous location when in keyboard - * navigation mode. - * @protected - */ - registerPrevious() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const previousShortcut = { - name: Constants.SHORTCUT_NAMES.PREVIOUS, - preconditionFn: (workspace) => { - return workspace.keyboardAccessibilityMode; - }, - callback: (workspace, e, shortcut) => { - const flyout = workspace.getFlyout(); - const toolbox = workspace.getToolbox(); - let isHandled = false; - switch (this.navigation.getState(workspace)) { - case Constants.STATE.WORKSPACE: - isHandled = this.fieldShortcutHandler(workspace, shortcut); - if (!isHandled) { - workspace.getCursor().prev(); - isHandled = true; - } - return isHandled; - case Constants.STATE.FLYOUT: - isHandled = this.fieldShortcutHandler(workspace, shortcut); - if (!isHandled) { - flyout.getWorkspace().getCursor().prev(); - isHandled = true; - } - return isHandled; - case Constants.STATE.TOOLBOX: - return toolbox && typeof toolbox.onShortcut == 'function' - ? toolbox.onShortcut(shortcut) - : false; - default: - return false; - } - }, - }; - - Blockly.ShortcutRegistry.registry.register(previousShortcut); - Blockly.ShortcutRegistry.registry.addKeyMapping( - Blockly.utils.KeyCodes.W, - previousShortcut.name, - ); - } - - /** - * Keyboard shortcut to turn keyboard navigation on or off. - * @protected - */ - registerToggleKeyboardNav() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const toggleKeyboardNavShortcut = { - name: Constants.SHORTCUT_NAMES.TOGGLE_KEYBOARD_NAV, - callback: (workspace) => { - if (workspace.keyboardAccessibilityMode) { - this.navigation.disableKeyboardAccessibility(workspace); - } else { - this.navigation.enableKeyboardAccessibility(workspace); - } - return true; - }, - }; - - Blockly.ShortcutRegistry.registry.register(toggleKeyboardNavShortcut); - const ctrlShiftK = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.K, - [Blockly.utils.KeyCodes.CTRL, Blockly.utils.KeyCodes.SHIFT], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - ctrlShiftK, - toggleKeyboardNavShortcut.name, - ); - } - - /** - * Keyboard shortcut to go to the out location when in keyboard navigation - * mode. - * @protected - */ - registerOut() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const outShortcut = { - name: Constants.SHORTCUT_NAMES.OUT, - preconditionFn: (workspace) => { - return workspace.keyboardAccessibilityMode; - }, - callback: (workspace, e, shortcut) => { - const toolbox = workspace.getToolbox(); - let isHandled = false; - switch (this.navigation.getState(workspace)) { - case Constants.STATE.WORKSPACE: - isHandled = this.fieldShortcutHandler(workspace, shortcut); - if (!isHandled) { - workspace.getCursor().out(); - isHandled = true; - } - return isHandled; - case Constants.STATE.FLYOUT: - this.navigation.focusToolbox(workspace); - return true; - case Constants.STATE.TOOLBOX: - return toolbox && typeof toolbox.onShortcut == 'function' - ? toolbox.onShortcut(shortcut) - : false; - default: - return false; - } - }, - }; - - Blockly.ShortcutRegistry.registry.register(outShortcut); - Blockly.ShortcutRegistry.registry.addKeyMapping( - Blockly.utils.KeyCodes.A, - outShortcut.name, - ); - } - - /** - * Keyboard shortcut to go to the next location when in keyboard navigation - * mode. - * @protected - */ - registerNext() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const nextShortcut = { - name: Constants.SHORTCUT_NAMES.NEXT, - preconditionFn: (workspace) => { - return workspace.keyboardAccessibilityMode; - }, - callback: (workspace, e, shortcut) => { - const toolbox = workspace.getToolbox(); - const flyout = workspace.getFlyout(); - let isHandled = false; - switch (this.navigation.getState(workspace)) { - case Constants.STATE.WORKSPACE: - isHandled = this.fieldShortcutHandler(workspace, shortcut); - if (!isHandled) { - workspace.getCursor().next(); - isHandled = true; - } - return isHandled; - case Constants.STATE.FLYOUT: - isHandled = this.fieldShortcutHandler(workspace, shortcut); - if (!isHandled) { - flyout.getWorkspace().getCursor().next(); - isHandled = true; - } - return isHandled; - case Constants.STATE.TOOLBOX: - return toolbox && typeof toolbox.onShortcut == 'function' - ? toolbox.onShortcut(shortcut) - : false; - default: - return false; - } - }, - }; - - Blockly.ShortcutRegistry.registry.register(nextShortcut); - Blockly.ShortcutRegistry.registry.addKeyMapping( - Blockly.utils.KeyCodes.S, - nextShortcut.name, - ); - } - - /** - * Keyboard shortcut to go to the in location when in keyboard navigation - * mode. - * @protected - */ - registerIn() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const inShortcut = { - name: Constants.SHORTCUT_NAMES.IN, - preconditionFn: (workspace) => { - return workspace.keyboardAccessibilityMode; - }, - callback: (workspace, e, shortcut) => { - const toolbox = workspace.getToolbox(); - let isHandled = false; - switch (this.navigation.getState(workspace)) { - case Constants.STATE.WORKSPACE: - isHandled = this.fieldShortcutHandler(workspace, shortcut); - if (!isHandled) { - workspace.getCursor().in(); - isHandled = true; - } - return isHandled; - case Constants.STATE.TOOLBOX: - isHandled = - toolbox && typeof toolbox.onShortcut == 'function' - ? toolbox.onShortcut(shortcut) - : false; - if (!isHandled) { - this.navigation.focusFlyout(workspace); - } - return true; - default: - return false; - } - }, - }; - - Blockly.ShortcutRegistry.registry.register(inShortcut); - Blockly.ShortcutRegistry.registry.addKeyMapping( - Blockly.utils.KeyCodes.D, - inShortcut.name, - ); - } - - /** - * Keyboard shortcut to connect a block to a marked location when in keyboard - * navigation mode. - * @protected - */ - registerInsert() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const insertShortcut = { - name: Constants.SHORTCUT_NAMES.INSERT, - preconditionFn: (workspace) => { - return ( - workspace.keyboardAccessibilityMode && !workspace.options.readOnly - ); - }, - callback: (workspace) => { - switch (this.navigation.getState(workspace)) { - case Constants.STATE.WORKSPACE: - return this.navigation.connectMarkerAndCursor(workspace); - default: - return false; - } - }, - }; - - Blockly.ShortcutRegistry.registry.register(insertShortcut); - Blockly.ShortcutRegistry.registry.addKeyMapping( - Blockly.utils.KeyCodes.I, - insertShortcut.name, - ); - } - - /** - * Keyboard shortcut to mark a location when in keyboard navigation mode. - * @protected - */ - registerMark() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const markShortcut = { - name: Constants.SHORTCUT_NAMES.MARK, - preconditionFn: (workspace) => { - return ( - workspace.keyboardAccessibilityMode && !workspace.options.readOnly - ); - }, - callback: (workspace) => { - let flyoutCursor; - let curNode; - let nodeType; - - switch (this.navigation.getState(workspace)) { - case Constants.STATE.WORKSPACE: - this.navigation.handleEnterForWS(workspace); - return true; - case Constants.STATE.FLYOUT: - flyoutCursor = this.navigation.getFlyoutCursor(workspace); - if (!flyoutCursor) { - return false; - } - curNode = flyoutCursor.getCurNode(); - nodeType = curNode.getType(); - - switch (nodeType) { - case Blockly.ASTNode.types.STACK: - this.navigation.insertFromFlyout(workspace); - break; - case Blockly.ASTNode.types.BUTTON: - this.navigation.triggerButtonCallback(workspace); - break; - } - - return true; - default: - return false; - } - }, - }; - - Blockly.ShortcutRegistry.registry.register(markShortcut); - Blockly.ShortcutRegistry.registry.addKeyMapping( - Blockly.utils.KeyCodes.ENTER, - markShortcut.name, - ); - } - - /** - * Keyboard shortcut to disconnect two blocks when in keyboard navigation - * mode. - * @protected - */ - registerDisconnect() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const disconnectShortcut = { - name: Constants.SHORTCUT_NAMES.DISCONNECT, - preconditionFn: (workspace) => { - return ( - workspace.keyboardAccessibilityMode && !workspace.options.readOnly - ); - }, - callback: (workspace) => { - switch (this.navigation.getState(workspace)) { - case Constants.STATE.WORKSPACE: - this.navigation.disconnectBlocks(workspace); - return true; - default: - return false; - } - }, - }; - - Blockly.ShortcutRegistry.registry.register(disconnectShortcut); - Blockly.ShortcutRegistry.registry.addKeyMapping( - Blockly.utils.KeyCodes.X, - disconnectShortcut.name, - ); - } - - /** - * Keyboard shortcut to focus on the toolbox when in keyboard navigation - * mode. - * @protected - */ - registerToolboxFocus() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const focusToolboxShortcut = { - name: Constants.SHORTCUT_NAMES.TOOLBOX, - preconditionFn: (workspace) => { - return ( - workspace.keyboardAccessibilityMode && !workspace.options.readOnly - ); - }, - callback: (workspace) => { - switch (this.navigation.getState(workspace)) { - case Constants.STATE.WORKSPACE: - if (!workspace.getToolbox()) { - this.navigation.focusFlyout(workspace); - } else { - this.navigation.focusToolbox(workspace); - } - return true; - default: - return false; - } - }, - }; - - Blockly.ShortcutRegistry.registry.register(focusToolboxShortcut); - Blockly.ShortcutRegistry.registry.addKeyMapping( - Blockly.utils.KeyCodes.T, - focusToolboxShortcut.name, - ); - } - - /** - * Keyboard shortcut to exit the current location and focus on the workspace - * when in keyboard navigation mode. - * @protected - */ - registerExit() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const exitShortcut = { - name: Constants.SHORTCUT_NAMES.EXIT, - preconditionFn: (workspace) => { - return workspace.keyboardAccessibilityMode; - }, - callback: (workspace) => { - switch (this.navigation.getState(workspace)) { - case Constants.STATE.FLYOUT: - this.navigation.focusWorkspace(workspace); - return true; - case Constants.STATE.TOOLBOX: - this.navigation.focusWorkspace(workspace); - return true; - default: - return false; - } - }, - }; - - Blockly.ShortcutRegistry.registry.register(exitShortcut, true); - Blockly.ShortcutRegistry.registry.addKeyMapping( - Blockly.utils.KeyCodes.ESC, - exitShortcut.name, - true, - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - Blockly.utils.KeyCodes.E, - exitShortcut.name, - true, - ); - } - - /** - * Keyboard shortcut to move the cursor on the workspace to the left when in - * keyboard navigation mode. - * @protected - */ - registerWorkspaceMoveLeft() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const wsMoveLeftShortcut = { - name: Constants.SHORTCUT_NAMES.MOVE_WS_CURSOR_LEFT, - preconditionFn: (workspace) => { - return ( - workspace.keyboardAccessibilityMode && !workspace.options.readOnly - ); - }, - callback: (workspace) => { - return this.navigation.moveWSCursor(workspace, -1, 0); - }, - }; - - Blockly.ShortcutRegistry.registry.register(wsMoveLeftShortcut); - const shiftA = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.A, - [Blockly.utils.KeyCodes.SHIFT], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - shiftA, - wsMoveLeftShortcut.name, - ); - } - - /** - * Keyboard shortcut to move the cursor on the workspace to the right when in - * keyboard navigation mode. - * @protected - */ - registerWorkspaceMoveRight() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const wsMoveRightShortcut = { - name: Constants.SHORTCUT_NAMES.MOVE_WS_CURSOR_RIGHT, - preconditionFn: (workspace) => { - return ( - workspace.keyboardAccessibilityMode && !workspace.options.readOnly - ); - }, - callback: (workspace) => { - return this.navigation.moveWSCursor(workspace, 1, 0); - }, - }; - - Blockly.ShortcutRegistry.registry.register(wsMoveRightShortcut); - const shiftD = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.D, - [Blockly.utils.KeyCodes.SHIFT], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - shiftD, - wsMoveRightShortcut.name, - ); - } - - /** - * Keyboard shortcut to move the cursor on the workspace up when in keyboard - * navigation mode. - * @protected - */ - registerWorkspaceMoveUp() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const wsMoveUpShortcut = { - name: Constants.SHORTCUT_NAMES.MOVE_WS_CURSOR_UP, - preconditionFn: (workspace) => { - return ( - workspace.keyboardAccessibilityMode && !workspace.options.readOnly - ); - }, - callback: (workspace) => { - return this.navigation.moveWSCursor(workspace, 0, -1); - }, - }; - - Blockly.ShortcutRegistry.registry.register(wsMoveUpShortcut); - const shiftW = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.W, - [Blockly.utils.KeyCodes.SHIFT], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - shiftW, - wsMoveUpShortcut.name, - ); - } - - /** - * Keyboard shortcut to move the cursor on the workspace down when in - * keyboard navigation mode. - * @protected - */ - registerWorkspaceMoveDown() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const wsMoveDownShortcut = { - name: Constants.SHORTCUT_NAMES.MOVE_WS_CURSOR_DOWN, - preconditionFn: (workspace) => { - return ( - workspace.keyboardAccessibilityMode && !workspace.options.readOnly - ); - }, - callback: (workspace) => { - return this.navigation.moveWSCursor(workspace, 0, 1); - }, - }; - - Blockly.ShortcutRegistry.registry.register(wsMoveDownShortcut); - const shiftW = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.S, - [Blockly.utils.KeyCodes.SHIFT], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - shiftW, - wsMoveDownShortcut.name, - ); - } - - /** - * Keyboard shortcut to copy the block the cursor is currently on. - * @protected - */ - registerCopy() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const copyShortcut = { - name: Constants.SHORTCUT_NAMES.COPY, - preconditionFn: (workspace) => { - if ( - workspace.keyboardAccessibilityMode && - !workspace.options.readOnly - ) { - const curNode = workspace.getCursor().getCurNode(); - if (curNode && curNode.getSourceBlock()) { - const sourceBlock = curNode.getSourceBlock(); - return ( - !Blockly.Gesture.inProgress() && - sourceBlock && - sourceBlock.isDeletable() && - sourceBlock.isMovable() - ); - } - } - return false; - }, - callback: (workspace) => { - const sourceBlock = /** @type {Blockly.BlockSvg} */ ( - workspace.getCursor().getCurNode().getSourceBlock() - ); - workspace.hideChaff(); - this.copyData = sourceBlock.toCopyData(); - this.copyWorkspace = sourceBlock.workspace; - return !!this.copyData; - }, - }; - - Blockly.ShortcutRegistry.registry.register(copyShortcut); - - const ctrlC = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.C, - [Blockly.utils.KeyCodes.CTRL], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - ctrlC, - copyShortcut.name, - true, - ); - - const altC = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.C, - [Blockly.utils.KeyCodes.ALT], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - altC, - copyShortcut.name, - true, - ); - - const metaC = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.C, - [Blockly.utils.KeyCodes.META], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - metaC, - copyShortcut.name, - true, - ); - } - - /** - * Register shortcut to paste the copied block to the marked location. - * @protected - */ - registerPaste() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const pasteShortcut = { - name: Constants.SHORTCUT_NAMES.PASTE, - preconditionFn: (workspace) => { - return ( - workspace.keyboardAccessibilityMode && - !workspace.options.readOnly && - !Blockly.Gesture.inProgress() - ); - }, - callback: () => { - if (!this.copyData || !this.copyWorkspace) return false; - return this.navigation.paste(this.copyData, this.copyWorkspace); - }, - }; - - Blockly.ShortcutRegistry.registry.register(pasteShortcut); - - const ctrlV = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.V, - [Blockly.utils.KeyCodes.CTRL], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - ctrlV, - pasteShortcut.name, - true, - ); - - const altV = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.V, - [Blockly.utils.KeyCodes.ALT], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - altV, - pasteShortcut.name, - true, - ); - - const metaV = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.V, - [Blockly.utils.KeyCodes.META], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - metaV, - pasteShortcut.name, - true, - ); - } - - /** - * Keyboard shortcut to copy and delete the block the cursor is on using - * ctrl+x, cmd+x, or alt+x. - * @protected - */ - registerCut() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const cutShortcut = { - name: Constants.SHORTCUT_NAMES.CUT, - preconditionFn: (workspace) => { - if ( - workspace.keyboardAccessibilityMode && - !workspace.options.readOnly - ) { - const curNode = workspace.getCursor().getCurNode(); - if (curNode && curNode.getSourceBlock()) { - const sourceBlock = curNode.getSourceBlock(); - return ( - !Blockly.Gesture.inProgress() && - sourceBlock && - sourceBlock.isDeletable() && - sourceBlock.isMovable() && - !sourceBlock.workspace.isFlyout - ); - } - } - return false; - }, - callback: (workspace) => { - const sourceBlock = /** @type {Blockly.BlockSvg} */ ( - workspace.getCursor().getCurNode().getSourceBlock() - ); - this.copyData = sourceBlock.toCopyData(); - this.copyWorkspace = sourceBlock.workspace; - this.navigation.moveCursorOnBlockDelete(workspace, sourceBlock); - sourceBlock.checkAndDelete(); - return true; - }, - }; - - Blockly.ShortcutRegistry.registry.register(cutShortcut); - - const ctrlX = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.X, - [Blockly.utils.KeyCodes.CTRL], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - ctrlX, - cutShortcut.name, - true, - ); - - const altX = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.X, - [Blockly.utils.KeyCodes.ALT], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - altX, - cutShortcut.name, - true, - ); - - const metaX = Blockly.ShortcutRegistry.registry.createSerializedKey( - Blockly.utils.KeyCodes.X, - [Blockly.utils.KeyCodes.META], - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - metaX, - cutShortcut.name, - true, - ); - } - - /** - * Registers shortcut to delete the block the cursor is on using delete or - * backspace. - * @protected - */ - registerDelete() { - /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */ - const deleteShortcut = { - name: Constants.SHORTCUT_NAMES.DELETE, - preconditionFn: function (workspace) { - if ( - workspace.keyboardAccessibilityMode && - !workspace.options.readOnly - ) { - const curNode = workspace.getCursor().getCurNode(); - if (curNode && curNode.getSourceBlock()) { - const sourceBlock = curNode.getSourceBlock(); - return sourceBlock && sourceBlock.isDeletable(); - } - } - return false; - }, - callback: (workspace, e) => { - const sourceBlock = workspace.getCursor().getCurNode().getSourceBlock(); - // Delete or backspace. - // Stop the browser from going back to the previous page. - // Do this first to prevent an error in the delete code from resulting - // in data loss. - e.preventDefault(); - // Don't delete while dragging. Jeez. - if (Blockly.Gesture.inProgress()) { - return false; - } - this.navigation.moveCursorOnBlockDelete(workspace, sourceBlock); - sourceBlock.checkAndDelete(); - return true; - }, - }; - Blockly.ShortcutRegistry.registry.register(deleteShortcut); - Blockly.ShortcutRegistry.registry.addKeyMapping( - Blockly.utils.KeyCodes.DELETE, - deleteShortcut.name, - true, - ); - Blockly.ShortcutRegistry.registry.addKeyMapping( - Blockly.utils.KeyCodes.BACKSPACE, - deleteShortcut.name, - true, - ); - } - - /** - * Registers all default keyboard shortcut items for keyboard navigation. This - * should be called once per instance of KeyboardShortcutRegistry. - * @protected - */ - registerDefaults() { - this.registerPrevious(); - this.registerNext(); - this.registerIn(); - this.registerOut(); - - this.registerDisconnect(); - this.registerExit(); - this.registerInsert(); - this.registerMark(); - this.registerToolboxFocus(); - this.registerToggleKeyboardNav(); - - this.registerWorkspaceMoveDown(); - this.registerWorkspaceMoveLeft(); - this.registerWorkspaceMoveUp(); - this.registerWorkspaceMoveRight(); - - this.registerCopy(); - this.registerPaste(); - this.registerCut(); - this.registerDelete(); - } - - /** - * Removes all the keyboard navigation shortcuts. - * @public - */ - dispose() { - const shortcutNames = Object.values(Constants.SHORTCUT_NAMES); - for (const name of shortcutNames) { - Blockly.ShortcutRegistry.registry.unregister(name); - } - this.removeShortcutHandlers(); - this.navigation.dispose(); - } -} diff --git a/plugins/keyboard-navigation/test/index.html b/plugins/keyboard-navigation/test/index.html deleted file mode 100644 index e0db0d325..000000000 --- a/plugins/keyboard-navigation/test/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - Blockly Plugin Test - - - - -

- Keyboard Navigation is our first step towards an accessible Blockly.
- For more information on how the default keyboard navigation works please - see the -
documentation. -
-
- - Cursors
- The cursor controls how the user navigates the blocks, inputs, fields and - connections on a workspace. This demo shows three different cursors:
- Default Cursor: This cursor uses previous, next, in, and out to - navigate through the different parts of a block. See the - developer documentation - for more information.
- Basic Cursor: Uses pre order traversal to allow users to navigate - through everything using only the previous and next command.
- Line Cursor: We tried to make this cursor mimic a text editor. - Navigating up and down will take the cursor to the next and previous - "line" of code. Navigating in and out will move the cursor through all the - fields and inputs in that "line" of code. -

- - - -
- - - diff --git a/plugins/keyboard-navigation/test/index.js b/plugins/keyboard-navigation/test/index.js deleted file mode 100644 index 919ab3103..000000000 --- a/plugins/keyboard-navigation/test/index.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @fileoverview Plugin test. - */ - -import {createPlayground} from '@blockly/dev-tools'; -import * as Blockly from 'blockly'; -import {toolbox} from './toolbox'; - -import {LineCursor, NavigationController} from '../src'; - -let controller; - -/** - * Create a workspace. - * @param {HTMLElement} blocklyDiv The blockly container div. - * @param {!Blockly.BlocklyOptions} options The Blockly options. - * @returns {!Blockly.WorkspaceSvg} The created workspace. - */ -function createWorkspace(blocklyDiv, options) { - const workspace = Blockly.inject(blocklyDiv, options); - controller.addWorkspace(workspace); - return workspace; -} - -document.addEventListener('DOMContentLoaded', function () { - controller = new NavigationController(); - controller.init(); - const defaultOptions = { - toolbox: toolbox, - }; - createPlayground( - document.getElementById('root'), - createWorkspace, - defaultOptions, - ); -}); - -document - .getElementById('accessibilityModeCheck') - .addEventListener('click', (e) => { - if (e.target.checked) { - controller.enable(Blockly.getMainWorkspace()); - } else { - controller.disable(Blockly.getMainWorkspace()); - } - }); - -document.getElementById('cursorChanger').addEventListener('change', (e) => { - const cursorType = e.target.value; - const accessibilityCheckbox = document.getElementById( - 'accessibilityModeCheck', - ); - const markerManager = Blockly.getMainWorkspace().getMarkerManager(); - const oldCurNode = markerManager.getCursor().getCurNode(); - - document.getElementById('cursorChanger').value = cursorType; - if (cursorType === 'basic') { - Blockly.ASTNode.NAVIGATE_ALL_FIELDS = false; - markerManager.setCursor(new Blockly.BasicCursor()); - } else if (cursorType === 'line') { - Blockly.ASTNode.NAVIGATE_ALL_FIELDS = true; - markerManager.setCursor(new LineCursor()); - } else { - Blockly.ASTNode.NAVIGATE_ALL_FIELDS = false; - markerManager.setCursor(new Blockly.Cursor()); - } - if (oldCurNode) { - markerManager.getCursor().setCurNode(oldCurNode); - } - - if (!accessibilityCheckbox.checked) { - accessibilityCheckbox.checked = true; - controller.enable(Blockly.getMainWorkspace()); - } - - document.activeElement.blur(); -}); diff --git a/plugins/keyboard-navigation/test/navigation_modify_test.mocha.js b/plugins/keyboard-navigation/test/navigation_modify_test.mocha.js deleted file mode 100644 index 492b98f9c..000000000 --- a/plugins/keyboard-navigation/test/navigation_modify_test.mocha.js +++ /dev/null @@ -1,691 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -const chai = require('chai'); -const Blockly = require('blockly'); -const {Navigation} = require('../src/navigation'); -const assert = chai.assert; -const {testHelpers} = require('@blockly/dev-tools'); -const {captureWarnings} = testHelpers; - -suite('Insert/Modify', function () { - /** - * Check that modify failed. - * @param {Navigation} navigation The class under test. - * @param {Blockly.WorkspaceSvg} workspace The main workspace. - * @param {!Blockly.ASTNode} markerNode The node to try to connect to. - * @param {!Blockly.ASTNode} cursorNode The node to connect to the markerNode. - */ - function assertModifyFails(navigation, workspace, markerNode, cursorNode) { - let modifyResult; - const warnings = captureWarnings(function () { - modifyResult = navigation.tryToConnectMarkerAndCursor( - workspace, - markerNode, - cursorNode, - ); - }); - assert.isFalse(modifyResult); - assert.equal( - warnings.length, - 1, - 'Expecting 1 warnings for why modify failed.', - ); - } - - /** - * Define default blocks. - */ - function defineTestBlocks() { - Blockly.defineBlocksWithJsonArray([ - { - type: 'stack_block', - message0: '', - previousStatement: null, - nextStatement: null, - }, - { - type: 'row_block', - message0: '%1', - args0: [ - { - type: 'input_value', - name: 'INPUT', - }, - ], - output: null, - }, - { - type: 'statement_block', - message0: '%1', - args0: [ - { - type: 'input_statement', - name: 'NAME', - }, - ], - previousStatement: null, - nextStatement: null, - colour: 230, - tooltip: '', - helpUrl: '', - }, - ]); - } - - setup(function () { - this.jsdomCleanup = require('jsdom-global')( - '
', - ); - // We are running these tests in node even thought they require a rendered - // workspace, which doesn't exactly work. The rendering system expects - // cancelAnimationFrame to be defined so we need to define it. - window.cancelAnimationFrame = function () {}; - - // NOTE: block positions chosen such that they aren't unintentionally - // bumped out of bounds during tests. - const xmlText = ` - - - - - - - - - `; - - defineTestBlocks(); - - this.workspace = Blockly.inject('blocklyDiv', { - toolbox: ` - `, - }); - Blockly.Xml.domToWorkspace( - Blockly.utils.xml.textToDom(xmlText), - this.workspace, - ); - this.navigation = new Navigation(); - this.navigation.addWorkspace(this.workspace); - - this.stack_block_1 = this.workspace.getBlockById('stack_block_1'); - this.stack_block_2 = this.workspace.getBlockById('stack_block_2'); - this.row_block_1 = this.workspace.getBlockById('row_block_1'); - this.row_block_2 = this.workspace.getBlockById('row_block_2'); - this.statement_block_1 = this.workspace.getBlockById('statement_block_1'); - this.statement_block_2 = this.workspace.getBlockById('statement_block_2'); - this.navigation.enableKeyboardAccessibility(this.workspace); - }); - - teardown(function () { - delete Blockly.Blocks['stack_block']; - delete Blockly.Blocks['row_block']; - delete Blockly.Blocks['statement_block']; - window.cancelAnimationFrame = undefined; - this.jsdomCleanup(); - }); - - suite('Marked Connection', function () { - suite('Marker on next', function () { - setup(function () { - this.markerNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_1.nextConnection, - ); - }); - test('Cursor on workspace', function () { - const cursorNode = Blockly.ASTNode.createWorkspaceNode( - this.workspace, - new Blockly.utils.Coordinate(0, 0), - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - test('Cursor on compatible connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_2.previousConnection, - ); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.equal(this.stack_block_1.getNextBlock().id, 'stack_block_2'); - }); - test('Cursor on incompatible connection', function () { - // Connect method will try to find a way to connect blocks with - // incompatible types. - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_2.nextConnection, - ); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.equal(this.stack_block_1.getNextBlock(), this.stack_block_2); - }); - test('Cursor on really incompatible connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.row_block_1.outputConnection, - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - assert.isNull(this.stack_block_1.getNextBlock()); - }); - test('Cursor on block', function () { - const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_2); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.equal(this.stack_block_1.getNextBlock().id, 'stack_block_2'); - }); - }); - - suite('Marker on previous', function () { - setup(function () { - this.markerNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_1.previousConnection, - ); - }); - test('Cursor on compatible connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_2.nextConnection, - ); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.equal(this.stack_block_1.getPreviousBlock().id, 'stack_block_2'); - }); - test('Cursor on incompatible connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_2.previousConnection, - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - assert.isNull(this.stack_block_1.getPreviousBlock()); - }); - test('Cursor on really incompatible connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.row_block_1.outputConnection, - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - assert.isNull(this.stack_block_1.getNextBlock()); - }); - test('Cursor on block', function () { - const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_2); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.equal(this.stack_block_1.getPreviousBlock().id, 'stack_block_2'); - }); - test('Cursor on incompatible block', function () { - const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_1); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - assert.isNull(this.stack_block_1.getPreviousBlock()); - }); - }); - - suite('Marker on value input', function () { - setup(function () { - this.markerNode = Blockly.ASTNode.createConnectionNode( - this.row_block_1.inputList[0].connection, - ); - }); - test('Cursor on compatible connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.row_block_2.outputConnection, - ); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.equal(this.row_block_2.getParent().id, 'row_block_1'); - }); - test('Cursor on incompatible connection', function () { - // Connect method will try to find a way to connect blocks with - // incompatible types. - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.row_block_2.inputList[0].connection, - ); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.equal( - this.row_block_1.inputList[0].connection.targetBlock(), - this.row_block_2, - ); - }); - test('Cursor on really incompatible connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_1.previousConnection, - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - test('Cursor on block', function () { - const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_2); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.equal(this.row_block_2.getParent().id, 'row_block_1'); - }); - }); - - suite('Marked Statement input', function () { - setup(function () { - this.statement_block_1.inputList[0].connection.connect( - this.stack_block_1.previousConnection, - ); - this.stack_block_1.nextConnection.connect( - this.stack_block_2.previousConnection, - ); - this.markerNode = Blockly.ASTNode.createInputNode( - this.statement_block_1.inputList[0], - ); - }); - test('Cursor on block inside statement', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_2.previousConnection, - ); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.equal( - this.stack_block_2.previousConnection.targetBlock(), - this.statement_block_1, - ); - }); - test('Cursor on stack', function () { - const cursorNode = Blockly.ASTNode.createStackNode( - this.statement_block_2, - ); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.equal( - this.statement_block_2.getParent().id, - 'statement_block_1', - ); - }); - test('Cursor on incompatible type', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.row_block_1.outputConnection, - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - assert.isNull(this.row_block_1.getParent()); - }); - }); - - suite('Marker on output', function () { - setup(function () { - this.markerNode = Blockly.ASTNode.createConnectionNode( - this.row_block_1.outputConnection, - ); - }); - test('Cursor on compatible connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.row_block_2.inputList[0].connection, - ); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.equal(this.row_block_1.getParent().id, 'row_block_2'); - }); - test('Cursor on incompatible connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.row_block_2.outputConnection, - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - test('Cursor on really incompatible connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_1.previousConnection, - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - test('Cursor on block', function () { - const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_2); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.equal(this.row_block_1.getParent().id, 'row_block_2'); - }); - }); - }); - - suite('Marked Workspace', function () { - setup(function () { - this.markerNode = Blockly.ASTNode.createWorkspaceNode( - this.workspace, - new Blockly.utils.Coordinate(100, 200), - ); - }); - test('Cursor on row block', function () { - const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_1); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - const pos = this.row_block_1.getRelativeToSurfaceXY(); - assert.equal(pos.x, 100); - assert.equal(pos.y, 200); - }); - - test('Cursor on output connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.row_block_1.outputConnection, - ); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - const pos = this.row_block_1.getRelativeToSurfaceXY(); - assert.equal(pos.x, 100); - assert.equal(pos.y, 200); - }); - - test('Cursor on previous connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_1.previousConnection, - ); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - const pos = this.stack_block_1.getRelativeToSurfaceXY(); - assert.equal(pos.x, 100); - assert.equal(pos.y, 200); - }); - - test('Cursor on input connection', function () { - // Move the source block to the marked location on the workspace. - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.row_block_1.inputList[0].connection, - ); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - }); - - test('Cursor on next connection', function () { - // Move the source block to the marked location on the workspace. - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_1.nextConnection, - ); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - }); - - test('Cursor on child block (row)', function () { - this.row_block_1.inputList[0].connection.connect( - this.row_block_2.outputConnection, - ); - - const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_2); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.isNull(this.row_block_2.getParent()); - const pos = this.row_block_2.getRelativeToSurfaceXY(); - assert.equal(pos.x, 100); - assert.equal(pos.y, 200); - }); - - test('Cursor on child block (stack)', function () { - this.stack_block_1.nextConnection.connect( - this.stack_block_2.previousConnection, - ); - - const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_2); - assert.isTrue( - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - this.markerNode, - cursorNode, - ), - ); - assert.isNull(this.stack_block_2.getParent()); - const pos = this.stack_block_2.getRelativeToSurfaceXY(); - assert.equal(pos.x, 100); - assert.equal(pos.y, 200); - }); - - test('Cursor on workspace', function () { - const cursorNode = Blockly.ASTNode.createWorkspaceNode( - this.workspace, - new Blockly.utils.Coordinate(100, 100), - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - }); - - suite('Marked Block', function () { - suite('Marked any block', function () { - // These tests are using a stack block, but do not depend on the type of - // the block. - setup(function () { - this.markerNode = Blockly.ASTNode.createBlockNode(this.stack_block_1); - }); - test('Cursor on workspace', function () { - const cursorNode = Blockly.ASTNode.createWorkspaceNode( - this.workspace, - new Blockly.utils.Coordinate(100, 100), - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - }); - suite('Marked stack block', function () { - setup(function () { - this.markerNode = Blockly.ASTNode.createBlockNode(this.stack_block_1); - }); - test('Cursor on row block', function () { - const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_1); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - test('Cursor on stack block', function () { - const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_1); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - test('Cursor on next connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_2.nextConnection, - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - test('Cursor on previous connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.stack_block_2.previousConnection, - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - }); - suite('Marked row block', function () { - setup(function () { - this.markerNode = Blockly.ASTNode.createBlockNode(this.row_block_1); - }); - test('Cursor on stack block', function () { - const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_1); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - test('Cursor on row block', function () { - const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_1); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - test('Cursor on value input connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.row_block_2.inputList[0].connection, - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - test('Cursor on output connection', function () { - const cursorNode = Blockly.ASTNode.createConnectionNode( - this.row_block_2.outputConnection, - ); - assertModifyFails( - this.navigation, - this.workspace, - this.markerNode, - cursorNode, - ); - }); - }); - }); -}); diff --git a/plugins/keyboard-navigation/test/navigation_test.mocha.js b/plugins/keyboard-navigation/test/navigation_test.mocha.js deleted file mode 100644 index ed5c67e98..000000000 --- a/plugins/keyboard-navigation/test/navigation_test.mocha.js +++ /dev/null @@ -1,1365 +0,0 @@ -/** - * @license - * Copyright 2020 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @fileoverview - * @author aschmiedt@google.com (Abby Schmiedt) - */ -'use strict'; - -const chai = require('chai'); -const sinon = require('sinon'); - -const Blockly = require('blockly'); -const {NavigationController, Constants} = require('../src/index'); -const { - createNavigationWorkspace, - createKeyDownEvent, -} = require('./test_helper'); - -suite('Navigation', function () { - setup(function () { - this.jsdomCleanup = require('jsdom-global')( - '
', - ); - // We are running these tests in node even thought they require a rendered - // workspace, which doesn't exactly work. The rendering system expects - // cancelAnimationFrame to be defined so we need to define it. - window.cancelAnimationFrame = function () {}; - this.controller = new NavigationController(); - this.controller.init(); - this.navigation = this.controller.navigation; - - this.getContextStub = sinon - .stub(window.HTMLCanvasElement.prototype, 'getContext') - .callsFake(() => { - return { - measureText: function () { - return {width: 0}; - }, - }; - }); - }); - - teardown(function () { - this.controller.dispose(); - window.cancelAnimationFrame = undefined; - this.jsdomCleanup(); - sinon.restore(); - }); - - // Test that toolbox key handlers call through to the right functions and - // transition correctly between toolbox, workspace, and flyout. - suite('Tests toolbox keys', function () { - setup(function () { - Blockly.defineBlocksWithJsonArray([ - { - type: 'basic_block', - message0: '%1', - args0: [ - { - type: 'field_input', - name: 'TEXTFIELD', - text: 'test', - }, - ], - }, - ]); - this.workspace = createNavigationWorkspace(this.navigation, true); - this.navigation.focusToolbox(this.workspace); - }); - - teardown(function () { - this.navigation.removeWorkspace(this.workspace); - this.workspace.dispose(); - sinon.restore(); - delete Blockly.Blocks['basic_block']; - }); - - const testCases = [ - [ - 'Calls toolbox selectNext', - createKeyDownEvent(Blockly.utils.KeyCodes.S, 'NotAField'), - 'selectNext_', - ], - [ - 'Calls toolbox selectPrevious', - createKeyDownEvent(Blockly.utils.KeyCodes.W, 'NotAField'), - 'selectPrevious_', - ], - [ - 'Calls toolbox selectParent', - createKeyDownEvent(Blockly.utils.KeyCodes.D, 'NotAField'), - 'selectChild_', - ], - [ - 'Calls toolbox selectChild', - createKeyDownEvent(Blockly.utils.KeyCodes.A, 'NotAField'), - 'selectParent_', - ], - ]; - - testCases.forEach(function (testCase) { - const testCaseName = testCase[0]; - const mockEvent = testCase[1]; - const stubName = testCase[2]; - test(testCaseName, function () { - const toolbox = this.workspace.getToolbox(); - const selectStub = sinon.stub(toolbox, stubName); - toolbox.selectedItem_ = toolbox.contents_[0]; - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - sinon.assert.called(selectStub); - }); - }); - - test('Go to flyout', function () { - const navigation = this.navigation; - const mockEvent = createKeyDownEvent( - Blockly.utils.KeyCodes.D, - 'NotAField', - ); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.equal( - navigation.getState(this.workspace), - Constants.STATE.FLYOUT, - ); - - const flyoutCursor = navigation.getFlyoutCursor(this.workspace); - // See test_helper.js for hardcoded field values. - chai.assert.equal( - flyoutCursor.getCurNode().getLocation().getFieldValue('TEXTFIELD'), - 'first', - ); - }); - - test('Focuses workspace from toolbox (e)', function () { - const navigation = this.navigation; - navigation.setState(this.workspace, Constants.STATE.TOOLBOX); - const mockEvent = createKeyDownEvent( - Blockly.utils.KeyCodes.E, - 'NotAField', - ); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.equal( - navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - test('Focuses workspace from toolbox (escape)', function () { - const navigation = this.navigation; - navigation.setState(this.workspace, Constants.STATE.TOOLBOX); - const mockEvent = createKeyDownEvent( - Blockly.utils.KeyCodes.ESC, - 'NotAField', - ); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.equal( - navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - }); - - // Test that flyout key handlers call through to the right functions and - // transition correctly between toolbox, workspace, and flyout. - suite('Tests flyout keys', function () { - setup(function () { - Blockly.defineBlocksWithJsonArray([ - { - type: 'basic_block', - message0: '%1', - args0: [ - { - type: 'field_input', - name: 'TEXTFIELD', - text: 'test', - }, - ], - }, - ]); - this.workspace = createNavigationWorkspace(this.navigation, true); - this.navigation.focusToolbox(this.workspace); - this.navigation.focusFlyout(this.workspace); - }); - - teardown(function () { - this.navigation.removeWorkspace(this.workspace); - this.workspace.dispose(); - sinon.restore(); - delete Blockly.Blocks['basic_block']; - }); - // Should be a no-op - test('Previous at beginning', function () { - const mockEvent = createKeyDownEvent( - Blockly.utils.KeyCodes.W, - 'NotAField', - ); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.FLYOUT, - ); - // See test_helper.js for hardcoded field values. - chai.assert.equal( - this.navigation - .getFlyoutCursor(this.workspace) - .getCurNode() - .getLocation() - .getFieldValue('TEXTFIELD'), - 'first', - ); - }); - test('Previous', function () { - const flyoutBlocks = this.workspace - .getFlyout() - .getWorkspace() - .getTopBlocks(); - this.navigation - .getFlyoutCursor(this.workspace) - .setCurNode(Blockly.ASTNode.createStackNode(flyoutBlocks[1])); - let flyoutBlock = this.navigation - .getFlyoutCursor(this.workspace) - .getCurNode() - .getLocation(); - // See test_helper.js for hardcoded field values. - chai.assert.equal(flyoutBlock.getFieldValue('TEXTFIELD'), 'second'); - - const mockEvent = createKeyDownEvent( - Blockly.utils.KeyCodes.W, - 'NotAField', - ); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.FLYOUT, - ); - flyoutBlock = this.navigation - .getFlyoutCursor(this.workspace) - .getCurNode() - .getLocation(); - // See test_helper.js for hardcoded field values. - chai.assert.equal(flyoutBlock.getFieldValue('TEXTFIELD'), 'first'); - }); - - test('Next', function () { - const mockEvent = createKeyDownEvent( - Blockly.utils.KeyCodes.S, - 'NotAField', - ); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.FLYOUT, - ); - const flyoutBlock = this.navigation - .getFlyoutCursor(this.workspace) - .getCurNode() - .getLocation(); - // See test_helper.js for hardcoded field values. - chai.assert.equal(flyoutBlock.getFieldValue('TEXTFIELD'), 'second'); - }); - - test('Out', function () { - const mockEvent = createKeyDownEvent( - Blockly.utils.KeyCodes.A, - 'NotAField', - ); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.TOOLBOX, - ); - }); - - test('Mark', function () { - const mockEvent = createKeyDownEvent( - Blockly.utils.KeyCodes.ENTER, - 'NotAField', - ); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - chai.assert.equal(this.workspace.getTopBlocks().length, 1); - }); - - test('Mark - Disabled Block', function () { - this.navigation.loggingCallback = function (type, msg) { - chai.assert.equal(msg, "Can't insert a disabled block."); - }; - const flyout = this.workspace.getFlyout(); - const topBlock = flyout.getWorkspace().getTopBlocks()[0]; - topBlock.setEnabled(false); - const mockEvent = createKeyDownEvent( - Blockly.utils.KeyCodes.ENTER, - 'NotAField', - ); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.FLYOUT, - ); - chai.assert.equal(this.workspace.getTopBlocks().length, 0); - this.navigation.loggingCallback = null; - }); - - test('Exit', function () { - const mockEvent = createKeyDownEvent( - Blockly.utils.KeyCodes.ESC, - 'NotAField', - ); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - }); - // Test that workspace key handlers call through to the right functions and - // transition correctly between toolbox, workspace, and flyout. - suite('Tests workspace keys', function () { - setup(function () { - Blockly.defineBlocksWithJsonArray([ - { - type: 'basic_block', - message0: '%1', - args0: [ - { - type: 'field_input', - name: 'TEXTFIELD', - text: 'test', - }, - ], - previousStatement: null, - nextStatement: null, - }, - ]); - this.workspace = createNavigationWorkspace(this.navigation, true); - this.basicBlock = this.workspace.newBlock('basic_block'); - }); - - teardown(function () { - this.navigation.removeWorkspace(this.workspace); - this.workspace.dispose(); - sinon.restore(); - delete Blockly.Blocks['basic_block']; - }); - - test('Previous', function () { - const prevSpy = sinon.spy(this.workspace.getCursor(), 'prev'); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - const wEvent = createKeyDownEvent(Blockly.utils.KeyCodes.W, ''); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, wEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - sinon.assert.calledOnce(prevSpy); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - - test('Next', function () { - const nextSpy = sinon.spy(this.workspace.getCursor(), 'next'); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - const sEvent = createKeyDownEvent(Blockly.utils.KeyCodes.S, ''); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, sEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - sinon.assert.calledOnce(nextSpy); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - - test('Out', function () { - const outSpy = sinon.spy(this.workspace.getCursor(), 'out'); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - const aEvent = createKeyDownEvent(Blockly.utils.KeyCodes.A, ''); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, aEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - sinon.assert.calledOnce(outSpy); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - - test('In', function () { - const inSpy = sinon.spy(this.workspace.getCursor(), 'in'); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - const dEvent = createKeyDownEvent(Blockly.utils.KeyCodes.D, ''); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, dEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - sinon.assert.calledOnce(inSpy); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - - test('Insert', function () { - const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock); - this.navigation.getMarker(this.workspace).setCurNode(blockNode); - // Stub modify as we are not testing its behavior, only if it was called. - // Otherwise, there is a warning because there is no marked node. - const modifyStub = sinon - .stub(this.navigation, 'tryToConnectMarkerAndCursor') - .returns(true); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - const iEvent = createKeyDownEvent(Blockly.utils.KeyCodes.I, ''); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, iEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - sinon.assert.calledOnce(modifyStub); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - - test('Mark', function () { - this.workspace - .getCursor() - .setCurNode( - Blockly.ASTNode.createConnectionNode( - this.basicBlock.previousConnection, - ), - ); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - const enterEvent = createKeyDownEvent(Blockly.utils.KeyCodes.ENTER, ''); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, enterEvent); - - const markedNode = this.workspace - .getMarker(this.navigation.MARKER_NAME) - .getCurNode(); - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.equal( - markedNode.getLocation(), - this.basicBlock.previousConnection, - ); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - - test('Toolbox', function () { - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - const tEvent = createKeyDownEvent(Blockly.utils.KeyCodes.T, ''); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, tEvent); - - const firstCategory = this.workspace.getToolbox().contents_[0]; - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.equal( - this.workspace.getToolbox().getSelectedItem(), - firstCategory, - ); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.TOOLBOX, - ); - }); - }); - - suite('Test key press', function () { - setup(function () { - Blockly.defineBlocksWithJsonArray([ - { - type: 'basic_block', - message0: '%1', - args0: [ - { - type: 'field_input', - name: 'TEXTFIELD', - text: 'test', - }, - ], - }, - ]); - this.workspace = createNavigationWorkspace(this.navigation, true); - - this.workspace.getCursor().drawer_ = null; - this.basicBlock = this.workspace.newBlock('basic_block'); - this.basicBlock.initSvg(); - this.basicBlock.render(); - }); - teardown(function () { - this.navigation.removeWorkspace(this.workspace); - this.workspace.dispose(); - sinon.restore(); - delete Blockly.Blocks['basic_block']; - }); - - test('Action does not exist', function () { - const block = this.workspace.getTopBlocks()[0]; - const field = block.inputList[0].fieldRow[0]; - const fieldSpy = sinon.spy(field, 'onShortcut'); - const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.N, ''); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - this.workspace - .getCursor() - .setCurNode(Blockly.ASTNode.createFieldNode(field)); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isFalse(keyDownSpy.returned(true)); - sinon.assert.notCalled(fieldSpy); - }); - - test('Action exists - field handles action', function () { - const block = this.workspace.getTopBlocks()[0]; - const field = block.inputList[0].fieldRow[0]; - const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.A, ''); - const fieldSpy = sinon.stub(field, 'onShortcut').returns(true); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - this.workspace - .getCursor() - .setCurNode(Blockly.ASTNode.createFieldNode(field)); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - sinon.assert.calledOnce(fieldSpy); - }); - - test('Action exists - field does not handle action', function () { - const block = this.workspace.getTopBlocks()[0]; - const field = block.inputList[0].fieldRow[0]; - const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.A, ''); - const fieldSpy = sinon.spy(field, 'onShortcut'); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - this.workspace - .getCursor() - .setCurNode(Blockly.ASTNode.createFieldNode(field)); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - sinon.assert.calledOnce(fieldSpy); - }); - - test('Toggle Action Off', function () { - const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.K, '', [ - Blockly.utils.KeyCodes.SHIFT, - Blockly.utils.KeyCodes.CTRL, - ]); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - this.workspace.keyboardAccessibilityMode = true; - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.isFalse(this.workspace.keyboardAccessibilityMode); - }); - - test('Toggle Action On', function () { - const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.K, '', [ - Blockly.utils.KeyCodes.SHIFT, - Blockly.utils.KeyCodes.CTRL, - ]); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - this.workspace.keyboardAccessibilityMode = false; - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - chai.assert.isTrue(this.workspace.keyboardAccessibilityMode); - }); - - suite('Test key press in read only mode', function () { - setup(function () { - Blockly.defineBlocksWithJsonArray([ - { - type: 'field_block', - message0: '%1 %2', - args0: [ - { - type: 'field_input', - name: 'TEXTFIELD', - text: 'test', - }, - { - type: 'input_value', - name: 'NAME', - }, - ], - previousStatement: null, - nextStatement: null, - colour: 230, - tooltip: '', - helpUrl: '', - }, - ]); - this.workspace = createNavigationWorkspace(this.navigation, true, true); - Blockly.common.setMainWorkspace(this.workspace); - this.workspace.getCursor().drawer_ = null; - - this.fieldBlock1 = this.workspace.newBlock('field_block'); - this.fieldBlock1.initSvg(); - this.fieldBlock1.render(); - }); - - teardown(function () { - this.navigation.removeWorkspace(this.workspace); - this.workspace.dispose(); - sinon.restore(); - delete Blockly.Blocks['field_block']; - }); - - test('Perform valid action for read only', function () { - const astNode = Blockly.ASTNode.createBlockNode(this.fieldBlock1); - const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.S, ''); - this.workspace.getCursor().setCurNode(astNode); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(true)); - }); - - test('Perform invalid action for read only', function () { - const astNode = Blockly.ASTNode.createBlockNode(this.fieldBlock1); - const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.I, ''); - this.workspace.getCursor().setCurNode(astNode); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(false)); - }); - - test('Try to perform action on a field', function () { - const field = this.fieldBlock1.inputList[0].fieldRow[0]; - const astNode = Blockly.ASTNode.createFieldNode(field); - const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.ENTER, ''); - this.workspace.getCursor().setCurNode(astNode); - const keyDownSpy = sinon.spy( - Blockly.ShortcutRegistry.registry, - 'onKeyDown', - ); - - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - - chai.assert.isTrue(keyDownSpy.returned(false)); - }); - }); - }); - suite('Insert Functions', function () { - setup(function () { - Blockly.defineBlocksWithJsonArray([ - { - type: 'basic_block', - message0: '%1', - args0: [ - { - type: 'field_input', - name: 'TEXTFIELD', - text: 'test', - }, - ], - previousStatement: null, - nextStatement: null, - }, - ]); - - this.workspace = createNavigationWorkspace(this.navigation, true); - - const basicBlock = this.workspace.newBlock('basic_block'); - const basicBlock2 = this.workspace.newBlock('basic_block'); - - this.basicBlock = basicBlock; - this.basicBlock2 = basicBlock2; - }); - - teardown(function () { - this.navigation.removeWorkspace(this.workspace); - this.workspace.dispose(); - sinon.restore(); - delete Blockly.Blocks['basic_block']; - }); - - test('Insert from flyout with a valid connection marked', function () { - const previousConnection = this.basicBlock.previousConnection; - const prevNode = Blockly.ASTNode.createConnectionNode(previousConnection); - this.workspace - .getMarker(this.navigation.MARKER_NAME) - .setCurNode(prevNode); - - this.navigation.focusToolbox(this.workspace); - this.navigation.focusFlyout(this.workspace); - this.navigation.insertFromFlyout(this.workspace); - - const insertedBlock = this.basicBlock.previousConnection.targetBlock(); - - chai.assert.isTrue(insertedBlock !== null); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - - test('Insert Block from flyout without marking a connection', function () { - this.navigation.focusToolbox(this.workspace); - this.navigation.focusFlyout(this.workspace); - this.navigation.insertFromFlyout(this.workspace); - - const numBlocks = this.workspace.getTopBlocks().length; - - // Make sure the block was not connected to anything - chai.assert.isNull(this.basicBlock.previousConnection.targetConnection); - chai.assert.isNull(this.basicBlock.nextConnection.targetConnection); - - // Make sure that the block was added to the workspace - chai.assert.equal(numBlocks, 3); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - - test('Connect two blocks that are on the workspace', function () { - const targetNode = Blockly.ASTNode.createConnectionNode( - this.basicBlock.previousConnection, - ); - const sourceNode = Blockly.ASTNode.createConnectionNode( - this.basicBlock2.nextConnection, - ); - - this.navigation.tryToConnectMarkerAndCursor( - this.workspace, - targetNode, - sourceNode, - ); - const insertedBlock = this.basicBlock.previousConnection.targetBlock(); - - chai.assert.isNotNull(insertedBlock); - }); - }); - suite('Connect Blocks', function () { - setup(function () { - Blockly.defineBlocksWithJsonArray([ - { - type: 'basic_block', - message0: '', - previousStatement: null, - nextStatement: null, - }, - { - type: 'inline_block', - message0: '%1 %2', - args0: [ - { - type: 'input_value', - name: 'NAME', - }, - { - type: 'input_value', - name: 'NAME', - }, - ], - inputsInline: true, - output: null, - tooltip: '', - helpUrl: '', - }, - ]); - - this.workspace = createNavigationWorkspace(this.navigation, true); - - const basicBlock = this.workspace.newBlock('basic_block'); - const basicBlock2 = this.workspace.newBlock('basic_block'); - const basicBlock3 = this.workspace.newBlock('basic_block'); - const basicBlock4 = this.workspace.newBlock('basic_block'); - - const inlineBlock1 = this.workspace.newBlock('inline_block'); - const inlineBlock2 = this.workspace.newBlock('inline_block'); - const inlineBlock3 = this.workspace.newBlock('inline_block'); - - this.basicBlock = basicBlock; - this.basicBlock2 = basicBlock2; - this.basicBlock3 = basicBlock3; - this.basicBlock4 = basicBlock4; - - this.inlineBlock1 = inlineBlock1; - this.inlineBlock2 = inlineBlock2; - this.inlineBlock3 = inlineBlock3; - - this.basicBlock.nextConnection.connect( - this.basicBlock2.previousConnection, - ); - - this.basicBlock3.nextConnection.connect( - this.basicBlock4.previousConnection, - ); - - this.inlineBlock1.inputList[0].connection.connect( - this.inlineBlock2.outputConnection, - ); - }); - - teardown(function () { - this.navigation.removeWorkspace(this.workspace); - this.workspace.dispose(); - sinon.restore(); - delete Blockly.Blocks['basic_block']; - delete Blockly.Blocks['inline_block']; - }); - - test('Connect cursor on previous into stack', function () { - const markedLocation = this.basicBlock2.previousConnection; - const cursorLocation = this.basicBlock3.previousConnection; - - this.navigation.connect(cursorLocation, markedLocation); - - chai.assert.equal( - this.basicBlock.nextConnection.targetBlock(), - this.basicBlock3, - ); - chai.assert.equal( - this.basicBlock2.previousConnection.targetBlock(), - this.basicBlock4, - ); - }); - - test('Connect marker on previous into stack', function () { - const markedLocation = this.basicBlock3.previousConnection; - const cursorLocation = this.basicBlock2.previousConnection; - - this.navigation.connect(cursorLocation, markedLocation); - - chai.assert.equal( - this.basicBlock.nextConnection.targetBlock(), - this.basicBlock3, - ); - chai.assert.equal( - this.basicBlock2.previousConnection.targetBlock(), - this.basicBlock4, - ); - }); - - test('Connect cursor on next into stack', function () { - const markedLocation = this.basicBlock2.previousConnection; - const cursorLocation = this.basicBlock4.nextConnection; - - this.navigation.connect(cursorLocation, markedLocation); - - chai.assert.equal( - this.basicBlock.nextConnection.targetBlock(), - this.basicBlock4, - ); - chai.assert.isNull(this.basicBlock3.nextConnection.targetConnection); - }); - - test('Connect cursor with parents', function () { - const markedLocation = this.basicBlock3.previousConnection; - const cursorLocation = this.basicBlock2.nextConnection; - - this.navigation.connect(cursorLocation, markedLocation); - - chai.assert.equal( - this.basicBlock3.previousConnection.targetBlock(), - this.basicBlock2, - ); - }); - - test('Try to connect input that is descendant of output', function () { - const markedLocation = this.inlineBlock2.inputList[0].connection; - const cursorLocation = this.inlineBlock1.outputConnection; - - this.navigation.connect(cursorLocation, markedLocation); - - chai.assert.isNull(this.inlineBlock2.outputConnection.targetBlock()); - chai.assert.equal( - this.inlineBlock1.outputConnection.targetBlock(), - this.inlineBlock2, - ); - }); - test.skip('Do not connect a shadow block', function () { - // TODO(https://github.com/google/blockly-samples/issues/538): Update - // tests after this bug is fixed. - this.inlineBlock2.setShadow(true); - - const markedLocation = this.inlineBlock2.outputConnection; - const cursorLocation = this.inlineBlock3.inputList[0].connection; - const didConnect = this.navigation.connect( - cursorLocation, - markedLocation, - ); - chai.assert.isFalse(didConnect); - chai.assert.isNull(this.inlineBlock2.outputConnection.targetBlock()); - chai.assert.equal( - this.inlineBlock1.outputConnection.targetBlock(), - this.inlineBlock2, - ); - }); - }); - - suite('Test cursor move on block delete', function () { - setup(function () { - Blockly.defineBlocksWithJsonArray([ - { - type: 'basic_block', - message0: '', - previousStatement: null, - nextStatement: null, - }, - ]); - this.workspace = createNavigationWorkspace(this.navigation, true); - - this.basicBlockA = this.workspace.newBlock('basic_block'); - this.basicBlockB = this.workspace.newBlock('basic_block'); - }); - - teardown(function () { - this.navigation.removeWorkspace(this.workspace); - this.workspace.dispose(); - sinon.restore(); - delete Blockly.Blocks['basic_block']; - }); - - test('Delete block - has parent ', function () { - this.basicBlockA.nextConnection.connect( - this.basicBlockB.previousConnection, - ); - const astNode = Blockly.ASTNode.createBlockNode(this.basicBlockB); - // Set the cursor to be on the child block - this.workspace.getCursor().setCurNode(astNode); - // Remove the child block - const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.DELETE, ''); - - // Actions that happen when a block is deleted were causing problems. - // Since this is not what we are trying to test and does not effect the - // feature, disable events. - Blockly.Events.disable(); - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - Blockly.Events.enable(); - - chai.assert.equal( - this.workspace.getCursor().getCurNode().getType(), - Blockly.ASTNode.types.NEXT, - ); - }); - - test('Delete block - no parent ', function () { - const astNode = Blockly.ASTNode.createBlockNode(this.basicBlockB); - this.workspace.getCursor().setCurNode(astNode); - - const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.DELETE, ''); - - // Actions that happen when a block is deleted were causing problems. - // Since this is not what we are trying to test and does not effect the - // feature, disable events. - Blockly.Events.disable(); - Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent); - Blockly.Events.enable(); - - chai.assert.equal( - this.workspace.getCursor().getCurNode().getType(), - Blockly.ASTNode.types.WORKSPACE, - ); - }); - - test('Delete parent block', function () { - this.basicBlockA.nextConnection.connect( - this.basicBlockB.previousConnection, - ); - const astNode = Blockly.ASTNode.createBlockNode(this.basicBlockB); - const mockDeleteBlockEvent = { - blockId: this.basicBlockA, - ids: [this.basicBlockA.id, this.basicBlockB.id], - }; - // Set the cursor to be on the child block - this.workspace.getCursor().setCurNode(astNode); - // Remove the parent block - this.navigation.handleBlockDeleteByDrag( - this.workspace, - mockDeleteBlockEvent, - ); - chai.assert.equal( - this.workspace.getCursor().getCurNode().getType(), - Blockly.ASTNode.types.WORKSPACE, - ); - }); - - test('Delete top block in stack', function () { - this.basicBlockA.nextConnection.connect( - this.basicBlockB.previousConnection, - ); - const astNode = Blockly.ASTNode.createStackNode(this.basicBlockA); - const mockDeleteBlockEvent = { - blockId: this.basicBlockA.id, - ids: [this.basicBlockA.id, this.basicBlockB.id], - }; - // Set the cursor to be on the stack - this.workspace.getCursor().setCurNode(astNode); - // Remove the top block in the stack - this.navigation.handleBlockDeleteByDrag( - this.workspace, - mockDeleteBlockEvent, - ); - chai.assert.equal( - this.workspace.getCursor().getCurNode().getType(), - Blockly.ASTNode.types.WORKSPACE, - ); - }); - }); - - suite('Test workspace listener', function () { - setup(function () { - Blockly.defineBlocksWithJsonArray([ - { - type: 'basic_block', - message0: '%1', - args0: [ - { - type: 'field_input', - name: 'TEXTFIELD', - text: 'test', - }, - ], - previousStatement: null, - nextStatement: null, - }, - ]); - this.workspace = createNavigationWorkspace(this.navigation, true); - this.workspaceChangeListener = this.navigation.wsChangeWrapper; - this.basicBlockA = this.workspace.newBlock('basic_block'); - }); - - teardown(function () { - this.navigation.removeWorkspace(this.workspace); - this.workspace.dispose(); - delete Blockly.Blocks['basic_block']; - sinon.restore(); - }); - - test('Handle block mutation', function () { - const e = { - type: Blockly.Events.BLOCK_CHANGE, - element: 'mutation', - blockId: this.basicBlockA.id, - workspaceId: this.workspace.id, - }; - const cursor = this.workspace.getCursor(); - const nextNode = Blockly.ASTNode.createConnectionNode( - this.basicBlockA.nextConnection, - ); - cursor.setCurNode(nextNode); - this.workspaceChangeListener(e); - chai.assert.equal( - cursor.getCurNode().getType(), - Blockly.ASTNode.types.BLOCK, - ); - }); - test('Handle workspace click', function () { - const e = { - type: Blockly.Events.CLICK, - workspaceId: this.workspace.id, - }; - this.navigation.focusFlyout(this.workspace); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.FLYOUT, - ); - - this.workspaceChangeListener(e); - - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - test('Focus toolbox if category clicked', function () { - const e = { - type: Blockly.Events.TOOLBOX_ITEM_SELECT, - workspaceId: this.workspace.id, - newItem: true, - }; - const toolboxFocusStub = sinon.spy(this.navigation, 'focusToolbox'); - - this.navigation.focusWorkspace(this.workspace); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - - this.workspaceChangeListener(e); - - sinon.assert.calledOnce(toolboxFocusStub); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.TOOLBOX, - ); - }); - test('Focus workspace if toolbox is unselected', function () { - const e = { - type: Blockly.Events.TOOLBOX_ITEM_SELECT, - workspaceId: this.workspace.id, - newItem: false, - }; - const resetFlyoutStub = sinon.spy(this.navigation, 'resetFlyout'); - this.navigation.setState(this.workspace, Constants.STATE.TOOLBOX); - - this.workspaceChangeListener(e); - - sinon.assert.calledOnce(resetFlyoutStub); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - test('Focus workspace when block created on workspace', function () { - const e = { - type: Blockly.Events.BLOCK_CREATE, - workspaceId: this.workspace.id, - }; - const resetFlyoutStub = sinon.spy(this.navigation, 'resetFlyout'); - // Only works when someone is in the flyout. - this.navigation.setState(this.workspace, Constants.STATE.FLYOUT); - - this.workspaceChangeListener(e); - - sinon.assert.calledOnce(resetFlyoutStub); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.WORKSPACE, - ); - }); - }); - - suite('Test simple flyout listener', function () { - setup(function () { - Blockly.defineBlocksWithJsonArray([ - { - type: 'basic_block', - message0: '%1', - args0: [ - { - type: 'field_input', - name: 'TEXTFIELD', - text: 'test', - }, - ], - }, - ]); - this.workspace = createNavigationWorkspace(this.navigation, true); - this.flyoutChangeListener = this.navigation.flyoutChangeWrapper; - this.basicBlockA = this.workspace.newBlock('basic_block'); - - this.navigation.focusToolbox(this.workspace); - this.workspace.getFlyout().autoClose = false; - }); - - teardown(function () { - delete Blockly.Blocks['basic_block']; - this.navigation.removeWorkspace(this.workspace); - this.workspace.dispose(); - sinon.restore(); - }); - test('Handle block click in flyout - click event', function () { - const flyout = this.workspace.getFlyout(); - const flyoutWorkspace = flyout.getWorkspace(); - const firstFlyoutBlock = flyoutWorkspace.getTopBlocks()[0]; - const e = { - type: Blockly.Events.CLICK, - workspaceId: flyoutWorkspace.id, - targetType: 'block', - blockId: firstFlyoutBlock.id, - }; - const flyoutCursor = flyoutWorkspace.getCursor(); - this.navigation.focusWorkspace(this.workspace); - - this.flyoutChangeListener(e); - - chai.assert.equal( - flyoutCursor.getCurNode().getType(), - Blockly.ASTNode.types.STACK, - ); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.FLYOUT, - ); - }); - test('Handle block click in flyout - select event', function () { - const flyout = this.workspace.getFlyout(); - const flyoutWorkspace = flyout.getWorkspace(); - const firstFlyoutBlock = flyoutWorkspace.getTopBlocks()[0]; - const e = { - type: Blockly.Events.SELECTED, - workspaceId: flyoutWorkspace.id, - newElementId: firstFlyoutBlock.id, - }; - const flyoutCursor = flyoutWorkspace.getCursor(); - this.navigation.focusWorkspace(this.workspace); - - this.flyoutChangeListener(e); - - chai.assert.equal( - flyoutCursor.getCurNode().getType(), - Blockly.ASTNode.types.STACK, - ); - chai.assert.equal( - this.navigation.getState(this.workspace), - Constants.STATE.FLYOUT, - ); - }); - }); - - suite('Test clean up methods', function () { - setup(function () { - this.workspace = createNavigationWorkspace(this.navigation, true); - }); - test('All listeners and markers removed', function () { - const numListeners = this.workspace.listeners.length; - const markerName = this.navigation.MARKER_NAME; - this.navigation.removeWorkspace(this.workspace); - chai.assert.equal(this.workspace.listeners.length, numListeners - 1); - - const marker = this.workspace.getMarkerManager().getMarker(markerName); - chai.assert.isNull(marker); - }); - test('Keyboard accessibility mode can not be enabled', function () { - this.navigation.removeWorkspace(this.workspace); - this.navigation.enableKeyboardAccessibility(this.workspace); - chai.assert.isFalse(this.workspace.keyboardAccessibilityMode); - }); - test('Dispose', function () { - const numListeners = this.workspace.listeners.length; - const flyout = this.workspace.getFlyout(); - const numFlyoutListeners = flyout.getWorkspace().listeners.length; - this.navigation.dispose(); - chai.assert.equal(this.workspace.listeners.length, numListeners - 1); - chai.assert.equal( - flyout.getWorkspace().listeners.length, - numFlyoutListeners - 1, - ); - }); - }); -}); diff --git a/plugins/keyboard-navigation/test/shortcuts_test.mocha.js b/plugins/keyboard-navigation/test/shortcuts_test.mocha.js deleted file mode 100644 index 4e1909521..000000000 --- a/plugins/keyboard-navigation/test/shortcuts_test.mocha.js +++ /dev/null @@ -1,531 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -const sinon = require('sinon'); -const chai = require('chai'); - -const Blockly = require('blockly'); - -const {NavigationController} = require('../src/index'); -const { - createNavigationWorkspace, - createKeyDownEvent, -} = require('./test_helper'); - -suite('Shortcut Tests', function () { - setup(function () { - this.jsdomCleanup = require('jsdom-global')( - '
', - ); - // We are running these tests in node even thought they require a rendered - // workspace, which doesn't exactly work. The rendering system expects - // cancelAnimationFrame to be defined so we need to define it. - window.cancelAnimationFrame = function () {}; - - Blockly.utils.dom.getFastTextWidthWithSizeString = function () { - return 10; - }; - Blockly.defineBlocksWithJsonArray([ - { - type: 'basic_block', - message0: '', - previousStatement: null, - nextStatement: null, - }, - ]); - this.controller = new NavigationController(); - this.controller.init(); - this.navigation = this.controller.navigation; - this.workspace = createNavigationWorkspace(this.navigation, true); - this.controller.addWorkspace(this.workspace); - this.basicBlock = this.workspace.newBlock('basic_block'); - }); - - teardown(function () { - window.cancelAnimationFrame = undefined; - this.controller.dispose(); - this.workspace.dispose(); - this.jsdomCleanup(); - delete Blockly.Blocks['basic_block']; - }); - - suite('Deleting blocks', function () { - setup(function () { - const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock); - this.workspace.getCursor().setCurNode(blockNode); - }); - - teardown(function () { - sinon.restore(); - }); - - const testCases = [ - { - name: 'Delete', - deleteEvent: createKeyDownEvent( - Blockly.utils.KeyCodes.DELETE, - 'NotAField', - ), - }, - { - name: 'Backspace', - deleteEvent: createKeyDownEvent( - Blockly.utils.KeyCodes.BACKSPACE, - 'NotAField', - ), - }, - ]; - - suite('delete keybinds trigger deletion', function () { - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.deleteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 0, - 'Expected the block to be deleted.', - ); - }); - }); - }); - - suite( - 'delete keybinds do not trigger deletion if workspace is readonly', - function () { - testCases.forEach(function (testCase) { - test(testCase.name, function () { - this.workspace.options.readOnly = true; - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.deleteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be deleted.', - ); - }); - }); - }, - ); - }); - - suite('Copy and paste', function () { - teardown(function () { - sinon.restore(); - }); - const testCases = [ - { - name: 'Control', - copyEvent: createKeyDownEvent(Blockly.utils.KeyCodes.C, 'NotAField', [ - Blockly.utils.KeyCodes.CTRL, - ]), - pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [ - Blockly.utils.KeyCodes.CTRL, - ]), - }, - { - name: 'Meta', - copyEvent: createKeyDownEvent(Blockly.utils.KeyCodes.C, 'NotAField', [ - Blockly.utils.KeyCodes.META, - ]), - pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [ - Blockly.utils.KeyCodes.META, - ]), - }, - { - name: 'Alt', - copyEvent: createKeyDownEvent(Blockly.utils.KeyCodes.C, 'NotAField', [ - Blockly.utils.KeyCodes.ALT, - ]), - pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [ - Blockly.utils.KeyCodes.ALT, - ]), - }, - ]; - - suite('copy and paste keybinds duplicate blocks', function () { - setup(function () { - const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock); - this.workspace.getCursor().setCurNode(blockNode); - }); - - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.copyEvent, - ); - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.pasteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 2, - 'Expected the block to be duplicated.', - ); - }); - }); - }); - - suite( - 'copy and paste does nothing if the cursor is not on a block', - function () { - setup(function () { - const workspaceNode = Blockly.ASTNode.createWorkspaceNode( - this.workspace, - new Blockly.utils.Coordinate(100, 100), - ); - this.workspace.getCursor().setCurNode(workspaceNode); - }); - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.copyEvent, - ); - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.pasteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be duplicated.', - ); - }); - }); - }, - ); - - suite( - 'copy and paste do nothing if the cursor is on a shadow block', - function () { - setup(function () { - this.basicBlock.setShadow(true); - const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock); - this.workspace.getCursor().setCurNode(blockNode); - }); - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.copyEvent, - ); - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.pasteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be duplicated.', - ); - }); - }); - }, - ); - - suite( - 'copy and paste do nothing if the workspace is readonly', - function () { - setup(function () { - this.workspace.options.readonly = true; - }); - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.copyEvent, - ); - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.pasteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be duplicated.', - ); - }); - }); - }, - ); - - suite('copy and paste do nothing if a gesture is in progress', function () { - setup(function () { - sinon.stub(Blockly.Gesture, 'inProgress').returns(true); - }); - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.copyEvent, - ); - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.pasteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be duplicated.', - ); - }); - }); - }); - - suite( - 'copy and paste do nothing if the block is not deletable', - function () { - setup(function () { - this.basicBlock.setDeletable(false); - }); - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.copyEvent, - ); - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.pasteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be duplicated.', - ); - }); - }); - }, - ); - }); - - suite('Cut and paste', function () { - teardown(function () { - sinon.restore(); - }); - const testCases = [ - { - name: 'Control', - cutEvent: createKeyDownEvent(Blockly.utils.KeyCodes.X, 'NotAField', [ - Blockly.utils.KeyCodes.CTRL, - ]), - pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [ - Blockly.utils.KeyCodes.CTRL, - ]), - }, - { - name: 'Meta', - cutEvent: createKeyDownEvent(Blockly.utils.KeyCodes.X, 'NotAField', [ - Blockly.utils.KeyCodes.META, - ]), - pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [ - Blockly.utils.KeyCodes.META, - ]), - }, - { - name: 'Alt', - cutEvent: createKeyDownEvent(Blockly.utils.KeyCodes.X, 'NotAField', [ - Blockly.utils.KeyCodes.ALT, - ]), - pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [ - Blockly.utils.KeyCodes.ALT, - ]), - }, - ]; - - suite('cut and paste keybinds duplicate blocks', function () { - setup(function () { - const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock); - this.workspace.getCursor().setCurNode(blockNode); - }); - - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.cutEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 0, - 'Expected the block to be deleted.', - ); - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.pasteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to be duplicated.', - ); - }); - }); - }); - - suite( - 'cut and paste does nothing if the cursor is not on a block', - function () { - setup(function () { - const workspaceNode = Blockly.ASTNode.createWorkspaceNode( - this.workspace, - new Blockly.utils.Coordinate(100, 100), - ); - this.workspace.getCursor().setCurNode(workspaceNode); - }); - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.cutEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be deleted.', - ); - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.pasteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be duplicated.', - ); - }); - }); - }, - ); - - suite( - 'cut and paste do nothing if the cursor is on a shadow block', - function () { - setup(function () { - this.basicBlock.setShadow(true); - const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock); - this.workspace.getCursor().setCurNode(blockNode); - }); - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.cutEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be deleted.', - ); - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.pasteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be duplicated.', - ); - }); - }); - }, - ); - - suite('cut and paste do nothing if the workspace is readonly', function () { - setup(function () { - this.workspace.options.readonly = true; - }); - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.cutEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be deleted.', - ); - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.pasteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be duplicated.', - ); - }); - }); - }); - - suite('cut and paste do nothing if a gesture is in progress', function () { - setup(function () { - sinon.stub(Blockly.Gesture, 'inProgress').returns(true); - }); - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.cutEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be deleted.', - ); - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.pasteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be duplicated.', - ); - }); - }); - }); - - suite( - 'cut and paste do nothing if the block is not deletable', - function () { - setup(function () { - this.basicBlock.setDeletable(false); - }); - testCases.forEach(function (testCase) { - test(testCase.name, function () { - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.cutEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be deleted.', - ); - Blockly.ShortcutRegistry.registry.onKeyDown( - this.workspace, - testCase.pasteEvent, - ); - chai.assert.equal( - this.workspace.getTopBlocks().length, - 1, - 'Expected the block to not be duplicated.', - ); - }); - }); - }, - ); - }); -}); diff --git a/plugins/keyboard-navigation/test/test_helper.js b/plugins/keyboard-navigation/test/test_helper.js deleted file mode 100644 index 99abcb5fb..000000000 --- a/plugins/keyboard-navigation/test/test_helper.js +++ /dev/null @@ -1,89 +0,0 @@ -/** - * @license - * Copyright 2021 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -const {Constants} = require('../src/index'); -const {Navigation} = require('../src/index'); -const Blockly = require('blockly/core'); - -/** - * Creates a workspace for testing keyboard navigation. - * @param {Navigation} navigation Object holding navigation classes. - * @param {boolean} enableKeyboardNav True to enable keyboard navigation, false - * otherwise. - * @param {boolean} readOnly True for a read only workspace, false otherwise. - * @returns {Blockly.WorkspaceSvg} The created workspace. - */ -export function createNavigationWorkspace( - navigation, - enableKeyboardNav, - readOnly, -) { - const workspace = Blockly.inject('blocklyDiv', { - toolbox: ` - - `, - readOnly: readOnly, - }); - if (enableKeyboardNav) { - navigation.addWorkspace(workspace); - navigation.enableKeyboardAccessibility(workspace); - navigation.setState(workspace, Constants.STATE.WORKSPACE); - } - return workspace; -} - -/** - * Creates a key down event used for testing. - * @param {number} keyCode The keycode for the event. Use Blockly.utils.KeyCodes - * enum. - * @param {string} type The type of the target. This only matters for the - * Blockly.utils.isTargetInput method. - * @param {?Array} modifiers A list of modifiers. Use - * Blockly.utils.KeyCodes enum. - * @returns {Object} The mocked keydown - * event. - */ -export function createKeyDownEvent(keyCode, type, modifiers) { - const event = { - keyCode: keyCode, - target: {type: type}, - getModifierState: function (name) { - if (name == 'Shift' && this.shiftKey) { - return true; - } else if (name == 'Control' && this.ctrlKey) { - return true; - } else if (name == 'Meta' && this.metaKey) { - return true; - } else if (name == 'Alt' && this.altKey) { - return true; - } - return false; - }, - preventDefault: function () {}, - }; - if (modifiers && modifiers.length) { - event.altKey = modifiers.includes(Blockly.utils.KeyCodes.ALT); - event.ctrlKey = modifiers.includes(Blockly.utils.KeyCodes.CTRL); - event.metaKey = modifiers.includes(Blockly.utils.KeyCodes.META); - event.shiftKey = modifiers.includes(Blockly.utils.KeyCodes.SHIFT); - } - return event; -} diff --git a/plugins/keyboard-navigation/test/toolbox.js b/plugins/keyboard-navigation/test/toolbox.js deleted file mode 100644 index 95dd4ff7b..000000000 --- a/plugins/keyboard-navigation/test/toolbox.js +++ /dev/null @@ -1,218 +0,0 @@ -/** - * @license - * Copyright 2024 Google LLC - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @fileoverview A custom toolbox for the plugin test. - */ - -export const toolbox = { - kind: 'categoryToolbox', - contents: [ - { - kind: 'category', - name: 'Logic', - categorystyle: 'logic_category', - contents: [ - { - type: 'controls_if', - kind: 'block', - }, - { - type: 'logic_compare', - kind: 'block', - fields: { - OP: 'EQ', - }, - }, - { - type: 'logic_operation', - kind: 'block', - fields: { - OP: 'AND', - }, - }, - ], - }, - { - kind: 'category', - name: 'Loops', - categorystyle: 'loop_category', - contents: [ - { - type: 'controls_repeat_ext', - kind: 'block', - inputs: { - TIMES: { - shadow: { - type: 'math_number', - fields: { - NUM: 10, - }, - }, - }, - }, - }, - { - type: 'controls_repeat', - kind: 'block', - enabled: false, - fields: { - TIMES: 10, - }, - }, - { - type: 'controls_whileUntil', - kind: 'block', - fields: { - MODE: 'WHILE', - }, - }, - { - type: 'controls_for', - kind: 'block', - fields: { - VAR: { - name: 'i', - }, - }, - inputs: { - FROM: { - shadow: { - type: 'math_number', - fields: { - NUM: 1, - }, - }, - }, - TO: { - shadow: { - type: 'math_number', - fields: { - NUM: 10, - }, - }, - }, - BY: { - shadow: { - type: 'math_number', - fields: { - NUM: 1, - }, - }, - }, - }, - }, - { - type: 'controls_forEach', - kind: 'block', - fields: { - VAR: { - name: 'j', - }, - }, - }, - { - type: 'controls_flow_statements', - kind: 'block', - enabled: false, - fields: { - FLOW: 'BREAK', - }, - }, - ], - }, - { - kind: 'sep', - }, - { - kind: 'category', - name: 'Variables', - custom: 'VARIABLE', - categorystyle: 'variable_category', - }, - { - kind: 'category', - name: 'Buttons and Blocks', - categorystyle: 'loop_category', - contents: [ - { - type: 'controls_repeat', - kind: 'block', - fields: { - TIMES: 10, - }, - }, - { - kind: 'BUTTON', - text: 'Randomize Button Style', - callbackkey: 'setRandomStyle', - }, - { - kind: 'BUTTON', - text: 'Randomize Button Style', - callbackkey: 'setRandomStyle', - }, - { - type: 'controls_repeat', - kind: 'block', - fields: { - TIMES: 10, - }, - }, - { - kind: 'BUTTON', - text: 'Randomize Button Style', - callbackkey: 'setRandomStyle', - }, - ], - }, - { - kind: 'sep', - }, - { - kind: 'category', - name: 'Nested Categories', - contents: [ - { - kind: 'category', - name: 'sub-category 1', - contents: [ - { - kind: 'BUTTON', - text: 'Randomize Button Style', - callbackkey: 'setRandomStyle', - }, - { - type: 'logic_boolean', - kind: 'block', - fields: { - BOOL: 'TRUE', - }, - }, - ], - }, - { - kind: 'category', - name: 'sub-category 2', - contents: [ - { - type: 'logic_boolean', - kind: 'block', - fields: { - BOOL: 'FALSE', - }, - }, - { - kind: 'BUTTON', - text: 'Randomize Button Style', - callbackkey: 'setRandomStyle', - }, - ], - }, - ], - }, - ], -};

h^&v>s(x+qvpr92D20C>OQ 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 F{vD6^wo?EA diff --git a/codelabs/keyboard_navigation/skip_connections.png b/codelabs/keyboard_navigation/skip_connections.png deleted file mode 100644 index c4d6c77a72ace6b53da4ebbb5255280beb594773..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50293 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