scratch-blocks 2.1.5 → 2.1.7

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 (118) hide show
  1. package/AGENTS.md +58 -14
  2. package/dist/main.mjs +1 -1
  3. package/dist/types/src/block_reporting.d.ts.map +1 -1
  4. package/dist/types/src/blocks/procedures.d.ts +2 -2
  5. package/dist/types/src/blocks/procedures.d.ts.map +1 -1
  6. package/dist/types/src/checkable_continuous_flyout.d.ts +6 -3
  7. package/dist/types/src/checkable_continuous_flyout.d.ts.map +1 -1
  8. package/dist/types/src/checkbox_bubble.d.ts +7 -7
  9. package/dist/types/src/checkbox_bubble.d.ts.map +1 -1
  10. package/dist/types/src/colours.d.ts.map +1 -1
  11. package/dist/types/src/context_menu_items.d.ts.map +1 -1
  12. package/dist/types/src/events/events_block_comment_base.d.ts +1 -1
  13. package/dist/types/src/events/events_block_comment_base.d.ts.map +1 -1
  14. package/dist/types/src/events/events_block_drag_end.d.ts +1 -1
  15. package/dist/types/src/events/events_block_drag_end.d.ts.map +1 -1
  16. package/dist/types/src/events/events_block_drag_outside.d.ts +1 -1
  17. package/dist/types/src/events/events_block_drag_outside.d.ts.map +1 -1
  18. package/dist/types/src/fields/field_colour_slider.d.ts.map +1 -1
  19. package/dist/types/src/fields/field_matrix.d.ts.map +1 -1
  20. package/dist/types/src/fields/field_note.d.ts +6 -4
  21. package/dist/types/src/fields/field_note.d.ts.map +1 -1
  22. package/dist/types/src/fields/field_textinput_removable.d.ts.map +1 -1
  23. package/dist/types/src/fields/field_variable_getter.d.ts.map +1 -1
  24. package/dist/types/src/fields/field_vertical_separator.d.ts.map +1 -1
  25. package/dist/types/src/fields/scratch_field_angle.d.ts.map +1 -1
  26. package/dist/types/src/fields/scratch_field_dropdown.d.ts.map +1 -1
  27. package/dist/types/src/fields/scratch_field_number.d.ts.map +1 -1
  28. package/dist/types/src/fields/scratch_field_variable.d.ts +1 -0
  29. package/dist/types/src/fields/scratch_field_variable.d.ts.map +1 -1
  30. package/dist/types/src/flyout_checkbox_icon.d.ts +5 -5
  31. package/dist/types/src/flyout_checkbox_icon.d.ts.map +1 -1
  32. package/dist/types/src/glows.d.ts.map +1 -1
  33. package/dist/types/src/procedures.d.ts +4 -4
  34. package/dist/types/src/procedures.d.ts.map +1 -1
  35. package/dist/types/src/recyclable_block_flyout_inflater.d.ts +2 -2
  36. package/dist/types/src/recyclable_block_flyout_inflater.d.ts.map +1 -1
  37. package/dist/types/src/renderer/cat/cat_face.d.ts +1 -1
  38. package/dist/types/src/renderer/cat/cat_face.d.ts.map +1 -1
  39. package/dist/types/src/renderer/cat/drawer.d.ts.map +1 -1
  40. package/dist/types/src/renderer/constants.d.ts.map +1 -1
  41. package/dist/types/src/renderer/drawer.d.ts.map +1 -1
  42. package/dist/types/src/renderer/render_info.d.ts.map +1 -1
  43. package/dist/types/src/scratch_blocks_utils.d.ts +22 -0
  44. package/dist/types/src/scratch_blocks_utils.d.ts.map +1 -1
  45. package/dist/types/src/scratch_comment_bubble.d.ts +4 -4
  46. package/dist/types/src/scratch_comment_bubble.d.ts.map +1 -1
  47. package/dist/types/src/scratch_comment_icon.d.ts +1 -1
  48. package/dist/types/src/scratch_comment_icon.d.ts.map +1 -1
  49. package/dist/types/src/scratch_continuous_category.d.ts +3 -1
  50. package/dist/types/src/scratch_continuous_category.d.ts.map +1 -1
  51. package/dist/types/src/scratch_continuous_toolbox.d.ts +2 -1
  52. package/dist/types/src/scratch_continuous_toolbox.d.ts.map +1 -1
  53. package/dist/types/src/status_indicator_label.d.ts +3 -3
  54. package/dist/types/src/status_indicator_label.d.ts.map +1 -1
  55. package/dist/types/src/status_indicator_label_flyout_inflater.d.ts.map +1 -1
  56. package/dist/types/src/variables.d.ts +1 -1
  57. package/dist/types/src/variables.d.ts.map +1 -1
  58. package/dist/types/src/workspace_block_lookup.d.ts +4 -0
  59. package/dist/types/src/workspace_block_lookup.d.ts.map +1 -0
  60. package/eslint.config.mjs +21 -28
  61. package/package.json +1 -1
  62. package/src/block_reporting.ts +5 -5
  63. package/src/blocks/control.ts +5 -5
  64. package/src/blocks/data.ts +1 -1
  65. package/src/blocks/event.ts +1 -1
  66. package/src/blocks/motion.ts +2 -2
  67. package/src/blocks/procedures.ts +162 -69
  68. package/src/blocks/sensing.ts +0 -1
  69. package/src/blocks/vertical_extensions.ts +11 -8
  70. package/src/checkable_continuous_flyout.ts +45 -12
  71. package/src/checkbox_bubble.ts +7 -7
  72. package/src/colours.ts +4 -2
  73. package/src/context_menu_items.ts +41 -16
  74. package/src/data_category.ts +11 -3
  75. package/src/events/events_block_comment_base.ts +5 -1
  76. package/src/events/events_block_comment_change.ts +5 -1
  77. package/src/events/events_block_comment_collapse.ts +6 -2
  78. package/src/events/events_block_comment_create.ts +5 -1
  79. package/src/events/events_block_comment_move.ts +6 -2
  80. package/src/events/events_block_comment_resize.ts +6 -2
  81. package/src/events/events_block_drag_end.ts +5 -1
  82. package/src/events/events_block_drag_outside.ts +5 -1
  83. package/src/events/events_scratch_variable_create.ts +5 -1
  84. package/src/fields/field_colour_slider.ts +3 -5
  85. package/src/fields/field_matrix.ts +33 -17
  86. package/src/fields/field_note.ts +56 -20
  87. package/src/fields/field_textinput_removable.ts +13 -4
  88. package/src/fields/field_variable_getter.ts +20 -6
  89. package/src/fields/field_vertical_separator.ts +5 -1
  90. package/src/fields/scratch_field_angle.ts +32 -21
  91. package/src/fields/scratch_field_dropdown.ts +6 -2
  92. package/src/fields/scratch_field_number.ts +22 -13
  93. package/src/fields/scratch_field_variable.ts +26 -12
  94. package/src/flyout_checkbox_icon.ts +9 -5
  95. package/src/glows.ts +5 -5
  96. package/src/index.ts +18 -6
  97. package/src/procedures.ts +92 -42
  98. package/src/recyclable_block_flyout_inflater.ts +5 -4
  99. package/src/renderer/cat/cat_face.ts +1 -1
  100. package/src/renderer/cat/drawer.ts +4 -1
  101. package/src/renderer/constants.ts +19 -14
  102. package/src/renderer/drawer.ts +2 -1
  103. package/src/renderer/render_info.ts +12 -9
  104. package/src/renderer/renderer.ts +1 -1
  105. package/src/scratch_blocks_utils.ts +0 -2
  106. package/src/scratch_c_block_wrap.ts +37 -21
  107. package/src/scratch_comment_bubble.ts +30 -19
  108. package/src/scratch_comment_icon.ts +9 -12
  109. package/src/scratch_continuous_category.ts +20 -11
  110. package/src/scratch_continuous_toolbox.ts +12 -3
  111. package/src/scratch_dragger.ts +2 -2
  112. package/src/scratch_variable_map.ts +1 -1
  113. package/src/status_indicator_label.ts +13 -9
  114. package/src/status_indicator_label_flyout_inflater.ts +2 -1
  115. package/src/variables.ts +21 -14
  116. package/src/workspace_block_lookup.ts +14 -0
  117. package/src/xml.ts +1 -1
  118. package/types/continuous-toolbox.d.ts +0 -1
