scratch-blocks 2.1.4 → 2.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/AGENTS.md +18 -10
  2. package/README.md +40 -0
  3. package/dist/main.mjs +1 -1
  4. package/dist/types/src/index.d.ts +1 -0
  5. package/dist/types/src/index.d.ts.map +1 -1
  6. package/dist/types/src/scratch_c_block_wrap.d.ts +2 -0
  7. package/dist/types/src/scratch_c_block_wrap.d.ts.map +1 -0
  8. package/eslint.config.mjs +5 -1
  9. package/package.json +10 -3
  10. package/src/index.ts +3 -5
  11. package/src/scratch_c_block_wrap.ts +92 -0
  12. package/src/scratch_connection_checker.ts +1 -2
  13. package/tsconfig.build.json +4 -0
  14. package/tsconfig.json +1 -1
  15. package/vitest.config.ts +35 -0
  16. package/dist/types/tests/blocks/logic_ternary_test.d.ts +0 -13
  17. package/dist/types/tests/blocks/logic_ternary_test.d.ts.map +0 -1
  18. package/dist/types/tests/jsunit/block_test.d.ts +0 -4
  19. package/dist/types/tests/jsunit/block_test.d.ts.map +0 -1
  20. package/dist/types/tests/jsunit/connection_db_test.d.ts +0 -25
  21. package/dist/types/tests/jsunit/connection_db_test.d.ts.map +0 -1
  22. package/dist/types/tests/jsunit/connection_test.d.ts +0 -39
  23. package/dist/types/tests/jsunit/connection_test.d.ts.map +0 -1
  24. package/dist/types/tests/jsunit/db_test.d.ts +0 -7
  25. package/dist/types/tests/jsunit/db_test.d.ts.map +0 -1
  26. package/dist/types/tests/jsunit/event_test.d.ts +0 -76
  27. package/dist/types/tests/jsunit/event_test.d.ts.map +0 -1
  28. package/dist/types/tests/jsunit/extensions_test.d.ts +0 -18
  29. package/dist/types/tests/jsunit/extensions_test.d.ts.map +0 -1
  30. package/dist/types/tests/jsunit/field_angle_test.d.ts +0 -3
  31. package/dist/types/tests/jsunit/field_angle_test.d.ts.map +0 -1
  32. package/dist/types/tests/jsunit/field_number_test.d.ts +0 -3
  33. package/dist/types/tests/jsunit/field_number_test.d.ts.map +0 -1
  34. package/dist/types/tests/jsunit/field_test.d.ts +0 -8
  35. package/dist/types/tests/jsunit/field_test.d.ts.map +0 -1
  36. package/dist/types/tests/jsunit/field_variable_getter_test.d.ts +0 -5
  37. package/dist/types/tests/jsunit/field_variable_getter_test.d.ts.map +0 -1
  38. package/dist/types/tests/jsunit/field_variable_test.d.ts +0 -19
  39. package/dist/types/tests/jsunit/field_variable_test.d.ts.map +0 -1
  40. package/dist/types/tests/jsunit/generator_test.d.ts +0 -2
  41. package/dist/types/tests/jsunit/generator_test.d.ts.map +0 -1
  42. package/dist/types/tests/jsunit/gesture_test.d.ts +0 -10
  43. package/dist/types/tests/jsunit/gesture_test.d.ts.map +0 -1
  44. package/dist/types/tests/jsunit/input_test.d.ts +0 -9
  45. package/dist/types/tests/jsunit/input_test.d.ts.map +0 -1
  46. package/dist/types/tests/jsunit/json_test.d.ts +0 -11
  47. package/dist/types/tests/jsunit/json_test.d.ts.map +0 -1
  48. package/dist/types/tests/jsunit/names_test.d.ts +0 -5
  49. package/dist/types/tests/jsunit/names_test.d.ts.map +0 -1
  50. package/dist/types/tests/jsunit/procedure_test.d.ts +0 -15
  51. package/dist/types/tests/jsunit/procedure_test.d.ts.map +0 -1
  52. package/dist/types/tests/jsunit/scratch_block_comment_test.d.ts +0 -14
  53. package/dist/types/tests/jsunit/scratch_block_comment_test.d.ts.map +0 -1
  54. package/dist/types/tests/jsunit/svg_test.d.ts +0 -14
  55. package/dist/types/tests/jsunit/svg_test.d.ts.map +0 -1
  56. package/dist/types/tests/jsunit/test_runner.d.ts +0 -2
  57. package/dist/types/tests/jsunit/test_runner.d.ts.map +0 -1
  58. package/dist/types/tests/jsunit/test_utilities.d.ts +0 -50
  59. package/dist/types/tests/jsunit/test_utilities.d.ts.map +0 -1
  60. package/dist/types/tests/jsunit/utils_test.d.ts +0 -10
  61. package/dist/types/tests/jsunit/utils_test.d.ts.map +0 -1
  62. package/dist/types/tests/jsunit/variable_map_test.d.ts +0 -28
  63. package/dist/types/tests/jsunit/variable_map_test.d.ts.map +0 -1
  64. package/dist/types/tests/jsunit/variable_model_test.d.ts +0 -14
  65. package/dist/types/tests/jsunit/variable_model_test.d.ts.map +0 -1
  66. package/dist/types/tests/jsunit/widget_div_test.d.ts +0 -37
  67. package/dist/types/tests/jsunit/widget_div_test.d.ts.map +0 -1
  68. package/dist/types/tests/jsunit/workspace_comment_test.d.ts +0 -13
  69. package/dist/types/tests/jsunit/workspace_comment_test.d.ts.map +0 -1
  70. package/dist/types/tests/jsunit/workspace_test.d.ts +0 -22
  71. package/dist/types/tests/jsunit/workspace_test.d.ts.map +0 -1
  72. package/dist/types/tests/jsunit/workspace_undo_redo_test.d.ts +0 -33
  73. package/dist/types/tests/jsunit/workspace_undo_redo_test.d.ts.map +0 -1
  74. package/dist/types/tests/jsunit/xml_test.d.ts +0 -55
  75. package/dist/types/tests/jsunit/xml_test.d.ts.map +0 -1
  76. package/dist/types/tests/workspace_svg/workspace_svg_test.d.ts +0 -12
  77. package/dist/types/tests/workspace_svg/workspace_svg_test.d.ts.map +0 -1