package/AGENTS.md CHANGED
@@ -92,26 +92,69 @@ When adding runtime checks for states that should never happen (including guard-
92
92
 
93
93
  ## TypeScript guidelines
94
94
 
95
- ### When using non-null assertions (`!`)
95
+ ### Avoid `any`
96
96
 
97
- Use sparingly and only when you genuinely know — in a way the compiler cannot prove that a value is not null or
98
- undefined. Prefer type guards (`if (!x) return`), optional chaining (`?.`), or nullish coalescing (`??`) instead. The
99
- `!` operator silences the compiler without adding any runtime safety, so a misplaced one becomes a runtime crash.
97
+ Do not use `any` as a type annotation. Prefer proper types, `unknown`, or a union. When calling into Blockly APIs
98
+ that have weak types, add a local cast (`as ConcreteType`) with a comment explaining the narrowing rather than
99
+ propagating `any` throughout the caller.
100
100
 
101
- Before adding a new `!`, quickly check these alternatives:
101
+ ### Non-null assertions (`!`)
102
102
 
103
- - Can you narrow once and reuse a local (`const x = ...; if (!x) return;`)?
104
- - Can the type carry the uncertainty directly (`prop?: T`, `T | null`) and be assigned conditionally?
105
- - Can you use optional chaining for best-effort UI updates (`node?.setAttribute(...)`)?
106
- - If data is required (e.g., mutation XML attrs), can you validate and fail clearly instead of asserting?
103
+ Do not use `!` unless you genuinely know in a way the compiler cannot prove that a value is non-null. Prefer:
107
104
 
108
- Prefer narrowing once and reusing a local variable over repeating assertions at each use site.
105
+ - A type guard with early return: `if (!x) return;`
106
+ - Optional chaining for best-effort reads: `node?.getAttribute(...)`
107
+ - Nullish coalescing for fallbacks: `value ?? default`
109
108
 
110
- ### When using type assertions (`as`)
109
+ If data is required (e.g., deserialized event fields), validate and fail with a logged error rather than asserting.
111
110
 
112
- Rely on TypeScript's inference and explicit type annotations first. Use `as SomeType` only when necessary (e.g., when
113
- narrowing a union that inference can't resolve). Treat `as unknown as Type` as a last resort, and add a comment
114
- explaining why it is both necessary and safe.
111
+ Prefer narrowing once into a local variable over repeating `!` at each use site.
112
+
113
+ #### Removing non-null assertions
114
+
115
+ When replacing `!` due to linting, preserve the fail-fast behavior. If code would have crashed on
116
+ `maybeNull.property`, replace with explicit validation that throws, not silent degradation:
117
+
118
+ ```js
119
+ // ❌ BAD: Silently masks an error that would have been loud before
120
+ const badResult = maybeElement?.property ?? fallback
121
+
122
+ // ✅ GOOD: Turns a generic crash into a specific, actionable error with context
123
+ if (!maybeElement) throw new Error('Missing required element')
124
+ const goodResult = maybeElement.property
125
+ ```
126
+
127
+ Only use graceful degradation (`if (!x) return`) when the situation genuinely warrants it (e.g., optional UI
128
+ updates). For required data (configuration, mutations, required relationships), preserve the crash behavior with an
129
+ explicit error.
130
+
131
+ ### Type assertions (`as`)
132
+
133
+ Rely on TypeScript's inference and explicit annotations first. Use `as SomeType` only when necessary (e.g., narrowing
134
+ a union inference can't resolve). Treat `as unknown as Type` as a last resort; add a comment explaining why it is
135
+ both necessary and safe.
136
+
137
+ ### Nullish coalescing and optional chaining
138
+
139
+ Prefer `??` over `|| default` for null/undefined fallbacks, and `?.` over `x && x.y` for optional member access.
140
+ Both are safer (they don't coerce falsy values) and trigger lint errors if the left-hand side is provably non-null.
141
+
142
+ ### Promises
143
+
144
+ Do not leave promises floating. Either `await` the result, return it, or prefix with `void` to explicitly discard it.
145
+ Unhandled promise rejections are silent failures.
146
+
147
+ ### Loop style
148
+
149
+ Prefer `for...of` over index-based `for` loops when the index is not needed.
150
+
151
+ ### Unused values
152
+
153
+ Keep `no-unused-vars` enabled. Preferred handling:
154
+
155
+ - Remove dead locals/imports when possible.
156
+ - For intentionally unused function parameters, prefix with `_` (e.g. `_event`).
157
+ - For required locals in no-op/interface-conformance paths, use `void value` to mark the discard explicitly.
115
158
 
116
159
  ## Common patterns
117
160
 
@@ -144,5 +187,6 @@ Review all changes and confirm:
144
187
  - **Simplicity**: Implementation is as simple as possible; no unnecessary code remains.
145
188
  - **`node_modules/`**: No changes within this directory. In particular, no direct edits to Blockly source files.
146
189
  - **Runtime checks**: Any new guards for states that should never happen include diagnostic logging.
190
+ - **Build passes**: `npm run build` completes successfully.
147
191
  - **Tests pass**: `npm run test` completes with no failures.
148
192
  - **No lint errors**: `npm run test:lint` passes. Iterate with `npm run format` and/or manual changes as needed.