@@ -32,6 +32,7 @@ import { glowStack } from './glows';
32
32
  import './renderer/cat/renderer';
33
33
  import './renderer/renderer';
34
34
  import * as scratchBlocksUtils from './scratch_blocks_utils';
35
+ import './scratch_c_block_wrap';
35
36
  import './scratch_comment_icon';
36
37
  import './scratch_connection_checker';
37
38
  import './scratch_dragger';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,iBAAiB,CAAA;AACxB,OAAO,kBAAkB,CAAA;AACzB,OAAO,eAAe,CAAA;AACtB,OAAO,gBAAgB,CAAA;AACvB,OAAO,gBAAgB,CAAA;AACvB,OAAO,eAAe,CAAA;AACtB,OAAO,iBAAiB,CAAA;AACxB,OAAO,iBAAiB,CAAA;AACxB,OAAO,eAAe,CAAA;AACtB,OAAO,oBAAoB,CAAA;AAC3B,OAAO,qBAAqB,CAAA;AAC5B,OAAO,kBAAkB,CAAA;AACzB,OAAO,gBAAgB,CAAA;AACvB,OAAO,eAAe,CAAA;AACtB,OAAO,8BAA8B,CAAA;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,gBAAgB,MAAM,sBAAsB,CAAA;AACxD,OAAO,OAAO,CAAA;AACd,OAAO,sCAAsC,CAAA;AAC7C,OAAO,wCAAwC,CAAA;AAC/C,OAAO,sCAAsC,CAAA;AAC7C,OAAO,sCAAsC,CAAA;AAC7C,OAAO,oCAAoC,CAAA;AAC3C,OAAO,sCAAsC,CAAA;AAC7C,OAAO,yCAAyC,CAAA;AAChD,OAAO,EAA6B,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAE3F,OAAO,EAAqB,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAQlE,OAAO,wBAAwB,CAAA;AAC/B,OAAO,EAAmB,SAAS,EAAE,MAAM,SAAS,CAAA;AAEpD,OAAO,yBAAyB,CAAA;AAChC,OAAO,qBAAqB,CAAA;AAE5B,OAAO,KAAK,kBAAkB,MAAM,wBAAwB,CAAA;AAC5D,OAAO,wBAAwB,CAAA;AAC/B,OAAO,8BAA8B,CAAA;AAGrC,OAAO,mBAAmB,CAAA;AAC1B,OAAO,sCAAsC,CAAA;AAC7C,OAAO,wBAAwB,CAAA;AAC/B,OAAO,0BAA0B,CAAA;AAGjC,OAAO,KAAK,gBAAgB,MAAM,aAAa,CAAA;AAE/C,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AACtC,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,CAAA;AACpB,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAC7B,OAAO,EAAE,yBAAyB,EAAE,CAAA;AACpC,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAClF,cAAc,OAAO,CAAA;AAErB,UAAU,oBAAqB,SAAQ,OAAO,CAAC,cAAc;IAC3D;;;OAGG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAA;CAClC;AASD,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,wBAkDvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,iBAAiB,CAAA;AACxB,OAAO,kBAAkB,CAAA;AACzB,OAAO,eAAe,CAAA;AACtB,OAAO,gBAAgB,CAAA;AACvB,OAAO,gBAAgB,CAAA;AACvB,OAAO,eAAe,CAAA;AACtB,OAAO,iBAAiB,CAAA;AACxB,OAAO,iBAAiB,CAAA;AACxB,OAAO,eAAe,CAAA;AACtB,OAAO,oBAAoB,CAAA;AAC3B,OAAO,qBAAqB,CAAA;AAC5B,OAAO,kBAAkB,CAAA;AACzB,OAAO,gBAAgB,CAAA;AACvB,OAAO,eAAe,CAAA;AACtB,OAAO,8BAA8B,CAAA;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,gBAAgB,MAAM,sBAAsB,CAAA;AACxD,OAAO,OAAO,CAAA;AACd,OAAO,sCAAsC,CAAA;AAC7C,OAAO,wCAAwC,CAAA;AAC/C,OAAO,sCAAsC,CAAA;AAC7C,OAAO,sCAAsC,CAAA;AAC7C,OAAO,oCAAoC,CAAA;AAC3C,OAAO,sCAAsC,CAAA;AAC7C,OAAO,yCAAyC,CAAA;AAChD,OAAO,EAA6B,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAE3F,OAAO,EAAqB,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAQlE,OAAO,wBAAwB,CAAA;AAC/B,OAAO,EAAmB,SAAS,EAAE,MAAM,SAAS,CAAA;AAEpD,OAAO,yBAAyB,CAAA;AAChC,OAAO,qBAAqB,CAAA;AAE5B,OAAO,KAAK,kBAAkB,MAAM,wBAAwB,CAAA;AAC5D,OAAO,wBAAwB,CAAA;AAC/B,OAAO,wBAAwB,CAAA;AAC/B,OAAO,8BAA8B,CAAA;AAGrC,OAAO,mBAAmB,CAAA;AAC1B,OAAO,sCAAsC,CAAA;AAC7C,OAAO,wBAAwB,CAAA;AAC/B,OAAO,0BAA0B,CAAA;AAGjC,OAAO,KAAK,gBAAgB,MAAM,aAAa,CAAA;AAE/C,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AACtC,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,CAAA;AACpB,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAC7B,OAAO,EAAE,yBAAyB,EAAE,CAAA;AACpC,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAClF,cAAc,OAAO,CAAA;AAErB,UAAU,oBAAqB,SAAQ,OAAO,CAAC,cAAc;IAC3D;;;OAGG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAA;CAClC;AASD,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,wBAkDvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=scratch_c_block_wrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratch_c_block_wrap.d.ts","sourceRoot":"","sources":["../../../src/scratch_c_block_wrap.ts"],"names":[],"mappings":""}
package/eslint.config.mjs CHANGED
@@ -13,9 +13,13 @@ export default eslintConfigScratch.defineConfig(
13
13
  },
14
14
  },
15
15
  {
16
- // TypeScript rule overrides (type-checked rules must be scoped to TS files)
17
16
  files: ['**/*.{ts,tsx,mts,cts}'],
18
17
  plugins: { '@typescript-eslint': tseslint.plugin },
18
+ },
19
+ {
20
+ // TypeScript rule overrides (type-checked rules must be scoped to TS files)
21
+ // Fixing these requires non-trivial adjustments to code that was written before these rules were in place.
22
+ files: ['src/**/*.{ts,tsx,mts,cts}'],
19
23
  rules: {
20
24
  // TODO: improve TypeScript type annotations to remove `any` usage
21
25
  '@typescript-eslint/no-explicit-any': 'warn',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scratch-blocks",
3
- "version": "2.1.4",
3
+ "version": "2.1.5",
4
4
  "description": "Scratch Blocks is a library for building creative computing interfaces.",
5
5
  "author": "Massachusetts Institute of Technology",
6
6
  "license": "Apache-2.0",
@@ -23,8 +23,11 @@
23
23
  "format": "prettier --write . && eslint --fix",
24
24
  "prepare": "husky || true",
25
25
  "start": "webpack serve --open --mode development",
26
- "test": "echo \"Error: no test specified\" && exit 1",
26
+ "test": "vitest run",
27
+ "test:browser": "vitest run --project browser",
27
28
  "test:lint": "eslint && prettier --check .",
29
+ "test:unit": "vitest run --project unit",
30
+ "test:watch": "vitest",
28
31
  "watch": "webpack --mode development --watch"
29
32
  },
30
33
  "dependencies": {
@@ -35,15 +38,19 @@
35
38
  "devDependencies": {
36
39
  "@commitlint/cli": "20.5.0",
37
40
  "@commitlint/config-conventional": "20.5.0",
41
+ "@vitest/browser": "4.1.0",
42
+ "@vitest/browser-playwright": "4.1.0",
38
43
  "eslint": "9.39.4",
39
- "eslint-config-scratch": "14.0.11",
44
+ "eslint-config-scratch": "14.0.12",
40
45
  "husky": "9.1.7",
46
+ "playwright": "1.58.2",
41
47
  "prettier": "3.8.1",
42
48
  "scratch-semantic-release-config": "4.0.1",
43
49
  "semantic-release": "25.0.3",
44
50
  "source-map-loader": "5.0.0",
45
51
  "ts-loader": "9.5.4",
46
52
  "typescript": "5.9.3",
53
+ "vitest": "4.1.0",
47
54
  "webpack": "5.105.4",
48
55
  "webpack-cli": "6.0.1",
49
56
  "webpack-dev-server": "5.2.3"
package/src/index.ts CHANGED
@@ -47,6 +47,7 @@ import './renderer/cat/renderer'
47
47
  import './renderer/renderer'
48
48
  import { registerScratchBlockPaster } from './scratch_block_paster'
49
49
  import * as scratchBlocksUtils from './scratch_blocks_utils'
50
+ import './scratch_c_block_wrap'
50
51
  import './scratch_comment_icon'
51
52
  import './scratch_connection_checker'
52
53
  import { registerScratchContinuousCategory } from './scratch_continuous_category'
@@ -190,11 +191,8 @@ Blockly.comments.CommentView.defaultCommentSize = new Blockly.utils.Size(200, 20
190
191
  // to the workspace itself (whose onNodeFocus is a no-op) rather than to a
191
192
  // specific block, so deleting a block doesn't reset the scroll position.
192
193
  // We may need to re-evaluate this when we explicitly work on keyboard navigation.
193
- const originalGetRestoredFocusableNode =
194
- Blockly.WorkspaceSvg.prototype.getRestoredFocusableNode
195
- Blockly.WorkspaceSvg.prototype.getRestoredFocusableNode = function (
196
- previousNode,
197
- ) {
194
+ const originalGetRestoredFocusableNode = Blockly.WorkspaceSvg.prototype.getRestoredFocusableNode
195
+ Blockly.WorkspaceSvg.prototype.getRestoredFocusableNode = function (previousNode) {
198
196
  if (!previousNode && !this.isFlyout) return null
199
197
  return originalGetRestoredFocusableNode.call(this, previousNode)
200
198
  }
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Copyright 2026 Scratch Foundation
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import * as Blockly from 'blockly/core'
6
+
7
+ /**
8
+ * When a C-block (a block with a statement input) is dropped onto a block that
9
+ * is already in the middle of a stack, Blockly's default behaviour reconnects
10
+ * the displaced block to the C-block's *next* connection (i.e. after the
11
+ * C-block), leaving the C-block's "mouth" empty. Scratch expects the
12
+ * displaced block to be placed *inside* the C-block (wrap behaviour).
13
+ *
14
+ * We fix this by patching `Connection.getConnectionForOrphanedConnection` so
15
+ * that it prefers an available statement-input connection on the dragging block
16
+ * over the last-next-in-stack connection when the orphan is a statement block.
17
+ * This applies to both real blocks and insertion markers (drag previews) so
18
+ * that the preview matches the actual drop result.
19
+ */
20
+ const originalGetConnectionForOrphanedConnection = Blockly.Connection.getConnectionForOrphanedConnection.bind(
21
+ Blockly.Connection,
22
+ )
23
+
24
+ Blockly.Connection.getConnectionForOrphanedConnection = function (
25
+ startBlock: Blockly.Block,
26
+ orphanConnection: Blockly.Connection,
27
+ ): Blockly.Connection | null {
28
+ // Apply the wrapping logic when the orphaned connection is a statement
29
+ // connection (PREVIOUS_STATEMENT). Value connections (OUTPUT_VALUE) are
30
+ // already handled by the original implementation.
31
+ if (orphanConnection.type === Blockly.ConnectionType.PREVIOUS_STATEMENT) {
32
+ const checker = orphanConnection.getConnectionChecker()
33
+ for (const input of startBlock.inputList) {
34
+ const conn = input.connection
35
+ // Look for an unoccupied statement input (NEXT_STATEMENT) on the
36
+ // dragging block. Statement inputs are connections owned by an input
37
+ // (getParentInput() !== null) rather than the block's own nextConnection.
38
+ if (
39
+ conn?.type === Blockly.ConnectionType.NEXT_STATEMENT &&
40
+ !conn.isConnected() &&
41
+ checker.canConnect(orphanConnection, conn, false)
42
+ ) {
43
+ return conn
44
+ }
45
+ }
46
+ }
47
+ return originalGetConnectionForOrphanedConnection(startBlock, orphanConnection)
48
+ }
49
+
50
+ /**
51
+ * When a drag preview (insertion marker) is cleaned up, Blockly calls
52
+ * `marker.unplug(true)` which heals the stack by reconnecting the block before
53
+ * the marker to whatever block was after it (via `marker.nextConnection`).
54
+ *
55
+ * Because we now send the displaced block (B2) into the insertion marker's
56
+ * statement input for a correct visual preview, B2 is no longer at
57
+ * `marker.nextConnection` when cleanup runs. The heal step therefore skips B2
58
+ * and it gets lost when the marker is disposed.
59
+ *
60
+ * We fix this by patching `hideInsertionMarker` to restore B2 from the
61
+ * marker's statement input back to `marker.nextConnection` before the original
62
+ * cleanup runs, so the standard healing logic reconnects B1.next → B2.
63
+ */
64
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- InsertionMarkerPreviewer does not publicly expose hideInsertionMarker
65
+ const proto = Blockly.InsertionMarkerPreviewer.prototype as any
66
+ const originalHideInsertionMarker = proto.hideInsertionMarker as (markerConn: Blockly.Connection) => void
67
+ proto.hideInsertionMarker = function (this: Blockly.InsertionMarkerPreviewer, markerConn: Blockly.Connection) {
68
+ const marker = markerConn.getSourceBlock() as Blockly.BlockSvg
69
+
70
+ // Restore a real block from a statement input to nextConnection so that
71
+ // unplug(true) can heal the stack correctly. Conditions:
72
+ // - marker is mid-stack (has a predecessor)
73
+ // - marker.nextConnection is empty (displaced block is NOT already there)
74
+ // - a non-marker block is sitting in a statement input
75
+ if (marker.previousConnection?.isConnected() && marker.nextConnection && !marker.nextConnection.isConnected()) {
76
+ for (const input of marker.inputList) {
77
+ const conn = input.connection
78
+ if (conn?.type === Blockly.ConnectionType.NEXT_STATEMENT && conn.isConnected()) {
79
+ const blockInInput = conn.targetBlock() as Blockly.BlockSvg | null
80
+ if (blockInInput && !blockInInput.isInsertionMarker()) {
81
+ const prev = blockInInput.previousConnection
82
+ if (!prev) continue
83
+ prev.disconnect()
84
+ marker.nextConnection.connect(prev)
85
+ break
86
+ }
87
+ }
88
+ }
89
+ }
90
+
91
+ originalHideInsertionMarker.call(this, markerConn)
92
+ }
@@ -16,8 +16,7 @@ class ScratchConnectionChecker extends Blockly.ConnectionChecker {
16
16
  ): number {
17
17
  // The prototype's next connection is visual-only and should not accept any connections.
18
18
  const isPrototypeNextConn = (c: Blockly.Connection | null) =>
19
- c?.type === Blockly.ConnectionType.NEXT_STATEMENT &&
20
- c.getSourceBlock().type === 'procedures_prototype'
19
+ c?.type === Blockly.ConnectionType.NEXT_STATEMENT && c.getSourceBlock().type === 'procedures_prototype'
21
20
  if (isPrototypeNextConn(a) || isPrototypeNextConn(b)) {
22
21
  return Blockly.Connection.REASON_CHECKS_FAILED
23
22
  }
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "include": ["./src/", "./types/"]
4
+ }
package/tsconfig.json CHANGED
@@ -24,5 +24,5 @@
24
24
  /* Language and Environment */
25
25
  "target": "es2020"
26
26
  },
27
- "include": ["./src/", "./tests/", "./types/"]
27
+ "include": ["./eslint.config.mjs", "./prettier.config.mjs", "./src/", "./tests/", "./types/", "./vitest.config.ts"]
28
28
  }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Copyright 2025 Google LLC
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { playwright } from '@vitest/browser-playwright'
6
+ import { defineConfig } from 'vitest/config'
7
+
8
+ export default defineConfig({
9
+ test: {
10
+ projects: [
11
+ {
12
+ test: {
13
+ name: 'unit',
14
+ include: ['tests/unit/**/*.test.ts'],
15
+ environment: 'jsdom',
16
+ },
17
+ },
18
+ {
19
+ test: {
20
+ name: 'browser',
21
+ include: ['tests/browser/**/*.test.ts'],
22
+ browser: {
23
+ provider: playwright(),
24
+ enabled: true,
25
+ // to see the browser, run something like one of these:
26
+ // `npm run test:browser -- --browser.headless=false`
27
+ // `PWDEBUG=1 npm run test:browser` (also pauses on startup and opens devtools)
28
+ headless: true,
29
+ instances: [{ browser: 'chromium' }],
30
+ },
31
+ },
32
+ },
33
+ ],
34
+ },
35
+ })
@@ -1,13 +0,0 @@
1
- declare function test_logic_ternary_structure(): void;
2
- declare function test_logic_ternary_attachSameTypeCheckInThenAndElseWithoutParent(): void;
3
- declare function test_logic_ternary_attachDifferectTypeChecksInThenAndElseWithoutParent(): void;
4
- declare function test_logic_ternary_attachSameTypeCheckInThenAndElseWithMatchingParent(): void;
5
- declare function test_logic_ternary_attachDifferectTypeChecksInThenAndElseWithUncheckedParent(): void;
6
- declare function test_logic_ternary_attachDifferectTypeChecksInThenAndElseWithPermissiveParent(): void;
7
- declare function test_logic_ternary_attachMismatchTypeToThen_breakWithParent(): void;
8
- declare function test_logic_ternary_attachMismatchTypeToElse_breakWithParent(): void;
9
- declare function test_logic_ternary_attachToUncheckedParentWithDifferentTypes(): void;
10
- declare function test_logic_ternary_attachToPermissiveParentWithDifferentTypes(): void;
11
- declare function test_logic_ternary_attachToParentWithMismatchingThen_disconnectThen(): void;
12
- declare function test_logic_ternary_attachToParentWithMismatchingElse_disconnectElse(): void;
13
- //# sourceMappingURL=logic_ternary_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logic_ternary_test.d.ts","sourceRoot":"","sources":["../../../../tests/blocks/logic_ternary_test.js"],"names":[],"mappings":"AAqBA,sDAWC;AAED,0FAkBC;AAED,gGAkBC;AAED,+FAwBC;AAED,sGAwBC;AAED,uGAwBC;AAED,qFA2BC;AAED,qFA2BC;AAED,sFAwBC;AAED,uFAyBC;AAED,6FAyBC;AAED,6FAyBC"}
@@ -1,4 +0,0 @@
1
- declare function test_appendField_FieldIconMenu(): void;
2
- declare function test_jsonInit_FieldIconMenu(): void;
3
- declare function test_jsonInit_colors(): void;
4
- //# sourceMappingURL=block_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"block_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/block_test.js"],"names":[],"mappings":"AAqBA,wDAsBC;AAED,qDA+BC;AAED,8CAmCC"}
@@ -1,25 +0,0 @@
1
- declare function verify_DB_(msg: any, expected: any, db: any): void;
2
- declare function test_DB_addConnection(): void;
3
- declare function test_DB_removeConnection(): void;
4
- declare function test_DB_getNeighbours(): void;
5
- declare function test_DB_getNeighbours(): void;
6
- declare function test_DB_findPositionForConnection(): void;
7
- declare function test_DB_findConnection(): void;
8
- declare function test_DB_ordering(): void;
9
- declare function test_SearchForClosest(): void;
10
- declare function helper_getNeighbours(db: any, x: any, y: any, radius: any): any;
11
- declare function helper_getNeighbours(db: any, x: any, y: any, radius: any): any;
12
- declare function helper_searchDB(db: any, x: any, y: any, radius: any, shared_workspace: any): any;
13
- declare function helper_makeSourceBlock(sharedWorkspace: any): {
14
- workspace: any;
15
- parentBlock_: null;
16
- getParent: () => null;
17
- movable_: boolean;
18
- isMovable: () => boolean;
19
- isShadow: () => boolean;
20
- isInsertionMarker: () => boolean;
21
- getFirstStatementConnection: () => null;
22
- };
23
- declare function helper_createConnection(x: any, y: any, type: any, opt_shared_workspace: any, opt_rendered: any): any;
24
- declare function helper_createConnection(x: any, y: any, type: any): any;
25
- //# sourceMappingURL=connection_db_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection_db_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/connection_db_test.js"],"names":[],"mappings":"AAqBA,oEAeC;AAED,+CAqBC;AAED,kDAiCC;AAED,+CA2CC;;AAED,2DAWC;AAED,gDAaC;AAED,0CA8BC;AAED,+CAoCC;AAED,iFAEC;;AAED,mGAMC;AAED;;;;;;;;;EAqBC;AAED,uHAUC"}
@@ -1,39 +0,0 @@
1
- declare function connectionTest_setUp(): void;
2
- declare function connectionTest_tearDown(): void;
3
- /**
4
- * These tests check that the reasons for failures to connect are consistent
5
- * (internal view of error states).
6
- */
7
- declare function testCanConnectWithReason_TargetNull(): void;
8
- declare function testCanConnectWithReason_Disconnect(): void;
9
- declare function testCanConnectWithReason_DifferentWorkspaces(): void;
10
- declare function testCanConnectWithReason_Self(): void;
11
- declare function testCanConnectWithReason_Type(): void;
12
- declare function testCanConnectWithReason_CanConnect(): void;
13
- /**
14
- * The next set of tests checks that exceptions are being thrown at the correct
15
- * times (external view of errors).
16
- */
17
- declare function testCheckConnection_Self(): void;
18
- declare function testCheckConnection_TypeInputPrev(): void;
19
- declare function testCheckConnection_TypeInputNext(): void;
20
- declare function testCheckConnection_TypeOutputPrev(): void;
21
- declare function testCheckConnection_TypePrevInput(): void;
22
- declare function testCheckConnection_TypePrevOutput(): void;
23
- declare function testCheckConnection_TypeNextInput(): void;
24
- declare function testCheckConnection_TypeNextOutput(): void;
25
- declare function test_isConnectionAllowed_Distance(): void;
26
- declare function test_isConnectionAllowed_Unrendered(): void;
27
- declare function test_isConnectionAllowed_NoNext(): void;
28
- declare function test_isConnectionAllowed_InsertionMarker(): void;
29
- declare function testCheckConnection_Okay(): void;
30
- declare function test_canConnectWithReason_Procedures_WrongBlockType(): void;
31
- declare function test_canConnectWithReason_Procedures_Pass(): void;
32
- declare function test_canConnectWithReason_Procedures_NextConnection(): void;
33
- declare var input: any;
34
- declare var output: any;
35
- declare var previous: any;
36
- declare var next: any;
37
- declare var dummyWorkspace: any;
38
- declare function isMovableFn(): boolean;
39
- //# sourceMappingURL=connection_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/connection_test.js"],"names":[],"mappings":"AAiCA,8CAcC;AAED,iDAMC;AAKD;;;GAGG;AACH,6DAMC;AAED,6DAWC;AAED,sEASC;AAED,uDAQC;AAED,uDAgBC;AAED,6DASC;AAED;;;GAGG;AACH,kDAYC;AAED,2DAUC;AAED,2DAUC;AAED,4DAUC;AAED,2DAUC;AAED,4DAUC;AAED,2DAUC;AAED,4DAUC;AAED,2DAcC;AAED,6DAuBC;AAED,yDAmBC;AAED,kEAcC;AAED,kDAQC;AAED,6EAiBC;AAED,mEAeC;AAED,6EAkBC;AAjWD,uBAAS;AACT,wBAAU;AACV,0BAAY;AACZ,sBAAQ;AAER,gCAAkB;AA0BlB,wCAEC"}
@@ -1,7 +0,0 @@
1
- declare function test_DB_getNeighbours(): void;
2
- declare function test_DB_getNeighbours(): void;
3
- declare function helper_getNeighbours(db: any, x: any, y: any, radius: any): any;
4
- declare function helper_getNeighbours(db: any, x: any, y: any, radius: any): any;
5
- declare function helper_createConnection(x: any, y: any, type: any, opt_shared_workspace: any, opt_rendered: any): any;
6
- declare function helper_createConnection(x: any, y: any, type: any): any;
7
- //# sourceMappingURL=db_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"db_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/db_test.js"],"names":[],"mappings":";AAqBA,+CA2CC;;AAED,iFAEC;;AAED,yEAKC"}
@@ -1,76 +0,0 @@
1
- declare function eventTest_setUp(): void;
2
- declare function eventTest_setUpWithMockBlocks(): void;
3
- declare function eventTest_tearDown(): void;
4
- declare function eventTest_tearDownWithMockBlocks(): void;
5
- declare function test_block_base_constructor(): void;
6
- declare function test_var_base_constructor(): void;
7
- declare function test_abstract_constructor(): void;
8
- declare function checkCreateEventValues(event: any, block: any, ids: any, type: any): void;
9
- declare function checkDeleteEventValues(event: any, block: any, ids: any, type: any): void;
10
- declare function checkExactEventValues(event: any, values: any): void;
11
- declare function createSimpleTestBlock(workspace: any): any;
12
- declare function test_create_constructor(): void;
13
- declare function test_blockCreate_constructor(): void;
14
- declare function test_delete_constructor(): void;
15
- declare function test_blockDelete_constructor(): void;
16
- declare function test_change_constructor(): void;
17
- declare function test_blockChange_constructor(): void;
18
- declare function test_move_constructorCoordinate(): void;
19
- declare function test_move_constructoroldParentId(): void;
20
- declare function test_blockMove_constructorCoordinate(): void;
21
- declare function test_blockMove_constructoroldParentId(): void;
22
- declare function test_uiEvent_constructor_null(): void;
23
- declare function test_uiEvent_constructor_block(): void;
24
- declare function test_varCreate_constructor(): void;
25
- declare function test_varCreate_toJson(): void;
26
- declare function test_varCreate_fromJson(): void;
27
- declare function test_varCreate_runForward(): void;
28
- declare function test_varCreate_runBackwards(): void;
29
- declare function test_varDelete_constructor(): void;
30
- declare function test_varDelete_toJson(): void;
31
- declare function test_varDelete_fromJson(): void;
32
- declare function test_varDelete_runForwards(): void;
33
- declare function test_varDelete_runBackwards(): void;
34
- declare function test_varRename_constructor(): void;
35
- declare function test_varRename_toJson(): void;
36
- declare function test_varRename_fromJson(): void;
37
- declare function test_varRename_runForward(): void;
38
- declare function test_varBackard_runForward(): void;
39
- declare function test_events_filter(): void;
40
- declare function test_events_filterForward(): void;
41
- declare function test_events_filterBackward(): void;
42
- declare function test_events_filterDifferentBlocks(): void;
43
- declare function test_events_mergeMove(): void;
44
- declare function test_events_mergeChange(): void;
45
- declare function test_events_mergeUi(): void;
46
- /**
47
- * Tests that events that collide on a (event, block, workspace) tuple
48
- * but cannot be merged do not get dropped during filtering.
49
- */
50
- declare function test_events_stackclick(): void;
51
- /**
52
- * Mutator composition could result in move events for blocks
53
- * connected to the mutated block that were null operations. This
54
- * leads to events in the undo/redo queue that do nothing, requiring
55
- * an extra undo/redo to proceed to the next event. This test ensures
56
- * that two move events that do get merged (disconnecting and
57
- * reconnecting a block in response to a mutator change) are filtered
58
- * from the queue.
59
- */
60
- declare function test_events_filteraftermerge(): void;
61
- /**
62
- * Helper function to simulate block move events.
63
- *
64
- * @param {!Array.<Blockly.Events.Abstract>} events a queue of events.
65
- * @param {!Blockly.Block} block the block to be moved
66
- * @param {number} newX new X coordinate of the block
67
- * @param {number} newY new Y coordinate of the block
68
- */
69
- declare function helper_addMoveEvent(events: Array<Blockly.Events.Abstract>, block: Blockly.Block, newX: number, newY: number): void;
70
- declare function helper_addMoveEventParent(events: any, block: any, parent: any): void;
71
- declare function test_events_newblock_newvar(): void;
72
- declare function test_events_newblock_newvar_xml(): void;
73
- declare function test_events_filter_nomerge_move(): void;
74
- declare var mockControl_: any;
75
- declare var workspace: any;
76
- //# sourceMappingURL=event_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/event_test.js"],"names":[],"mappings":"AAgCA,yCAGC;AAED,uDAoBC;AAED,4CAKC;AAED,0DAGC;AAED,qDAaC;AAED,mDAYC;AAED,mDAWC;AAGD,2FAMC;AAGD,2FAMC;AAGD,sEAKC;AAGD,4DAOC;AAED,iDAWC;AAED,sDAYC;AAED,iDAUC;AAED,sDAUC;AAED,iDAaC;AAED,sDAaC;AAED,yDAkBC;AAED,0DAgBC;AAED,8DAkBC;AAED,+DAgBC;AAED,uDAiBC;AAED,wDAqBC;AAED,oDASC;AAED,+CA+CC;AAED,iDAaC;AAED,mDAQC;AAED,qDAQC;AAED,oDAMC;AAED,+CA4CC;AAED,iDAUC;AAED,oDAQC;AAED,qDAQC;AAED,oDAMC;AAED,+CASC;AAED,iDAUC;AAED,mDAQC;AAED,oDAQC;AAED,4CAoBC;AAED,mDAkBC;AAED,oDAkBC;AAED,2DAaC;AAED,+CAWC;AAED,iDAYC;AAED,6CAmBC;AAED;;;GAGG;AACH,gDAaC;AAED;;;;;;;;GAQG;AACH,sDAYC;AAED;;;;;;;GAOG;AACH,6CALY,KAAK,CAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAC/B,OAAO,CAAC,KAAK,QACd,MAAM,QACN,MAAM,QAMhB;AAED,uFAIC;AAED,qDAiCC;AAID,yDAmCC;AAED,yDA4BC;AAx0BD,8BAAgB;AAChB,2BAAa"}
@@ -1,18 +0,0 @@
1
- declare function test_extension(): void;
2
- declare function test_extension_missing(): void;
3
- declare function test_extension_not_a_function(): void;
4
- declare function test_parent_tooltip_when_inline(): void;
5
- declare function test_mixin_extension(): void;
6
- declare function test_bad_mixin_overwrites_local_value(): void;
7
- declare function test_bad_mixin_overwrites_prototype(): void;
8
- declare function test_mutator_mixin(): void;
9
- declare function test_mutator_mixin_no_dialog(): void;
10
- declare function test_mutator_mixin_no_decompose_fails(): void;
11
- declare function test_mutator_mixin_no_compose_fails(): void;
12
- declare function test_mutator_mixin_no_domToMutation_fails(): void;
13
- declare function test_mutator_mixin_no_mutationToDom_fails(): void;
14
- declare function test_use_mutator_as_extension_fails(): void;
15
- declare function test_use_mutator_mixin_as_extension_fails(): void;
16
- declare function test_use_extension_as_mutator_fails(): void;
17
- declare function test_mutator_mixin_plus_function(): void;
18
- //# sourceMappingURL=extensions_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extensions_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/extensions_test.js"],"names":[],"mappings":"AA0BA,wCAgDC;AAED,gDAwBC;AAED,uDAoCC;AAED,yDA6DC;AAED,8CAoCC;AAED,+DAqCC;AAED,6DAqCC;AAED,4CA8CC;AAED,sDAyCC;AAGD,+DAqBC;AAED,6DAqBC;AAED,mEAqBC;AAED,mEAqBC;AAED,6DA0CC;AAED,mEA0CC;AAED,6DAqCC;AAED,0DA2CC"}
@@ -1,3 +0,0 @@
1
- declare function test_fieldangle_constructor(): void;
2
- declare function test_fieldangle_fromJson(): void;
3
- //# sourceMappingURL=field_angle_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field_angle_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/field_angle_test.js"],"names":[],"mappings":"AA0BA,qDAYC;AAED,kDAGC"}
@@ -1,3 +0,0 @@
1
- declare function test_fieldnumber_constructor(): void;
2
- declare function test_fieldnumber_fromJson(): void;
3
- //# sourceMappingURL=field_number_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field_number_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/field_number_test.js"],"names":[],"mappings":"AA0BA,sDAoCC;AAED,mDAaC"}
@@ -1,8 +0,0 @@
1
- declare function test_field_isEditable_simple(): void;
2
- declare function test_field_isEditable_false(): void;
3
- declare function test_field_isEditable_editableBlock(): void;
4
- declare function test_field_isEditable_editableBlock_false(): void;
5
- declare function test_field_isEditable_nonEditableBlock(): void;
6
- declare function test_field_isEditable_nonEditableBlock_false(): void;
7
- declare function test_field_register_with_custom_field(): void;
8
- //# sourceMappingURL=field_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/field_test.js"],"names":[],"mappings":"AA0BA,sDAKC;AAED,qDAKC;AAED,6DAWC;AAED,mEAYC;AAED,gEAWC;AAED,sEAYC;AAED,+DAyBC"}
@@ -1,5 +0,0 @@
1
- declare function test_fieldvariablegetter_constructor(): void;
2
- declare function test_fieldvariablegetter_isEditable(): void;
3
- declare function test_fieldvariablegetter_isEditableBlock(): void;
4
- declare function test_fieldvariablegetter_isSerializable(): void;
5
- //# sourceMappingURL=field_variable_getter_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field_variable_getter_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/field_variable_getter_test.js"],"names":[],"mappings":"AA0BA,8DAKC;AAED,6DAKC;AAED,kEAaC;AAED,iEAIC"}
@@ -1,19 +0,0 @@
1
- declare function fieldVariableTestWithMocks_setUp(): void;
2
- declare function fieldVariableTestWithMocks_tearDown(): void;
3
- declare function fieldVariable_mockBlock(workspace: any): {
4
- workspace: any;
5
- isShadow: () => boolean;
6
- };
7
- declare function fieldVariable_createAndInitField(workspace: any): any;
8
- declare function test_fieldVariable_Constructor(): void;
9
- declare function test_fieldVariable_setValueMatchId(): void;
10
- declare function test_fieldVariable_setValueNoVariable(): void;
11
- declare function test_fieldVariable_dropdownCreateVariablesExist(): void;
12
- declare function test_fieldVariable_setValueNull(): void;
13
- declare function test_fieldVariable_getVariableTypes_undefinedVariableTypes(): void;
14
- declare function test_fieldVariable_getVariableTypes_givenVariableTypes(): void;
15
- declare function test_fieldVariable_getVariableTypes_nullVariableTypes(): void;
16
- declare function test_fieldVariable_getVariableTypes_emptyListVariableTypes(): void;
17
- declare var workspace: any;
18
- declare var mockControl_: any;
19
- //# sourceMappingURL=field_variable_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field_variable_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/field_variable_test.js"],"names":[],"mappings":"AAgCA,0DAGC;AAED,6DAGC;AAED;;;EAOC;AAED,uEAOC;AAED,wDAMC;AAED,4DAeC;AAED,+DAkBC;AAED,yEAeC;AAED,yDAcC;AAED,oFAWC;AAED,gFAWC;AAED,+EAiBC;AAED,oFAmBC;AA7KD,2BAAa;AACb,8BAAgB"}
@@ -1,2 +0,0 @@
1
- declare function test_prefix(): void;
2
- //# sourceMappingURL=generator_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generator_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/generator_test.js"],"names":[],"mappings":"AAqBA,qCAMC"}
@@ -1,10 +0,0 @@
1
- declare function gestureTest_setUp(): void;
2
- declare function gestureTest_tearDown(): void;
3
- declare function test_gestureConstructor(): void;
4
- declare function test_gestureIsField_ClickInWorkspace(): void;
5
- declare function gestureIsFieldClick_InFlyoutHelper(flyout: any, expectedResult: any): void;
6
- declare function test_gestureIsFieldClick_AutoCloseFlyout(): void;
7
- declare function test_gestureIsFieldClick_AlwaysOpenFlyout(): void;
8
- declare var e: any;
9
- declare var workspace: any;
10
- //# sourceMappingURL=gesture_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gesture_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/gesture_test.js"],"names":[],"mappings":"AA6BA,2CAGC;AAED,8CAGC;AAED,iDAIC;AAED,8DAWC;AAED,4FAeC;AAED,kEAKC;AAED,mEAMC;AA9DD,mBAAK;AACL,2BAAa"}
@@ -1,9 +0,0 @@
1
- declare function test_appendField_simple(): void;
2
- declare function test_appendField_string(): void;
3
- declare function test_appendField_prefix(): void;
4
- declare function test_appendField_suffix(): void;
5
- declare function test_insertFieldAt_simple(): void;
6
- declare function test_insertFieldAt_string(): void;
7
- declare function test_insertFieldAt_prefix(): void;
8
- declare function test_insertFieldAt_suffix(): void;
9
- //# sourceMappingURL=input_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/input_test.js"],"names":[],"mappings":"AAyBA,iDAsBC;AAED,iDAeC;AAED,iDAgBC;AAED,iDAgBC;AAED,mDAsBC;AAED,mDAuBC;AAED,mDAwBC;AAED,mDAwBC"}
@@ -1,11 +0,0 @@
1
- /** Ensure a block can be instantiated from a JSON definition. */
2
- declare function test_json_minimal(): void;
3
- /** Ensure message0 creates an input. */
4
- declare function test_json_message0(): void;
5
- /** Ensure message1 creates a new input. */
6
- declare function test_json_message1(): void;
7
- /** Ensure message string is dereferenced. */
8
- declare function test_json_message0_i18n(): void;
9
- declare function test_json_dropdown(): void;
10
- declare function test_json_dropdown_image(): void;
11
- //# sourceMappingURL=json_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/json_test.js"],"names":[],"mappings":"AAqBA,mEAAmE;AACnE,2CAoBC;AAED,0CAA0C;AAC1C,4CAyBC;AAED,6CAA6C;AAC7C,4CAiCC;AAED,+CAA+C;AAC/C,iDA6BC;AAED,4CA8CC;AAED,kDAkFC"}
@@ -1,5 +0,0 @@
1
- declare function test_safeName(): void;
2
- declare function test_getName(): void;
3
- declare function test_getDistinctName(): void;
4
- declare function test_nameEquals(): void;
5
- //# sourceMappingURL=names_test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"names_test.d.ts","sourceRoot":"","sources":["../../../../tests/jsunit/names_test.js"],"names":[],"mappings":"AAqBA,uCAQC;AAED,sCAUC;AAED,8CAOC;AAED,yCAIC"}