blockly 8.0.4-beta.0 → 8.0.5-beta.0

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 (858) hide show
  1. package/blockly.min.js +2421 -2688
  2. package/blockly_compressed.js +1499 -1994
  3. package/blockly_compressed.js.map +1 -1
  4. package/blocks/blocks.js +3 -2
  5. package/blocks/colour.js +3 -1
  6. package/blocks/lists.js +94 -22
  7. package/blocks/logic.js +14 -6
  8. package/blocks/loops.js +5 -3
  9. package/blocks/math.js +3 -1
  10. package/blocks/procedures.js +3 -1
  11. package/blocks/text.js +14 -6
  12. package/blocks/variables.js +3 -1
  13. package/blocks/variables_dynamic.js +3 -1
  14. package/blocks.d.ts +0 -2
  15. package/blocks_compressed.js +189 -171
  16. package/blocks_compressed.js.map +1 -1
  17. package/closure/goog/base.d.ts +1 -0
  18. package/closure/goog/base_minimal.d.ts +18 -0
  19. package/closure/goog/goog.d.ts +25 -0
  20. package/core/any_aliases.d.ts +1 -0
  21. package/core/any_aliases.ts +1 -0
  22. package/core/block.d.ts +779 -0
  23. package/core/{block.js → block.ts} +610 -719
  24. package/core/block_animations.d.ts +33 -0
  25. package/core/{block_animations.js → block_animations.ts} +75 -79
  26. package/core/block_drag_surface.d.ts +111 -0
  27. package/core/{block_drag_surface.js → block_drag_surface.ts} +85 -117
  28. package/core/block_dragger.d.ts +143 -0
  29. package/core/{block_dragger.js → block_dragger.ts} +139 -176
  30. package/core/block_svg.d.ts +588 -0
  31. package/core/{block_svg.js → block_svg.ts} +494 -630
  32. package/core/blockly.d.ts +562 -0
  33. package/core/blockly.js +1 -1
  34. package/core/blockly.ts +749 -0
  35. package/core/blockly_options.d.ts +69 -0
  36. package/core/blockly_options.ts +81 -0
  37. package/core/blocks.d.ts +17 -0
  38. package/core/{blocks.js → blocks.ts} +4 -8
  39. package/core/browser_events.d.ts +85 -0
  40. package/core/{browser_events.js → browser_events.ts} +98 -93
  41. package/core/bubble.d.ts +279 -0
  42. package/core/{bubble.js → bubble.ts} +277 -370
  43. package/core/bubble_dragger.d.ts +73 -0
  44. package/core/bubble_dragger.ts +229 -0
  45. package/core/bump_objects.d.ts +34 -0
  46. package/core/{bump_objects.js → bump_objects.ts} +54 -52
  47. package/core/clipboard.d.ts +42 -0
  48. package/core/clipboard.ts +91 -0
  49. package/core/comment.d.ts +113 -0
  50. package/core/{comment.js → comment.ts} +135 -185
  51. package/core/common.d.ts +129 -0
  52. package/core/{common.js → common.ts} +105 -82
  53. package/core/component_manager.d.ts +91 -0
  54. package/core/component_manager.ts +211 -0
  55. package/core/config.d.ts +23 -0
  56. package/core/{config.js → config.ts} +12 -19
  57. package/core/connection.d.ts +232 -0
  58. package/core/{connection.js → connection.ts} +187 -237
  59. package/core/connection_checker.d.ts +78 -0
  60. package/core/{connection_checker.js → connection_checker.ts} +66 -77
  61. package/core/connection_db.d.ts +91 -0
  62. package/core/{connection_db.js → connection_db.ts} +62 -87
  63. package/core/connection_type.d.ts +15 -0
  64. package/core/{connection_type.js → connection_type.ts} +8 -12
  65. package/core/constants.d.ts +15 -0
  66. package/core/{constants.js → constants.ts} +4 -8
  67. package/core/contextmenu.d.ts +80 -0
  68. package/core/{contextmenu.js → contextmenu.ts} +118 -153
  69. package/core/contextmenu_items.d.ts +77 -0
  70. package/core/contextmenu_items.ts +576 -0
  71. package/core/contextmenu_registry.d.ts +105 -0
  72. package/core/contextmenu_registry.ts +179 -0
  73. package/core/css.d.ts +24 -0
  74. package/core/{css.js → css.ts} +16 -24
  75. package/core/delete_area.d.ts +47 -0
  76. package/core/delete_area.ts +82 -0
  77. package/core/dialog.d.ts +61 -0
  78. package/core/dialog.ts +127 -0
  79. package/core/drag_target.d.ts +63 -0
  80. package/core/drag_target.ts +94 -0
  81. package/core/dropdowndiv.d.ts +155 -0
  82. package/core/{dropdowndiv.js → dropdowndiv.ts} +262 -333
  83. package/core/events/events.d.ts +102 -0
  84. package/core/events/events.ts +123 -0
  85. package/core/events/events_abstract.d.ts +51 -0
  86. package/core/events/events_abstract.ts +112 -0
  87. package/core/events/events_block_base.d.ts +31 -0
  88. package/core/events/events_block_base.ts +65 -0
  89. package/core/events/events_block_change.d.ts +55 -0
  90. package/core/events/{events_block_change.js → events_block_change.ts} +45 -48
  91. package/core/events/events_block_create.d.ts +35 -0
  92. package/core/events/{events_block_create.js → events_block_create.ts} +30 -35
  93. package/core/events/events_block_delete.d.ts +36 -0
  94. package/core/events/{events_block_delete.js → events_block_delete.ts} +34 -39
  95. package/core/events/events_block_drag.d.ts +36 -0
  96. package/core/events/events_block_drag.ts +82 -0
  97. package/core/events/events_block_move.d.ts +51 -0
  98. package/core/events/{events_block_move.js → events_block_move.ts} +54 -50
  99. package/core/events/events_bubble_open.d.ts +35 -0
  100. package/core/events/events_bubble_open.ts +82 -0
  101. package/core/events/events_click.d.ts +36 -0
  102. package/core/events/{events_click.js → events_click.ts} +27 -30
  103. package/core/events/events_comment_base.d.ts +39 -0
  104. package/core/events/events_comment_base.ts +107 -0
  105. package/core/events/events_comment_change.d.ts +43 -0
  106. package/core/events/{events_comment_change.js → events_comment_change.ts} +31 -28
  107. package/core/events/events_comment_create.d.ts +35 -0
  108. package/core/events/{events_comment_create.js → events_comment_create.ts} +24 -26
  109. package/core/events/events_comment_delete.d.ts +35 -0
  110. package/core/events/{events_comment_delete.js → events_comment_delete.ts} +20 -24
  111. package/core/events/events_comment_move.d.ts +55 -0
  112. package/core/events/{events_comment_move.js → events_comment_move.ts} +39 -42
  113. package/core/events/events_marker_move.d.ts +40 -0
  114. package/core/events/events_marker_move.ts +99 -0
  115. package/core/events/events_selected.d.ts +34 -0
  116. package/core/events/events_selected.ts +78 -0
  117. package/core/events/events_theme_change.d.ts +30 -0
  118. package/core/events/{events_theme_change.js → events_theme_change.ts} +19 -24
  119. package/core/events/events_toolbox_item_select.d.ts +34 -0
  120. package/core/events/events_toolbox_item_select.ts +79 -0
  121. package/core/events/events_trashcan_open.d.ts +31 -0
  122. package/core/events/events_trashcan_open.ts +68 -0
  123. package/core/events/events_ui.d.ts +37 -0
  124. package/core/events/{events_ui.js → events_ui.ts} +27 -26
  125. package/core/events/events_ui_base.d.ts +26 -0
  126. package/core/events/{events_ui_base.js → events_ui_base.ts} +17 -26
  127. package/core/events/events_var_base.d.ts +31 -0
  128. package/core/events/events_var_base.ts +65 -0
  129. package/core/events/events_var_create.d.ts +35 -0
  130. package/core/events/{events_var_create.js → events_var_create.ts} +24 -25
  131. package/core/events/events_var_delete.d.ts +35 -0
  132. package/core/events/{events_var_delete.js → events_var_delete.ts} +24 -25
  133. package/core/events/events_var_rename.d.ts +36 -0
  134. package/core/events/{events_var_rename.js → events_var_rename.ts} +25 -26
  135. package/core/events/events_viewport.d.ts +39 -0
  136. package/core/events/events_viewport.ts +100 -0
  137. package/core/events/utils.d.ts +272 -0
  138. package/core/events/{utils.js → utils.ts} +148 -219
  139. package/core/events/workspace_events.d.ts +36 -0
  140. package/core/events/workspace_events.ts +86 -0
  141. package/core/extensions.d.ts +107 -0
  142. package/core/{extensions.js → extensions.ts} +153 -172
  143. package/core/field.d.ts +534 -0
  144. package/core/{field.js → field.ts} +413 -489
  145. package/core/field_angle.d.ts +176 -0
  146. package/core/field_angle.ts +563 -0
  147. package/core/field_checkbox.d.ts +124 -0
  148. package/core/field_checkbox.ts +243 -0
  149. package/core/field_colour.d.ts +200 -0
  150. package/core/field_colour.ts +632 -0
  151. package/core/field_dropdown.d.ts +222 -0
  152. package/core/{field_dropdown.js → field_dropdown.ts} +277 -299
  153. package/core/field_image.d.ts +134 -0
  154. package/core/field_image.ts +282 -0
  155. package/core/field_label.d.ts +71 -0
  156. package/core/field_label.ts +152 -0
  157. package/core/field_label_serializable.d.ts +42 -0
  158. package/core/field_label_serializable.ts +76 -0
  159. package/core/field_multilineinput.d.ts +146 -0
  160. package/core/{field_multilineinput.js → field_multilineinput.ts} +166 -163
  161. package/core/field_number.d.ts +156 -0
  162. package/core/{field_number.js → field_number.ts} +110 -123
  163. package/core/field_registry.d.ts +45 -0
  164. package/core/{field_registry.js → field_registry.ts} +37 -30
  165. package/core/field_textinput.d.ts +219 -0
  166. package/core/field_textinput.ts +591 -0
  167. package/core/field_variable.d.ts +217 -0
  168. package/core/{field_variable.js → field_variable.ts} +174 -187
  169. package/core/flyout_base.d.ts +459 -0
  170. package/core/{flyout_base.js → flyout_base.ts} +429 -518
  171. package/core/flyout_button.d.ts +81 -0
  172. package/core/flyout_button.ts +292 -0
  173. package/core/flyout_horizontal.d.ts +82 -0
  174. package/core/{flyout_horizontal.js → flyout_horizontal.ts} +97 -107
  175. package/core/flyout_metrics_manager.d.ts +40 -0
  176. package/core/{flyout_metrics_manager.js → flyout_metrics_manager.ts} +22 -34
  177. package/core/flyout_vertical.d.ts +83 -0
  178. package/core/{flyout_vertical.js → flyout_vertical.ts} +106 -117
  179. package/core/generator.d.ts +205 -0
  180. package/core/{generator.js → generator.ts} +168 -193
  181. package/core/gesture.d.ts +357 -0
  182. package/core/{gesture.js → gesture.ts} +289 -369
  183. package/core/grid.d.ts +83 -0
  184. package/core/grid.ts +192 -0
  185. package/core/icon.d.ts +78 -0
  186. package/core/icon.ts +189 -0
  187. package/core/inject.d.ts +15 -0
  188. package/core/{inject.js → inject.ts} +101 -100
  189. package/core/input.d.ts +128 -0
  190. package/core/input.ts +309 -0
  191. package/core/input_types.d.ts +14 -0
  192. package/core/{input_types.js → input_types.ts} +8 -12
  193. package/core/insertion_marker_manager.d.ts +212 -0
  194. package/core/{insertion_marker_manager.js → insertion_marker_manager.ts} +234 -236
  195. package/core/interfaces/i_ast_node_location.d.ts +11 -0
  196. package/core/interfaces/{i_ast_node_location.js → i_ast_node_location.ts} +4 -7
  197. package/core/interfaces/i_ast_node_location_svg.d.ts +22 -0
  198. package/core/interfaces/i_ast_node_location_svg.ts +37 -0
  199. package/core/interfaces/i_ast_node_location_with_block.d.ts +18 -0
  200. package/core/interfaces/i_ast_node_location_with_block.ts +38 -0
  201. package/core/interfaces/i_autohideable.d.ts +18 -0
  202. package/core/interfaces/i_autohideable.ts +34 -0
  203. package/core/interfaces/i_block_dragger.d.ts +43 -0
  204. package/core/interfaces/i_block_dragger.ts +67 -0
  205. package/core/interfaces/i_bounded_element.d.ts +24 -0
  206. package/core/interfaces/i_bounded_element.ts +42 -0
  207. package/core/interfaces/i_bubble.d.ts +59 -0
  208. package/core/interfaces/i_bubble.ts +88 -0
  209. package/core/interfaces/i_collapsible_toolbox_item.d.ts +26 -0
  210. package/core/interfaces/i_collapsible_toolbox_item.ts +47 -0
  211. package/core/interfaces/i_component.d.ts +17 -0
  212. package/core/interfaces/{i_component.js → i_component.ts} +9 -14
  213. package/core/interfaces/i_connection_checker.d.ts +69 -0
  214. package/core/interfaces/i_connection_checker.ts +102 -0
  215. package/core/interfaces/i_contextmenu.d.ts +13 -0
  216. package/core/interfaces/i_contextmenu.ts +26 -0
  217. package/core/interfaces/i_copyable.d.ts +24 -0
  218. package/core/interfaces/i_copyable.ts +40 -0
  219. package/core/interfaces/i_deletable.d.ts +16 -0
  220. package/core/interfaces/{i_deletable.js → i_deletable.ts} +9 -13
  221. package/core/interfaces/i_delete_area.d.ts +25 -0
  222. package/core/interfaces/i_delete_area.ts +46 -0
  223. package/core/interfaces/i_drag_target.d.ts +53 -0
  224. package/core/interfaces/i_drag_target.ts +84 -0
  225. package/core/interfaces/i_draggable.d.ts +12 -0
  226. package/core/interfaces/{i_draggable.js → i_draggable.ts} +4 -10
  227. package/core/interfaces/i_flyout.d.ts +134 -0
  228. package/core/interfaces/i_flyout.ts +186 -0
  229. package/core/interfaces/i_keyboard_accessible.d.ts +18 -0
  230. package/core/interfaces/i_keyboard_accessible.ts +35 -0
  231. package/core/interfaces/i_metrics_manager.d.ts +117 -0
  232. package/core/interfaces/i_metrics_manager.ts +151 -0
  233. package/core/interfaces/i_movable.d.ts +16 -0
  234. package/core/interfaces/{i_movable.js → i_movable.ts} +9 -13
  235. package/core/interfaces/i_positionable.d.ts +27 -0
  236. package/core/interfaces/i_positionable.ts +50 -0
  237. package/core/interfaces/i_registrable.d.ts +11 -0
  238. package/core/interfaces/{i_registrable.js → i_registrable.ts} +3 -7
  239. package/core/interfaces/i_registrable_field.d.ts +17 -0
  240. package/core/interfaces/{i_registrable_field.js → i_registrable_field.ts} +8 -16
  241. package/core/interfaces/i_selectable.d.ts +18 -0
  242. package/core/interfaces/i_selectable.ts +34 -0
  243. package/core/interfaces/i_selectable_toolbox_item.d.ts +42 -0
  244. package/core/interfaces/i_selectable_toolbox_item.ts +64 -0
  245. package/core/interfaces/i_serializer.d.ts +42 -0
  246. package/core/interfaces/i_serializer.ts +65 -0
  247. package/core/interfaces/i_styleable.d.ts +21 -0
  248. package/core/interfaces/i_styleable.ts +35 -0
  249. package/core/interfaces/i_toolbox.d.ts +85 -0
  250. package/core/interfaces/i_toolbox.ts +127 -0
  251. package/core/interfaces/i_toolbox_item.d.ts +62 -0
  252. package/core/interfaces/i_toolbox_item.ts +84 -0
  253. package/core/internal_constants.d.ts +40 -0
  254. package/core/{internal_constants.js → internal_constants.ts} +13 -18
  255. package/core/keyboard_nav/ast_node.d.ts +239 -0
  256. package/core/keyboard_nav/{ast_node.js → ast_node.ts} +207 -231
  257. package/core/keyboard_nav/basic_cursor.d.ts +88 -0
  258. package/core/keyboard_nav/{basic_cursor.js → basic_cursor.ts} +55 -66
  259. package/core/keyboard_nav/cursor.d.ts +41 -0
  260. package/core/keyboard_nav/{cursor.js → cursor.ts} +25 -35
  261. package/core/keyboard_nav/marker.d.ts +58 -0
  262. package/core/keyboard_nav/{marker.js → marker.ts} +36 -55
  263. package/core/keyboard_nav/tab_navigate_cursor.d.ts +19 -0
  264. package/core/keyboard_nav/{tab_navigate_cursor.js → tab_navigate_cursor.ts} +11 -15
  265. package/core/main.d.ts +11 -0
  266. package/core/main.js +303 -0
  267. package/core/marker_manager.d.ts +85 -0
  268. package/core/marker_manager.ts +181 -0
  269. package/core/menu.d.ts +149 -0
  270. package/core/{menu.js → menu.ts} +141 -174
  271. package/core/menuitem.d.ts +118 -0
  272. package/core/menuitem.ts +240 -0
  273. package/core/metrics_manager.d.ts +201 -0
  274. package/core/{metrics_manager.js → metrics_manager.ts} +117 -156
  275. package/core/msg.d.ts +9 -0
  276. package/core/{msg.js → msg.ts} +4 -8
  277. package/core/mutator.d.ts +128 -0
  278. package/core/{mutator.js → mutator.ts} +196 -211
  279. package/core/names.d.ts +124 -0
  280. package/core/names.ts +267 -0
  281. package/core/options.d.ts +137 -0
  282. package/core/{options.js → options.ts} +147 -173
  283. package/core/positionable_helpers.d.ts +88 -0
  284. package/core/{positionable_helpers.js → positionable_helpers.ts} +63 -70
  285. package/core/procedures.d.ts +108 -0
  286. package/core/{procedures.js → procedures.ts} +143 -152
  287. package/core/registry.d.ts +137 -0
  288. package/core/registry.ts +339 -0
  289. package/core/rendered_connection.d.ts +191 -0
  290. package/core/{rendered_connection.js → rendered_connection.ts} +164 -184
  291. package/core/renderers/common/block_rendering.d.ts +114 -0
  292. package/core/renderers/common/block_rendering.ts +164 -0
  293. package/core/renderers/common/constants.d.ts +458 -0
  294. package/core/renderers/common/constants.ts +1124 -0
  295. package/core/renderers/common/debug.d.ts +28 -0
  296. package/core/renderers/common/{debug.js → debug.ts} +14 -20
  297. package/core/renderers/common/debugger.d.ts +120 -0
  298. package/core/renderers/common/{debugger.js → debugger.ts} +100 -124
  299. package/core/renderers/common/drawer.d.ts +132 -0
  300. package/core/renderers/common/{drawer.js → drawer.ts} +112 -137
  301. package/core/renderers/common/i_path_object.d.ts +117 -0
  302. package/core/renderers/common/i_path_object.ts +161 -0
  303. package/core/renderers/common/info.d.ts +194 -0
  304. package/core/renderers/common/{info.js → info.ts} +165 -222
  305. package/core/renderers/common/marker_svg.d.ts +220 -0
  306. package/core/renderers/common/marker_svg.ts +680 -0
  307. package/core/renderers/common/path_object.d.ts +146 -0
  308. package/core/renderers/common/path_object.ts +272 -0
  309. package/core/renderers/common/renderer.d.ts +157 -0
  310. package/core/renderers/common/renderer.ts +271 -0
  311. package/core/renderers/geras/constants.d.ts +23 -0
  312. package/core/renderers/geras/constants.ts +61 -0
  313. package/core/renderers/geras/drawer.d.ts +43 -0
  314. package/core/renderers/geras/{drawer.js → drawer.ts} +40 -84
  315. package/core/renderers/geras/geras.d.ts +11 -0
  316. package/core/renderers/geras/geras.ts +37 -0
  317. package/core/renderers/geras/highlight_constants.d.ts +108 -0
  318. package/core/renderers/geras/{highlight_constants.js → highlight_constants.ts} +107 -69
  319. package/core/renderers/geras/highlighter.d.ts +98 -0
  320. package/core/renderers/geras/{highlighter.js → highlighter.ts} +81 -86
  321. package/core/renderers/geras/info.d.ts +45 -0
  322. package/core/renderers/geras/{info.js → info.ts} +61 -99
  323. package/core/renderers/geras/measurables/inline_input.d.ts +23 -0
  324. package/core/renderers/geras/measurables/inline_input.ts +51 -0
  325. package/core/renderers/geras/measurables/statement_input.d.ts +23 -0
  326. package/core/renderers/geras/measurables/statement_input.ts +50 -0
  327. package/core/renderers/geras/path_object.d.ts +47 -0
  328. package/core/renderers/geras/{path_object.js → path_object.ts} +46 -74
  329. package/core/renderers/geras/renderer.d.ts +69 -0
  330. package/core/renderers/geras/renderer.ts +126 -0
  331. package/core/renderers/measurables/base.d.ts +27 -0
  332. package/core/renderers/measurables/base.ts +53 -0
  333. package/core/renderers/measurables/bottom_row.d.ts +61 -0
  334. package/core/renderers/measurables/bottom_row.ts +120 -0
  335. package/core/renderers/measurables/connection.d.ts +25 -0
  336. package/core/renderers/measurables/connection.ts +52 -0
  337. package/core/renderers/measurables/external_value_input.d.ts +27 -0
  338. package/core/renderers/measurables/external_value_input.ts +65 -0
  339. package/core/renderers/measurables/field.d.ts +30 -0
  340. package/core/renderers/measurables/field.ts +63 -0
  341. package/core/renderers/measurables/hat.d.ts +21 -0
  342. package/core/renderers/measurables/{hat.js → hat.ts} +12 -14
  343. package/core/renderers/measurables/icon.d.ts +26 -0
  344. package/core/renderers/measurables/{icon.js → icon.ts} +14 -18
  345. package/core/renderers/measurables/in_row_spacer.d.ts +21 -0
  346. package/core/renderers/measurables/in_row_spacer.ts +44 -0
  347. package/core/renderers/measurables/inline_input.d.ts +24 -0
  348. package/core/renderers/measurables/{inline_input.js → inline_input.ts} +22 -26
  349. package/core/renderers/measurables/input_connection.d.ts +29 -0
  350. package/core/renderers/measurables/input_connection.ts +66 -0
  351. package/core/renderers/measurables/input_row.d.ts +30 -0
  352. package/core/renderers/measurables/{input_row.js → input_row.ts} +24 -31
  353. package/core/renderers/measurables/jagged_edge.d.ts +20 -0
  354. package/core/renderers/measurables/{jagged_edge.js → jagged_edge.ts} +10 -13
  355. package/core/renderers/measurables/next_connection.d.ts +23 -0
  356. package/core/renderers/measurables/next_connection.ts +47 -0
  357. package/core/renderers/measurables/output_connection.d.ts +26 -0
  358. package/core/renderers/measurables/output_connection.ts +56 -0
  359. package/core/renderers/measurables/previous_connection.d.ts +23 -0
  360. package/core/renderers/measurables/previous_connection.ts +47 -0
  361. package/core/renderers/measurables/round_corner.d.ts +21 -0
  362. package/core/renderers/measurables/round_corner.ts +49 -0
  363. package/core/renderers/measurables/row.d.ts +141 -0
  364. package/core/renderers/measurables/row.ts +225 -0
  365. package/core/renderers/measurables/spacer_row.d.ts +29 -0
  366. package/core/renderers/measurables/spacer_row.ts +55 -0
  367. package/core/renderers/measurables/square_corner.d.ts +21 -0
  368. package/core/renderers/measurables/square_corner.ts +47 -0
  369. package/core/renderers/measurables/statement_input.d.ts +22 -0
  370. package/core/renderers/measurables/{statement_input.js → statement_input.ts} +14 -18
  371. package/core/renderers/measurables/top_row.d.ts +56 -0
  372. package/core/renderers/measurables/top_row.ts +122 -0
  373. package/core/renderers/measurables/types.d.ts +235 -0
  374. package/core/renderers/measurables/types.ts +332 -0
  375. package/core/renderers/minimalist/constants.d.ts +14 -0
  376. package/core/renderers/minimalist/{constants.js → constants.ts} +5 -10
  377. package/core/renderers/minimalist/drawer.d.ts +21 -0
  378. package/core/renderers/minimalist/drawer.ts +38 -0
  379. package/core/renderers/minimalist/info.d.ts +30 -0
  380. package/core/renderers/minimalist/info.ts +52 -0
  381. package/core/renderers/minimalist/minimalist.d.ts +6 -0
  382. package/core/renderers/minimalist/minimalist.ts +22 -0
  383. package/core/renderers/minimalist/renderer.d.ts +41 -0
  384. package/core/renderers/minimalist/renderer.ts +71 -0
  385. package/core/renderers/thrasos/info.d.ts +40 -0
  386. package/core/renderers/thrasos/{info.js → info.ts} +66 -67
  387. package/core/renderers/thrasos/renderer.d.ts +25 -0
  388. package/core/renderers/thrasos/renderer.ts +48 -0
  389. package/core/renderers/thrasos/thrasos.d.ts +4 -0
  390. package/core/renderers/thrasos/thrasos.ts +20 -0
  391. package/core/renderers/zelos/constants.d.ts +186 -0
  392. package/core/renderers/zelos/{constants.js → constants.ts} +294 -441
  393. package/core/renderers/zelos/drawer.d.ts +47 -0
  394. package/core/renderers/zelos/{drawer.js → drawer.ts} +73 -95
  395. package/core/renderers/zelos/info.d.ts +88 -0
  396. package/core/renderers/zelos/{info.js → info.ts} +111 -142
  397. package/core/renderers/zelos/marker_svg.d.ts +46 -0
  398. package/core/renderers/zelos/marker_svg.ts +151 -0
  399. package/core/renderers/zelos/measurables/bottom_row.d.ts +27 -0
  400. package/core/renderers/zelos/measurables/bottom_row.ts +53 -0
  401. package/core/renderers/zelos/measurables/inputs.d.ts +23 -0
  402. package/core/renderers/zelos/measurables/{inputs.js → inputs.ts} +14 -15
  403. package/core/renderers/zelos/measurables/row_elements.d.ts +21 -0
  404. package/core/renderers/zelos/measurables/row_elements.ts +45 -0
  405. package/core/renderers/zelos/measurables/top_row.d.ts +29 -0
  406. package/core/renderers/zelos/measurables/{top_row.js → top_row.ts} +14 -27
  407. package/core/renderers/zelos/path_object.d.ts +77 -0
  408. package/core/renderers/zelos/path_object.ts +215 -0
  409. package/core/renderers/zelos/renderer.d.ts +74 -0
  410. package/core/renderers/zelos/renderer.ts +142 -0
  411. package/core/renderers/zelos/zelos.d.ts +12 -0
  412. package/core/renderers/zelos/zelos.ts +39 -0
  413. package/core/scrollbar.d.ts +277 -0
  414. package/core/{scrollbar.js → scrollbar.ts} +307 -328
  415. package/core/scrollbar_pair.d.ts +105 -0
  416. package/core/{scrollbar_pair.js → scrollbar_pair.ts} +71 -79
  417. package/core/serialization/blocks.d.ts +98 -0
  418. package/core/serialization/{blocks.js → blocks.ts} +229 -228
  419. package/core/serialization/exceptions.d.ts +73 -0
  420. package/core/serialization/exceptions.ts +98 -0
  421. package/core/serialization/priorities.d.ts +15 -0
  422. package/core/serialization/{priorities.js → priorities.ts} +4 -10
  423. package/core/serialization/registry.d.ts +20 -0
  424. package/core/serialization/{registry.js → registry.ts} +11 -13
  425. package/core/serialization/variables.d.ts +14 -0
  426. package/core/serialization/{variables.js → variables.ts} +30 -32
  427. package/core/serialization/workspaces.d.ts +28 -0
  428. package/core/serialization/{workspaces.js → workspaces.ts} +30 -27
  429. package/core/shortcut_items.d.ts +61 -0
  430. package/core/{shortcut_items.js → shortcut_items.ts} +121 -157
  431. package/core/shortcut_registry.d.ts +151 -0
  432. package/core/shortcut_registry.ts +355 -0
  433. package/core/sprites.d.ts +19 -0
  434. package/core/{sprites.js → sprites.ts} +4 -6
  435. package/core/theme/classic.d.ts +12 -0
  436. package/core/theme/{classic.js → classic.ts} +5 -7
  437. package/core/theme/themes.d.ts +8 -0
  438. package/core/theme/themes.ts +22 -0
  439. package/core/theme/zelos.d.ts +11 -0
  440. package/core/theme/{zelos.js → zelos.ts} +4 -7
  441. package/core/theme.d.ts +142 -0
  442. package/core/theme.ts +221 -0
  443. package/core/theme_manager.d.ts +81 -0
  444. package/core/theme_manager.ts +186 -0
  445. package/core/toolbox/category.d.ts +239 -0
  446. package/core/toolbox/category.ts +679 -0
  447. package/core/toolbox/collapsible_category.d.ts +91 -0
  448. package/core/toolbox/collapsible_category.ts +273 -0
  449. package/core/toolbox/separator.d.ts +39 -0
  450. package/core/toolbox/separator.ts +105 -0
  451. package/core/toolbox/toolbox.d.ts +352 -0
  452. package/core/toolbox/{toolbox.js → toolbox.ts} +316 -432
  453. package/core/toolbox/toolbox_item.d.ts +85 -0
  454. package/core/toolbox/toolbox_item.ts +147 -0
  455. package/core/tooltip.d.ts +126 -0
  456. package/core/{tooltip.js → tooltip.ts} +136 -214
  457. package/core/touch.d.ts +121 -0
  458. package/core/touch.ts +306 -0
  459. package/core/touch_gesture.d.ts +115 -0
  460. package/core/{touch_gesture.js → touch_gesture.ts} +87 -125
  461. package/core/trashcan.d.ts +195 -0
  462. package/core/{trashcan.js → trashcan.ts} +226 -312
  463. package/core/utils/aria.d.ts +67 -0
  464. package/core/utils/{aria.js → aria.ts} +47 -61
  465. package/core/utils/array.d.ts +14 -0
  466. package/core/utils/{array.js → array.ts} +10 -12
  467. package/core/utils/colour.d.ts +103 -0
  468. package/core/utils/{colour.js → colour.ts} +60 -72
  469. package/core/utils/coordinate.d.ts +72 -0
  470. package/core/utils/coordinate.ts +124 -0
  471. package/core/utils/deprecation.d.ts +17 -0
  472. package/core/utils/{deprecation.js → deprecation.ts} +11 -11
  473. package/core/utils/dom.d.ts +165 -0
  474. package/core/utils/{dom.js → dom.ts} +125 -147
  475. package/core/utils/idgenerator.d.ts +25 -0
  476. package/core/utils/{idgenerator.js → idgenerator.ts} +15 -18
  477. package/core/utils/keycodes.d.ts +137 -0
  478. package/core/utils/keycodes.ts +169 -0
  479. package/core/utils/math.d.ts +30 -0
  480. package/core/utils/{math.js → math.ts} +17 -19
  481. package/core/utils/metrics.d.ts +64 -0
  482. package/core/utils/metrics.ts +97 -0
  483. package/core/utils/object.d.ts +35 -0
  484. package/core/utils/{object.js → object.ts} +30 -26
  485. package/core/utils/parsing.d.ts +50 -0
  486. package/core/utils/{parsing.js → parsing.ts} +50 -50
  487. package/core/utils/rect.d.ts +38 -0
  488. package/core/utils/{rect.js → rect.ts} +18 -31
  489. package/core/utils/sentinel.d.ts +11 -0
  490. package/core/utils/{sentinel.js → sentinel.ts} +3 -5
  491. package/core/utils/size.d.ts +27 -0
  492. package/core/utils/{size.js → size.ts} +12 -26
  493. package/core/utils/string.d.ts +55 -0
  494. package/core/utils/{string.js → string.ts} +64 -61
  495. package/core/utils/style.d.ts +127 -0
  496. package/core/utils/{style.js → style.ts} +102 -92
  497. package/core/utils/svg.d.ts +68 -0
  498. package/core/utils/svg.ts +88 -0
  499. package/core/utils/svg_math.d.ts +70 -0
  500. package/core/utils/{svg_math.js → svg_math.ts} +72 -71
  501. package/core/utils/svg_paths.d.ts +101 -0
  502. package/core/utils/{svg_paths.js → svg_paths.ts} +56 -65
  503. package/core/utils/toolbox.d.ts +193 -0
  504. package/core/utils/toolbox.ts +433 -0
  505. package/core/utils/useragent.d.ts +33 -0
  506. package/core/utils/useragent.ts +135 -0
  507. package/core/utils/xml.d.ts +52 -0
  508. package/core/utils/{xml.js → xml.ts} +26 -36
  509. package/core/utils.d.ts +217 -0
  510. package/core/utils.ts +428 -0
  511. package/core/variable_map.d.ts +141 -0
  512. package/core/{variable_map.js → variable_map.ts} +131 -149
  513. package/core/variable_model.d.ts +40 -0
  514. package/core/variable_model.ts +82 -0
  515. package/core/variables.d.ts +181 -0
  516. package/core/{variables.js → variables.ts} +206 -188
  517. package/core/variables_dynamic.d.ts +38 -0
  518. package/core/{variables_dynamic.js → variables_dynamic.ts} +47 -43
  519. package/core/warning.d.ts +50 -0
  520. package/core/{warning.js → warning.ts} +52 -66
  521. package/core/widgetdiv.d.ts +69 -0
  522. package/core/widgetdiv.ts +257 -0
  523. package/core/workspace.d.ts +386 -0
  524. package/core/workspace.ts +801 -0
  525. package/core/workspace_audio.d.ts +47 -0
  526. package/core/{workspace_audio.js → workspace_audio.ts} +47 -60
  527. package/core/workspace_comment.d.ts +170 -0
  528. package/core/workspace_comment.ts +398 -0
  529. package/core/workspace_comment_svg.d.ts +329 -0
  530. package/core/{workspace_comment_svg.js → workspace_comment_svg.ts} +347 -444
  531. package/core/workspace_drag_surface_svg.d.ts +68 -0
  532. package/core/{workspace_drag_surface_svg.js → workspace_drag_surface_svg.ts} +75 -82
  533. package/core/workspace_dragger.d.ts +48 -0
  534. package/core/workspace_dragger.ts +104 -0
  535. package/core/workspace_svg.d.ts +920 -0
  536. package/core/{workspace_svg.js → workspace_svg.ts} +855 -935
  537. package/core/xml.d.ts +117 -0
  538. package/core/{xml.js → xml.ts} +306 -326
  539. package/core/zoom_controls.d.ts +130 -0
  540. package/core/{zoom_controls.js → zoom_controls.ts} +185 -251
  541. package/core.d.ts +1 -3
  542. package/core.js +1 -2
  543. package/dart.d.ts +0 -3
  544. package/dart_compressed.js +387 -99
  545. package/dart_compressed.js.map +1 -1
  546. package/generators/dart/all.js +2 -0
  547. package/generators/dart/colour.js +1 -1
  548. package/generators/dart/lists.js +1 -1
  549. package/generators/dart/logic.js +1 -1
  550. package/generators/dart/loops.js +1 -1
  551. package/generators/dart/math.js +1 -1
  552. package/generators/dart/procedures.js +1 -1
  553. package/generators/dart/text.js +1 -1
  554. package/generators/dart/variables.js +1 -1
  555. package/generators/dart/variables_dynamic.js +1 -1
  556. package/generators/dart.js +1 -2
  557. package/generators/javascript/all.js +2 -0
  558. package/generators/javascript/colour.js +1 -1
  559. package/generators/javascript/lists.js +1 -1
  560. package/generators/javascript/logic.js +1 -1
  561. package/generators/javascript/loops.js +1 -1
  562. package/generators/javascript/math.js +4 -4
  563. package/generators/javascript/procedures.js +1 -1
  564. package/generators/javascript/text.js +2 -2
  565. package/generators/javascript/variables.js +1 -1
  566. package/generators/javascript/variables_dynamic.js +1 -1
  567. package/generators/javascript.js +1 -3
  568. package/generators/lua/all.js +2 -0
  569. package/generators/lua/colour.js +1 -1
  570. package/generators/lua/lists.js +1 -1
  571. package/generators/lua/logic.js +1 -1
  572. package/generators/lua/loops.js +1 -1
  573. package/generators/lua/math.js +1 -1
  574. package/generators/lua/procedures.js +1 -1
  575. package/generators/lua/text.js +1 -1
  576. package/generators/lua/variables.js +1 -1
  577. package/generators/lua/variables_dynamic.js +1 -1
  578. package/generators/lua.js +1 -2
  579. package/generators/php/all.js +2 -0
  580. package/generators/php/colour.js +1 -1
  581. package/generators/php/lists.js +1 -2
  582. package/generators/php/logic.js +1 -1
  583. package/generators/php/loops.js +1 -1
  584. package/generators/php/math.js +1 -1
  585. package/generators/php/procedures.js +1 -1
  586. package/generators/php/text.js +1 -1
  587. package/generators/php/variables.js +1 -1
  588. package/generators/php/variables_dynamic.js +1 -1
  589. package/generators/php.js +1 -2
  590. package/generators/python/all.js +2 -0
  591. package/generators/python/colour.js +3 -3
  592. package/generators/python/lists.js +1 -1
  593. package/generators/python/logic.js +1 -1
  594. package/generators/python/loops.js +4 -7
  595. package/generators/python/math.js +1 -1
  596. package/generators/python/procedures.js +1 -1
  597. package/generators/python/text.js +1 -1
  598. package/generators/python/variables.js +1 -1
  599. package/generators/python/variables_dynamic.js +1 -1
  600. package/generators/python.js +1 -2
  601. package/index.d.ts +2 -8
  602. package/javascript.d.ts +0 -3
  603. package/javascript_compressed.js +314 -104
  604. package/javascript_compressed.js.map +1 -1
  605. package/lua.d.ts +0 -3
  606. package/lua_compressed.js +399 -81
  607. package/lua_compressed.js.map +1 -1
  608. package/msg/ab.js +421 -421
  609. package/msg/ace.js +421 -421
  610. package/msg/af.js +421 -421
  611. package/msg/am.js +421 -421
  612. package/msg/ar.js +421 -421
  613. package/msg/ast.js +421 -421
  614. package/msg/az.js +421 -421
  615. package/msg/ba.js +421 -421
  616. package/msg/bcc.js +421 -421
  617. package/msg/be-tarask.js +421 -421
  618. package/msg/be.js +421 -421
  619. package/msg/bg.js +421 -421
  620. package/msg/bn.js +421 -421
  621. package/msg/br.js +421 -421
  622. package/msg/bs.js +421 -421
  623. package/msg/ca.js +421 -421
  624. package/msg/cdo.js +421 -421
  625. package/msg/cs.js +421 -421
  626. package/msg/da.js +421 -421
  627. package/msg/de.js +421 -421
  628. package/msg/diq.js +421 -421
  629. package/msg/dty.js +421 -421
  630. package/msg/ee.js +421 -421
  631. package/msg/el.js +421 -421
  632. package/msg/en-gb.js +421 -421
  633. package/msg/en.js +421 -421
  634. package/msg/eo.js +421 -421
  635. package/msg/es.js +421 -421
  636. package/msg/et.js +421 -421
  637. package/msg/eu.js +421 -421
  638. package/msg/fa.js +421 -421
  639. package/msg/fi.js +421 -421
  640. package/msg/fo.js +421 -421
  641. package/msg/fr.js +421 -421
  642. package/msg/frr.js +421 -421
  643. package/msg/gl.js +421 -421
  644. package/msg/gn.js +421 -421
  645. package/msg/gor.js +421 -421
  646. package/msg/ha.js +421 -421
  647. package/msg/hak.js +421 -421
  648. package/msg/he.js +421 -421
  649. package/msg/hi.js +421 -421
  650. package/msg/hr.js +421 -421
  651. package/msg/hrx.js +421 -421
  652. package/msg/hu.js +421 -421
  653. package/msg/hy.js +421 -421
  654. package/msg/ia.js +421 -421
  655. package/msg/id.js +421 -421
  656. package/msg/ig.js +421 -421
  657. package/msg/inh.js +421 -421
  658. package/msg/is.js +421 -421
  659. package/msg/it.js +421 -421
  660. package/msg/ja.js +421 -421
  661. package/msg/ka.js +421 -421
  662. package/msg/kab.js +421 -421
  663. package/msg/kbd-cyrl.js +421 -421
  664. package/msg/km.js +421 -421
  665. package/msg/kn.js +421 -421
  666. package/msg/ko.js +421 -421
  667. package/msg/ksh.js +421 -421
  668. package/msg/ku-latn.js +421 -421
  669. package/msg/ky.js +421 -421
  670. package/msg/la.js +421 -421
  671. package/msg/lb.js +421 -421
  672. package/msg/lki.js +421 -421
  673. package/msg/lo.js +421 -421
  674. package/msg/lrc.js +421 -421
  675. package/msg/lt.js +421 -421
  676. package/msg/lv.js +421 -421
  677. package/msg/mg.js +421 -421
  678. package/msg/mk.js +421 -421
  679. package/msg/ml.js +421 -421
  680. package/msg/mnw.js +421 -421
  681. package/msg/ms.js +421 -421
  682. package/msg/my.js +421 -421
  683. package/msg/mzn.js +421 -421
  684. package/msg/nb.js +421 -421
  685. package/msg/ne.js +421 -421
  686. package/msg/nl.js +421 -421
  687. package/msg/oc.js +421 -421
  688. package/msg/olo.js +421 -421
  689. package/msg/pa.js +421 -421
  690. package/msg/pl.js +421 -421
  691. package/msg/pms.js +421 -421
  692. package/msg/ps.js +421 -421
  693. package/msg/pt-br.js +421 -421
  694. package/msg/pt.js +421 -421
  695. package/msg/ro.js +421 -421
  696. package/msg/ru.js +421 -421
  697. package/msg/sc.js +421 -421
  698. package/msg/sco.js +421 -421
  699. package/msg/sd.js +421 -421
  700. package/msg/shn.js +421 -421
  701. package/msg/si.js +421 -421
  702. package/msg/sk.js +421 -421
  703. package/msg/skr-arab.js +421 -421
  704. package/msg/sl.js +421 -421
  705. package/msg/smn.js +421 -421
  706. package/msg/sq.js +421 -421
  707. package/msg/sr-latn.js +421 -421
  708. package/msg/sr.js +421 -421
  709. package/msg/sv.js +421 -421
  710. package/msg/sw.js +421 -421
  711. package/msg/ta.js +421 -421
  712. package/msg/tcy.js +421 -421
  713. package/msg/te.js +421 -421
  714. package/msg/th.js +421 -421
  715. package/msg/ti.js +421 -421
  716. package/msg/tl.js +421 -421
  717. package/msg/tlh.js +421 -421
  718. package/msg/tr.js +421 -421
  719. package/msg/ug-arab.js +421 -421
  720. package/msg/uk.js +421 -421
  721. package/msg/ur.js +421 -421
  722. package/msg/uz.js +421 -421
  723. package/msg/vi.js +421 -421
  724. package/msg/xmf.js +421 -421
  725. package/msg/yo.js +421 -421
  726. package/msg/yue.js +421 -421
  727. package/msg/zgh.js +421 -421
  728. package/msg/zh-hans.js +421 -421
  729. package/msg/zh-hant.js +421 -421
  730. package/package.json +5 -5
  731. package/php.d.ts +0 -3
  732. package/php_compressed.js +322 -93
  733. package/php_compressed.js.map +1 -1
  734. package/python.d.ts +0 -3
  735. package/python_compressed.js +237 -90
  736. package/python_compressed.js.map +1 -1
  737. package/blockly.d.ts +0 -26127
  738. package/core/blockly_options.js +0 -28
  739. package/core/bubble_dragger.js +0 -298
  740. package/core/clipboard.js +0 -80
  741. package/core/component_manager.js +0 -263
  742. package/core/contextmenu_items.js +0 -651
  743. package/core/contextmenu_registry.js +0 -178
  744. package/core/delete_area.js +0 -87
  745. package/core/dialog.js +0 -107
  746. package/core/drag_target.js +0 -98
  747. package/core/events/events.js +0 -147
  748. package/core/events/events_abstract.js +0 -133
  749. package/core/events/events_block_base.js +0 -70
  750. package/core/events/events_block_drag.js +0 -89
  751. package/core/events/events_bubble_open.js +0 -90
  752. package/core/events/events_comment_base.js +0 -121
  753. package/core/events/events_marker_move.js +0 -110
  754. package/core/events/events_selected.js +0 -83
  755. package/core/events/events_toolbox_item_select.js +0 -84
  756. package/core/events/events_trashcan_open.js +0 -73
  757. package/core/events/events_var_base.js +0 -70
  758. package/core/events/events_viewport.js +0 -107
  759. package/core/events/workspace_events.js +0 -93
  760. package/core/field_angle.js +0 -591
  761. package/core/field_checkbox.js +0 -255
  762. package/core/field_colour.js +0 -717
  763. package/core/field_image.js +0 -304
  764. package/core/field_label.js +0 -149
  765. package/core/field_label_serializable.js +0 -80
  766. package/core/field_textinput.js +0 -619
  767. package/core/flyout_button.js +0 -356
  768. package/core/grid.js +0 -226
  769. package/core/icon.js +0 -225
  770. package/core/input.js +0 -335
  771. package/core/interfaces/i_ast_node_location_svg.js +0 -45
  772. package/core/interfaces/i_ast_node_location_with_block.js +0 -41
  773. package/core/interfaces/i_autohideable.js +0 -40
  774. package/core/interfaces/i_block_dragger.js +0 -66
  775. package/core/interfaces/i_bounded_element.js +0 -45
  776. package/core/interfaces/i_bubble.js +0 -95
  777. package/core/interfaces/i_collapsible_toolbox_item.js +0 -53
  778. package/core/interfaces/i_connection_checker.js +0 -104
  779. package/core/interfaces/i_contextmenu.js +0 -32
  780. package/core/interfaces/i_copyable.js +0 -49
  781. package/core/interfaces/i_delete_area.js +0 -50
  782. package/core/interfaces/i_drag_target.js +0 -88
  783. package/core/interfaces/i_flyout.js +0 -201
  784. package/core/interfaces/i_keyboard_accessible.js +0 -38
  785. package/core/interfaces/i_metrics_manager.js +0 -154
  786. package/core/interfaces/i_positionable.js +0 -51
  787. package/core/interfaces/i_selectable.js +0 -51
  788. package/core/interfaces/i_selectable_toolbox_item.js +0 -73
  789. package/core/interfaces/i_serializer.js +0 -77
  790. package/core/interfaces/i_styleable.js +0 -39
  791. package/core/interfaces/i_toolbox.js +0 -142
  792. package/core/interfaces/i_toolbox_item.js +0 -85
  793. package/core/marker_manager.js +0 -213
  794. package/core/menuitem.js +0 -292
  795. package/core/names.js +0 -293
  796. package/core/registry.js +0 -384
  797. package/core/renderers/common/block_rendering.js +0 -170
  798. package/core/renderers/common/constants.js +0 -1250
  799. package/core/renderers/common/i_path_object.js +0 -162
  800. package/core/renderers/common/marker_svg.js +0 -721
  801. package/core/renderers/common/path_object.js +0 -283
  802. package/core/renderers/common/renderer.js +0 -305
  803. package/core/renderers/geras/constants.js +0 -73
  804. package/core/renderers/geras/geras.js +0 -36
  805. package/core/renderers/geras/measurables/inline_input.js +0 -58
  806. package/core/renderers/geras/measurables/statement_input.js +0 -57
  807. package/core/renderers/geras/renderer.js +0 -149
  808. package/core/renderers/measurables/base.js +0 -64
  809. package/core/renderers/measurables/bottom_row.js +0 -138
  810. package/core/renderers/measurables/connection.js +0 -56
  811. package/core/renderers/measurables/external_value_input.js +0 -70
  812. package/core/renderers/measurables/field.js +0 -71
  813. package/core/renderers/measurables/in_row_spacer.js +0 -47
  814. package/core/renderers/measurables/input_connection.js +0 -75
  815. package/core/renderers/measurables/next_connection.js +0 -50
  816. package/core/renderers/measurables/output_connection.js +0 -61
  817. package/core/renderers/measurables/previous_connection.js +0 -50
  818. package/core/renderers/measurables/round_corner.js +0 -52
  819. package/core/renderers/measurables/row.js +0 -247
  820. package/core/renderers/measurables/spacer_row.js +0 -69
  821. package/core/renderers/measurables/square_corner.js +0 -50
  822. package/core/renderers/measurables/top_row.js +0 -143
  823. package/core/renderers/measurables/types.js +0 -353
  824. package/core/renderers/minimalist/drawer.js +0 -42
  825. package/core/renderers/minimalist/info.js +0 -54
  826. package/core/renderers/minimalist/minimalist.js +0 -26
  827. package/core/renderers/minimalist/renderer.js +0 -80
  828. package/core/renderers/thrasos/renderer.js +0 -53
  829. package/core/renderers/thrasos/thrasos.js +0 -22
  830. package/core/renderers/zelos/marker_svg.js +0 -179
  831. package/core/renderers/zelos/measurables/bottom_row.js +0 -66
  832. package/core/renderers/zelos/measurables/row_elements.js +0 -46
  833. package/core/renderers/zelos/path_object.js +0 -247
  834. package/core/renderers/zelos/renderer.js +0 -147
  835. package/core/renderers/zelos/zelos.js +0 -38
  836. package/core/serialization/exceptions.js +0 -144
  837. package/core/shortcut_registry.js +0 -366
  838. package/core/theme/themes.js +0 -23
  839. package/core/theme.js +0 -228
  840. package/core/theme_manager.js +0 -211
  841. package/core/toolbox/category.js +0 -751
  842. package/core/toolbox/collapsible_category.js +0 -311
  843. package/core/toolbox/separator.js +0 -133
  844. package/core/toolbox/toolbox_item.js +0 -173
  845. package/core/touch.js +0 -285
  846. package/core/utils/coordinate.js +0 -138
  847. package/core/utils/global.js +0 -41
  848. package/core/utils/keycodes.js +0 -172
  849. package/core/utils/metrics.js +0 -154
  850. package/core/utils/svg.js +0 -186
  851. package/core/utils/toolbox.js +0 -459
  852. package/core/utils/useragent.js +0 -197
  853. package/core/utils.js +0 -383
  854. package/core/variable_model.js +0 -96
  855. package/core/widgetdiv.js +0 -290
  856. package/core/workspace.js +0 -836
  857. package/core/workspace_comment.js +0 -400
  858. package/core/workspace_dragger.js +0 -115
@@ -9,7 +9,6 @@
9
9
  * In the interests of a consistent UI, the toolbox shares some functions and
10
10
  * properties with the context menu.
11
11
  */
12
- 'use strict';
13
12
 
14
13
  /**
15
14
  * Dropdown input field. Used for editable titles and variables.
@@ -17,101 +16,114 @@
17
16
  * properties with the context menu.
18
17
  * @class
19
18
  */
20
- goog.module('Blockly.FieldDropdown');
21
-
22
- const aria = goog.require('Blockly.utils.aria');
23
- const dom = goog.require('Blockly.utils.dom');
24
- const dropDownDiv = goog.require('Blockly.dropDownDiv');
25
- const fieldRegistry = goog.require('Blockly.fieldRegistry');
26
- const parsing = goog.require('Blockly.utils.parsing');
27
- const userAgent = goog.require('Blockly.utils.userAgent');
28
- const utilsString = goog.require('Blockly.utils.string');
29
- const {Coordinate} = goog.require('Blockly.utils.Coordinate');
30
- const {Field} = goog.require('Blockly.Field');
31
- const {MenuItem} = goog.require('Blockly.MenuItem');
32
- const {Menu} = goog.require('Blockly.Menu');
33
- /* eslint-disable-next-line no-unused-vars */
34
- const {Sentinel} = goog.requireType('Blockly.utils.Sentinel');
35
- const {Svg} = goog.require('Blockly.utils.Svg');
19
+ import * as goog from '../closure/goog/goog.js';
20
+ goog.declareModuleId('Blockly.FieldDropdown');
21
+
22
+ import type {BlockSvg} from './block_svg.js';
23
+ import * as dropDownDiv from './dropdowndiv.js';
24
+ import {FieldConfig, Field} from './field.js';
25
+ import * as fieldRegistry from './field_registry.js';
26
+ import {Menu} from './menu.js';
27
+ import {MenuItem} from './menuitem.js';
28
+ import * as aria from './utils/aria.js';
29
+ import {Coordinate} from './utils/coordinate.js';
30
+ import * as dom from './utils/dom.js';
31
+ import * as parsing from './utils/parsing.js';
32
+ import type {Sentinel} from './utils/sentinel.js';
33
+ import * as utilsString from './utils/string.js';
34
+ import {Svg} from './utils/svg.js';
35
+ import * as userAgent from './utils/useragent.js';
36
36
 
37
37
 
38
38
  /**
39
39
  * Class for an editable dropdown field.
40
- * @extends {Field}
41
40
  * @alias Blockly.FieldDropdown
42
41
  */
43
- class FieldDropdown extends Field {
42
+ export class FieldDropdown extends Field {
43
+ /** Horizontal distance that a checkmark overhangs the dropdown. */
44
+ static CHECKMARK_OVERHANG = 25;
45
+
44
46
  /**
45
- * @param {(!Array<!Array>|!Function|!Sentinel)} menuGenerator
46
- * A non-empty array of options for a dropdown list, or a function which
47
- * generates these options.
48
- * Also accepts Field.SKIP_SETUP if you wish to skip setup (only used by
49
- * subclasses that want to handle configuration and setting the field
50
- * value after their own constructors have run).
51
- * @param {Function=} opt_validator A function that is called to validate
52
- * changes to the field's value. Takes in a language-neutral dropdown
53
- * option & returns a validated language-neutral dropdown option, or null
54
- * to abort the change.
55
- * @param {Object=} opt_config A map of options used to configure the field.
56
- * See the [field creation documentation]{@link
57
- * https://developers.google.com/blockly/guides/create-custom-blocks/fields/built-in-fields/dropdown#creation}
58
- * for a list of properties this parameter supports.
59
- * @throws {TypeError} If `menuGenerator` options are incorrectly structured.
47
+ * Maximum height of the dropdown menu, as a percentage of the viewport
48
+ * height.
60
49
  */
61
- constructor(menuGenerator, opt_validator, opt_config) {
62
- super(Field.SKIP_SETUP);
50
+ static MAX_MENU_HEIGHT_VH = 0.45;
51
+ static ARROW_CHAR: AnyDuringMigration;
63
52
 
64
- /**
65
- * A reference to the currently selected menu item.
66
- * @type {?MenuItem}
67
- * @private
68
- */
69
- this.selectedMenuItem_ = null;
53
+ /** A reference to the currently selected menu item. */
54
+ private selectedMenuItem_: MenuItem|null = null;
70
55
 
71
- /**
72
- * The dropdown menu.
73
- * @type {?Menu}
74
- * @protected
75
- */
76
- this.menu_ = null;
56
+ /** The dropdown menu. */
57
+ protected menu_: Menu|null = null;
77
58
 
78
- /**
79
- * SVG image element if currently selected option is an image, or null.
80
- * @type {?SVGImageElement}
81
- * @private
82
- */
83
- this.imageElement_ = null;
59
+ /**
60
+ * SVG image element if currently selected option is an image, or null.
61
+ */
62
+ private imageElement_: SVGImageElement|null = null;
84
63
 
85
- /**
86
- * Tspan based arrow element.
87
- * @type {?SVGTSpanElement}
88
- * @private
89
- */
90
- this.arrow_ = null;
64
+ /** Tspan based arrow element. */
65
+ private arrow_: SVGTSpanElement|null = null;
91
66
 
92
- /**
93
- * SVG based arrow element.
94
- * @type {?SVGElement}
95
- * @private
96
- */
97
- this.svgArrow_ = null;
67
+ /** SVG based arrow element. */
68
+ private svgArrow_: SVGElement|null = null;
98
69
 
99
- /**
100
- * Serializable fields are saved by the serializer, non-serializable fields
101
- * are not. Editable fields should also be serializable.
102
- * @type {boolean}
103
- */
104
- this.SERIALIZABLE = true;
70
+ /**
71
+ * Serializable fields are saved by the serializer, non-serializable fields
72
+ * are not. Editable fields should also be serializable.
73
+ */
74
+ override SERIALIZABLE = true;
105
75
 
106
- /**
107
- * Mouse cursor style when over the hotspot that initiates the editor.
108
- * @type {string}
109
- */
110
- this.CURSOR = 'default';
76
+ /** Mouse cursor style when over the hotspot that initiates the editor. */
77
+ override CURSOR = 'default';
78
+ // TODO(b/109816955): remove '!', see go/strict-prop-init-fix.
79
+ protected menuGenerator_!: AnyDuringMigration[][]|
80
+ ((this: FieldDropdown) => AnyDuringMigration[][]);
81
+
82
+ /** A cache of the most recently generated options. */
83
+ // AnyDuringMigration because: Type 'null' is not assignable to type
84
+ // 'string[][]'.
85
+ private generatedOptions_: string[][] = null as AnyDuringMigration;
111
86
 
87
+ /**
88
+ * The prefix field label, of common words set after options are trimmed.
89
+ * @internal
90
+ */
91
+ override prefixField: string|null = null;
92
+
93
+ /**
94
+ * The suffix field label, of common words set after options are trimmed.
95
+ * @internal
96
+ */
97
+ override suffixField: string|null = null;
98
+ // TODO(b/109816955): remove '!', see go/strict-prop-init-fix.
99
+ private selectedOption_!: Array<string|ImageProperties>;
100
+ override clickTarget_: AnyDuringMigration;
101
+
102
+ /**
103
+ * @param menuGenerator A non-empty array of options for a dropdown list, or a
104
+ * function which generates these options. Also accepts Field.SKIP_SETUP
105
+ * if you wish to skip setup (only used by subclasses that want to handle
106
+ * configuration and setting the field value after their own constructors
107
+ * have run).
108
+ * @param opt_validator A function that is called to validate changes to the
109
+ * field's value. Takes in a language-neutral dropdown option & returns a
110
+ * validated language-neutral dropdown option, or null to abort the
111
+ * change.
112
+ * @param opt_config A map of options used to configure the field.
113
+ * See the [field creation documentation]{@link
114
+ * https://developers.google.com/blockly/guides/create-custom-blocks/fields/built-in-fields/dropdown#creation}
115
+ * for a list of properties this parameter supports.
116
+ * @throws {TypeError} If `menuGenerator` options are incorrectly structured.
117
+ */
118
+ constructor(
119
+ menuGenerator: AnyDuringMigration[][]|Function|Sentinel,
120
+ opt_validator?: Function, opt_config?: FieldConfig) {
121
+ super(Field.SKIP_SETUP);
112
122
 
113
123
  // If we pass SKIP_SETUP, don't do *anything* with the menu generator.
114
- if (menuGenerator === Field.SKIP_SETUP) return;
124
+ if (menuGenerator === Field.SKIP_SETUP) {
125
+ return;
126
+ }
115
127
 
116
128
  if (Array.isArray(menuGenerator)) {
117
129
  validateOptions(menuGenerator);
@@ -120,60 +132,34 @@ class FieldDropdown extends Field {
120
132
  /**
121
133
  * An array of options for a dropdown list,
122
134
  * or a function which generates these options.
123
- * @type {(!Array<!Array>|!function(this:FieldDropdown): !Array<!Array>)}
124
- * @protected
125
135
  */
126
- this.menuGenerator_ =
127
- /**
128
- * @type {(!Array<!Array>|
129
- * !function(this:FieldDropdown):!Array<!Array>)}
130
- */
131
- (menuGenerator);
132
-
133
- /**
134
- * A cache of the most recently generated options.
135
- * @type {Array<!Array<string>>}
136
- * @private
137
- */
138
- this.generatedOptions_ = null;
139
-
140
- /**
141
- * The prefix field label, of common words set after options are trimmed.
142
- * @type {?string}
143
- * @package
144
- */
145
- this.prefixField = null;
146
-
147
- /**
148
- * The suffix field label, of common words set after options are trimmed.
149
- * @type {?string}
150
- * @package
151
- */
152
- this.suffixField = null;
136
+ this.menuGenerator_ = menuGenerator as AnyDuringMigration[][] |
137
+ ((this: FieldDropdown) => AnyDuringMigration[][]);
153
138
 
154
139
  this.trimOptions_();
155
140
 
156
141
  /**
157
142
  * The currently selected option. The field is initialized with the
158
143
  * first option selected.
159
- * @type {!Array<string|!ImageProperties>}
160
- * @private
161
144
  */
162
145
  this.selectedOption_ = this.getOptions(false)[0];
163
146
 
164
- if (opt_config) this.configure_(opt_config);
147
+ if (opt_config) {
148
+ this.configure_(opt_config);
149
+ }
165
150
  this.setValue(this.selectedOption_[1]);
166
- if (opt_validator) this.setValidator(opt_validator);
151
+ if (opt_validator) {
152
+ this.setValidator(opt_validator);
153
+ }
167
154
  }
168
155
 
169
156
  /**
170
157
  * Sets the field's value based on the given XML element. Should only be
171
158
  * called by Blockly.Xml.
172
- * @param {!Element} fieldElement The element containing info about the
173
- * field's state.
174
- * @package
159
+ * @param fieldElement The element containing info about the field's state.
160
+ * @internal
175
161
  */
176
- fromXml(fieldElement) {
162
+ override fromXml(fieldElement: Element) {
177
163
  if (this.isOptionListDynamic()) {
178
164
  this.getOptions(false);
179
165
  }
@@ -182,11 +168,10 @@ class FieldDropdown extends Field {
182
168
 
183
169
  /**
184
170
  * Sets the field's value based on the given state.
185
- * @param {*} state The state to apply to the dropdown field.
186
- * @override
187
- * @package
171
+ * @param state The state to apply to the dropdown field.
172
+ * @internal
188
173
  */
189
- loadState(state) {
174
+ override loadState(state: AnyDuringMigration) {
190
175
  if (this.loadLegacyState(FieldDropdown, state)) {
191
176
  return;
192
177
  }
@@ -198,19 +183,19 @@ class FieldDropdown extends Field {
198
183
 
199
184
  /**
200
185
  * Create the block UI for this dropdown.
201
- * @package
186
+ * @internal
202
187
  */
203
- initView() {
188
+ override initView() {
204
189
  if (this.shouldAddBorderRect_()) {
205
190
  this.createBorderRect_();
206
191
  } else {
207
- this.clickTarget_ = this.sourceBlock_.getSvgRoot();
192
+ this.clickTarget_ = (this.sourceBlock_ as BlockSvg).getSvgRoot();
208
193
  }
209
194
  this.createTextElement_();
210
195
 
211
196
  this.imageElement_ = dom.createSvgElement(Svg.IMAGE, {}, this.fieldGroup_);
212
197
 
213
- if (this.getConstants().FIELD_DROPDOWN_SVG_ARROW) {
198
+ if (this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW) {
214
199
  this.createSVGArrow_();
215
200
  } else {
216
201
  this.createTextArrow_();
@@ -223,75 +208,79 @@ class FieldDropdown extends Field {
223
208
 
224
209
  /**
225
210
  * Whether or not the dropdown should add a border rect.
226
- * @return {boolean} True if the dropdown field should add a border rect.
227
- * @protected
211
+ * @return True if the dropdown field should add a border rect.
228
212
  */
229
- shouldAddBorderRect_() {
230
- return !this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW ||
231
- (this.getConstants().FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW &&
232
- !this.sourceBlock_.isShadow());
213
+ protected shouldAddBorderRect_(): boolean {
214
+ return !this.getConstants()!.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW ||
215
+ this.getConstants()!.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW &&
216
+ !this.sourceBlock_.isShadow();
233
217
  }
234
218
 
235
- /**
236
- * Create a tspan based arrow.
237
- * @protected
238
- */
239
- createTextArrow_() {
219
+ /** Create a tspan based arrow. */
220
+ protected createTextArrow_() {
240
221
  this.arrow_ = dom.createSvgElement(Svg.TSPAN, {}, this.textElement_);
241
- this.arrow_.appendChild(document.createTextNode(
222
+ this.arrow_!.appendChild(document.createTextNode(
242
223
  this.sourceBlock_.RTL ? FieldDropdown.ARROW_CHAR + ' ' :
243
224
  ' ' + FieldDropdown.ARROW_CHAR));
244
225
  if (this.sourceBlock_.RTL) {
245
- this.textElement_.insertBefore(this.arrow_, this.textContent_);
226
+ // AnyDuringMigration because: Argument of type 'SVGTSpanElement | null'
227
+ // is not assignable to parameter of type 'Node'.
228
+ this.textElement_.insertBefore(
229
+ this.arrow_ as AnyDuringMigration, this.textContent_);
246
230
  } else {
247
- this.textElement_.appendChild(this.arrow_);
231
+ // AnyDuringMigration because: Argument of type 'SVGTSpanElement | null'
232
+ // is not assignable to parameter of type 'Node'.
233
+ this.textElement_.appendChild(this.arrow_ as AnyDuringMigration);
248
234
  }
249
235
  }
250
236
 
251
- /**
252
- * Create an SVG based arrow.
253
- * @protected
254
- */
255
- createSVGArrow_() {
237
+ /** Create an SVG based arrow. */
238
+ protected createSVGArrow_() {
256
239
  this.svgArrow_ = dom.createSvgElement(
257
240
  Svg.IMAGE, {
258
- 'height': this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE + 'px',
259
- 'width': this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE + 'px',
241
+ 'height': this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_SIZE + 'px',
242
+ 'width': this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_SIZE + 'px',
260
243
  },
261
244
  this.fieldGroup_);
262
- this.svgArrow_.setAttributeNS(
245
+ this.svgArrow_!.setAttributeNS(
263
246
  dom.XLINK_NS, 'xlink:href',
264
- this.getConstants().FIELD_DROPDOWN_SVG_ARROW_DATAURI);
247
+ this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_DATAURI);
265
248
  }
266
249
 
267
250
  /**
268
251
  * Create a dropdown menu under the text.
269
- * @param {Event=} opt_e Optional mouse event that triggered the field to
270
- * open, or undefined if triggered programmatically.
271
- * @protected
252
+ * @param opt_e Optional mouse event that triggered the field to open, or
253
+ * undefined if triggered programmatically.
272
254
  */
273
- showEditor_(opt_e) {
255
+ protected override showEditor_(opt_e?: Event) {
274
256
  this.dropdownCreate_();
275
- if (opt_e && typeof opt_e.clientX === 'number') {
276
- this.menu_.openingCoords = new Coordinate(opt_e.clientX, opt_e.clientY);
257
+ // AnyDuringMigration because: Property 'clientX' does not exist on type
258
+ // 'Event'.
259
+ if (opt_e && typeof (opt_e as AnyDuringMigration).clientX === 'number') {
260
+ // AnyDuringMigration because: Property 'clientY' does not exist on type
261
+ // 'Event'. AnyDuringMigration because: Property 'clientX' does not exist
262
+ // on type 'Event'.
263
+ this.menu_!.openingCoords = new Coordinate(
264
+ (opt_e as AnyDuringMigration).clientX,
265
+ (opt_e as AnyDuringMigration).clientY);
277
266
  } else {
278
- this.menu_.openingCoords = null;
267
+ this.menu_!.openingCoords = null;
279
268
  }
280
269
 
281
270
  // Remove any pre-existing elements in the dropdown.
282
271
  dropDownDiv.clearContent();
283
272
  // Element gets created in render.
284
- this.menu_.render(dropDownDiv.getContentDiv());
285
- const menuElement = /** @type {!Element} */ (this.menu_.getElement());
273
+ this.menu_!.render(dropDownDiv.getContentDiv());
274
+ const menuElement = this.menu_!.getElement() as Element;
286
275
  dom.addClass(menuElement, 'blocklyDropdownMenu');
287
276
 
288
- if (this.getConstants().FIELD_DROPDOWN_COLOURED_DIV) {
289
- const primaryColour = (this.sourceBlock_.isShadow()) ?
290
- this.sourceBlock_.getParent().getColour() :
277
+ if (this.getConstants()!.FIELD_DROPDOWN_COLOURED_DIV) {
278
+ const primaryColour = this.sourceBlock_.isShadow() ?
279
+ this.sourceBlock_.getParent()!.getColour() :
291
280
  this.sourceBlock_.getColour();
292
- const borderColour = (this.sourceBlock_.isShadow()) ?
293
- this.sourceBlock_.getParent().style.colourTertiary :
294
- this.sourceBlock_.style.colourTertiary;
281
+ const borderColour = this.sourceBlock_.isShadow() ?
282
+ (this.sourceBlock_.getParent() as BlockSvg).style.colourTertiary :
283
+ (this.sourceBlock_ as BlockSvg).style.colourTertiary;
295
284
  dropDownDiv.setColour(primaryColour, borderColour);
296
285
  }
297
286
 
@@ -300,20 +289,17 @@ class FieldDropdown extends Field {
300
289
  // Focusing needs to be handled after the menu is rendered and positioned.
301
290
  // Otherwise it will cause a page scroll to get the misplaced menu in
302
291
  // view. See issue #1329.
303
- this.menu_.focus();
292
+ this.menu_!.focus();
304
293
 
305
294
  if (this.selectedMenuItem_) {
306
- this.menu_.setHighlighted(this.selectedMenuItem_);
295
+ this.menu_!.setHighlighted(this.selectedMenuItem_);
307
296
  }
308
297
 
309
298
  this.applyColour();
310
299
  }
311
300
 
312
- /**
313
- * Create the dropdown editor.
314
- * @private
315
- */
316
- dropdownCreate_() {
301
+ /** Create the dropdown editor. */
302
+ private dropdownCreate_() {
317
303
  const menu = new Menu();
318
304
  menu.setRole(aria.Role.LISTBOX);
319
305
  this.menu_ = menu;
@@ -345,9 +331,8 @@ class FieldDropdown extends Field {
345
331
 
346
332
  /**
347
333
  * Disposes of events and DOM-references belonging to the dropdown editor.
348
- * @private
349
334
  */
350
- dropdownDispose_() {
335
+ private dropdownDispose_() {
351
336
  if (this.menu_) {
352
337
  this.menu_.dispose();
353
338
  }
@@ -358,30 +343,27 @@ class FieldDropdown extends Field {
358
343
 
359
344
  /**
360
345
  * Handle an action in the dropdown menu.
361
- * @param {!MenuItem} menuItem The MenuItem selected within menu.
362
- * @private
346
+ * @param menuItem The MenuItem selected within menu.
363
347
  */
364
- handleMenuActionEvent_(menuItem) {
348
+ private handleMenuActionEvent_(menuItem: MenuItem) {
365
349
  dropDownDiv.hideIfOwner(this, true);
366
- this.onItemSelected_(/** @type {!Menu} */ (this.menu_), menuItem);
350
+ this.onItemSelected_(this.menu_ as Menu, menuItem);
367
351
  }
368
352
 
369
353
  /**
370
354
  * Handle the selection of an item in the dropdown menu.
371
- * @param {!Menu} menu The Menu component clicked.
372
- * @param {!MenuItem} menuItem The MenuItem selected within menu.
373
- * @protected
355
+ * @param menu The Menu component clicked.
356
+ * @param menuItem The MenuItem selected within menu.
374
357
  */
375
- onItemSelected_(menu, menuItem) {
358
+ protected onItemSelected_(menu: Menu, menuItem: MenuItem) {
376
359
  this.setValue(menuItem.getValue());
377
360
  }
378
361
 
379
362
  /**
380
363
  * Factor out common words in statically defined options.
381
364
  * Create prefix and/or suffix labels.
382
- * @private
383
365
  */
384
- trimOptions_() {
366
+ private trimOptions_() {
385
367
  const options = this.menuGenerator_;
386
368
  if (!Array.isArray(options)) {
387
369
  return;
@@ -429,42 +411,45 @@ class FieldDropdown extends Field {
429
411
  }
430
412
 
431
413
  /**
432
- * @return {boolean} True if the option list is generated by a function.
414
+ * @return True if the option list is generated by a function.
433
415
  * Otherwise false.
434
416
  */
435
- isOptionListDynamic() {
417
+ isOptionListDynamic(): boolean {
436
418
  return typeof this.menuGenerator_ === 'function';
437
419
  }
438
420
 
439
421
  /**
440
422
  * Return a list of the options for this dropdown.
441
- * @param {boolean=} opt_useCache For dynamic options, whether or not to use
442
- * the cached options or to re-generate them.
443
- * @return {!Array<!Array>} A non-empty array of option tuples:
423
+ * @param opt_useCache For dynamic options, whether or not to use the cached
424
+ * options or to re-generate them.
425
+ * @return A non-empty array of option tuples:
444
426
  * (human-readable text or image, language-neutral name).
445
427
  * @throws {TypeError} If generated options are incorrectly structured.
446
428
  */
447
- getOptions(opt_useCache) {
429
+ getOptions(opt_useCache?: boolean): AnyDuringMigration[][] {
448
430
  if (this.isOptionListDynamic()) {
449
431
  if (!this.generatedOptions_ || !opt_useCache) {
450
- this.generatedOptions_ = this.menuGenerator_.call(this);
432
+ // AnyDuringMigration because: Property 'call' does not exist on type
433
+ // 'any[][] | ((this: FieldDropdown) => any[][])'.
434
+ this.generatedOptions_ =
435
+ (this.menuGenerator_ as AnyDuringMigration).call(this);
451
436
  validateOptions(this.generatedOptions_);
452
437
  }
453
438
  return this.generatedOptions_;
454
439
  }
455
- return /** @type {!Array<!Array<string>>} */ (this.menuGenerator_);
440
+ return this.menuGenerator_ as string[][];
456
441
  }
457
442
 
458
443
  /**
459
444
  * Ensure that the input value is a valid language-neutral option.
460
- * @param {*=} opt_newValue The input value.
461
- * @return {?string} A valid language-neutral option, or null if invalid.
462
- * @protected
445
+ * @param opt_newValue The input value.
446
+ * @return A valid language-neutral option, or null if invalid.
463
447
  */
464
- doClassValidation_(opt_newValue) {
448
+ protected override doClassValidation_(opt_newValue?: AnyDuringMigration):
449
+ string|null {
465
450
  let isValueValid = false;
466
451
  const options = this.getOptions(true);
467
- for (let i = 0, option; (option = options[i]); i++) {
452
+ for (let i = 0, option; option = options[i]; i++) {
468
453
  // Options are tuples of human-readable text and language-neutral values.
469
454
  if (option[1] === opt_newValue) {
470
455
  isValueValid = true;
@@ -480,19 +465,18 @@ class FieldDropdown extends Field {
480
465
  }
481
466
  return null;
482
467
  }
483
- return /** @type {string} */ (opt_newValue);
468
+ return opt_newValue as string;
484
469
  }
485
470
 
486
471
  /**
487
472
  * Update the value of this dropdown field.
488
- * @param {*} newValue The value to be saved. The default validator guarantees
489
- * that this is one of the valid dropdown options.
490
- * @protected
473
+ * @param newValue The value to be saved. The default validator guarantees
474
+ * that this is one of the valid dropdown options.
491
475
  */
492
- doValueUpdate_(newValue) {
476
+ protected override doValueUpdate_(newValue: AnyDuringMigration) {
493
477
  super.doValueUpdate_(newValue);
494
478
  const options = this.getOptions(true);
495
- for (let i = 0, option; (option = options[i]); i++) {
479
+ for (let i = 0, option; option = options[i]; i++) {
496
480
  if (option[1] === this.value_) {
497
481
  this.selectedOption_ = option;
498
482
  }
@@ -501,15 +485,14 @@ class FieldDropdown extends Field {
501
485
 
502
486
  /**
503
487
  * Updates the dropdown arrow to match the colour/style of the block.
504
- * @package
488
+ * @internal
505
489
  */
506
- applyColour() {
490
+ override applyColour() {
491
+ const style = (this.sourceBlock_ as BlockSvg).style;
507
492
  if (this.borderRect_) {
508
- this.borderRect_.setAttribute(
509
- 'stroke', this.sourceBlock_.style.colourTertiary);
493
+ this.borderRect_.setAttribute('stroke', style.colourTertiary);
510
494
  if (this.menu_) {
511
- this.borderRect_.setAttribute(
512
- 'fill', this.sourceBlock_.style.colourTertiary);
495
+ this.borderRect_.setAttribute('fill', style.colourTertiary);
513
496
  } else {
514
497
  this.borderRect_.setAttribute('fill', 'transparent');
515
498
  }
@@ -517,27 +500,23 @@ class FieldDropdown extends Field {
517
500
  // Update arrow's colour.
518
501
  if (this.sourceBlock_ && this.arrow_) {
519
502
  if (this.sourceBlock_.isShadow()) {
520
- this.arrow_.style.fill = this.sourceBlock_.style.colourSecondary;
503
+ this.arrow_.style.fill = style.colourSecondary;
521
504
  } else {
522
- this.arrow_.style.fill = this.sourceBlock_.style.colourPrimary;
505
+ this.arrow_.style.fill = style.colourPrimary;
523
506
  }
524
507
  }
525
508
  }
526
509
 
527
- /**
528
- * Draws the border with the correct width.
529
- * @protected
530
- */
531
- render_() {
510
+ /** Draws the border with the correct width. */
511
+ protected override render_() {
532
512
  // Hide both elements.
533
513
  this.textContent_.nodeValue = '';
534
- this.imageElement_.style.display = 'none';
514
+ this.imageElement_!.style.display = 'none';
535
515
 
536
516
  // Show correct element.
537
517
  const option = this.selectedOption_ && this.selectedOption_[0];
538
518
  if (option && typeof option === 'object') {
539
- this.renderSelectedImage_(
540
- /** @type {!ImageProperties} */ (option));
519
+ this.renderSelectedImage_((option));
541
520
  } else {
542
521
  this.renderSelectedText_();
543
522
  }
@@ -547,16 +526,20 @@ class FieldDropdown extends Field {
547
526
 
548
527
  /**
549
528
  * Renders the selected option, which must be an image.
550
- * @param {!ImageProperties} imageJson Selected
551
- * option that must be an image.
552
- * @private
529
+ * @param imageJson Selected option that must be an image.
553
530
  */
554
- renderSelectedImage_(imageJson) {
555
- this.imageElement_.style.display = '';
556
- this.imageElement_.setAttributeNS(
531
+ private renderSelectedImage_(imageJson: ImageProperties) {
532
+ this.imageElement_!.style.display = '';
533
+ this.imageElement_!.setAttributeNS(
557
534
  dom.XLINK_NS, 'xlink:href', imageJson.src);
558
- this.imageElement_.setAttribute('height', imageJson.height);
559
- this.imageElement_.setAttribute('width', imageJson.width);
535
+ // AnyDuringMigration because: Argument of type 'number' is not assignable
536
+ // to parameter of type 'string'.
537
+ this.imageElement_!.setAttribute(
538
+ 'height', imageJson.height as AnyDuringMigration);
539
+ // AnyDuringMigration because: Argument of type 'number' is not assignable
540
+ // to parameter of type 'string'.
541
+ this.imageElement_!.setAttribute(
542
+ 'width', imageJson.width as AnyDuringMigration);
560
543
 
561
544
  const imageHeight = Number(imageJson.height);
562
545
  const imageWidth = Number(imageJson.width);
@@ -564,21 +547,21 @@ class FieldDropdown extends Field {
564
547
  // Height and width include the border rect.
565
548
  const hasBorder = !!this.borderRect_;
566
549
  const height = Math.max(
567
- hasBorder ? this.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT : 0,
550
+ hasBorder ? this.getConstants()!.FIELD_DROPDOWN_BORDER_RECT_HEIGHT : 0,
568
551
  imageHeight + IMAGE_Y_PADDING);
569
552
  const xPadding =
570
- hasBorder ? this.getConstants().FIELD_BORDER_RECT_X_PADDING : 0;
553
+ hasBorder ? this.getConstants()!.FIELD_BORDER_RECT_X_PADDING : 0;
571
554
  let arrowWidth = 0;
572
555
  if (this.svgArrow_) {
573
556
  arrowWidth = this.positionSVGArrow_(
574
557
  imageWidth + xPadding,
575
- height / 2 - this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE / 2);
558
+ height / 2 - this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_SIZE / 2);
576
559
  } else {
577
560
  arrowWidth = dom.getFastTextWidth(
578
- /** @type {!SVGTSpanElement} */ (this.arrow_),
579
- this.getConstants().FIELD_TEXT_FONTSIZE,
580
- this.getConstants().FIELD_TEXT_FONTWEIGHT,
581
- this.getConstants().FIELD_TEXT_FONTFAMILY);
561
+ this.arrow_ as SVGTSpanElement,
562
+ this.getConstants()!.FIELD_TEXT_FONTSIZE,
563
+ this.getConstants()!.FIELD_TEXT_FONTWEIGHT,
564
+ this.getConstants()!.FIELD_TEXT_FONTFAMILY);
582
565
  }
583
566
  this.size_.width = imageWidth + arrowWidth + xPadding * 2;
584
567
  this.size_.height = height;
@@ -586,44 +569,41 @@ class FieldDropdown extends Field {
586
569
  let arrowX = 0;
587
570
  if (this.sourceBlock_.RTL) {
588
571
  const imageX = xPadding + arrowWidth;
589
- this.imageElement_.setAttribute('x', imageX);
572
+ this.imageElement_!.setAttribute('x', imageX.toString());
590
573
  } else {
591
574
  arrowX = imageWidth + arrowWidth;
592
575
  this.textElement_.setAttribute('text-anchor', 'end');
593
- this.imageElement_.setAttribute('x', xPadding);
576
+ this.imageElement_!.setAttribute('x', xPadding.toString());
594
577
  }
595
- this.imageElement_.setAttribute('y', height / 2 - imageHeight / 2);
578
+ this.imageElement_!.setAttribute(
579
+ 'y', (height / 2 - imageHeight / 2).toString());
596
580
 
597
581
  this.positionTextElement_(arrowX + xPadding, imageWidth + arrowWidth);
598
582
  }
599
583
 
600
- /**
601
- * Renders the selected option, which must be text.
602
- * @private
603
- */
604
- renderSelectedText_() {
584
+ /** Renders the selected option, which must be text. */
585
+ private renderSelectedText_() {
605
586
  // Retrieves the selected option to display through getText_.
606
587
  this.textContent_.nodeValue = this.getDisplayText_();
607
- dom.addClass(
608
- /** @type {!Element} */ (this.textElement_), 'blocklyDropdownText');
588
+ dom.addClass(this.textElement_ as Element, 'blocklyDropdownText');
609
589
  this.textElement_.setAttribute('text-anchor', 'start');
610
590
 
611
591
  // Height and width include the border rect.
612
592
  const hasBorder = !!this.borderRect_;
613
593
  const height = Math.max(
614
- hasBorder ? this.getConstants().FIELD_DROPDOWN_BORDER_RECT_HEIGHT : 0,
615
- this.getConstants().FIELD_TEXT_HEIGHT);
594
+ hasBorder ? this.getConstants()!.FIELD_DROPDOWN_BORDER_RECT_HEIGHT : 0,
595
+ this.getConstants()!.FIELD_TEXT_HEIGHT);
616
596
  const textWidth = dom.getFastTextWidth(
617
- this.textElement_, this.getConstants().FIELD_TEXT_FONTSIZE,
618
- this.getConstants().FIELD_TEXT_FONTWEIGHT,
619
- this.getConstants().FIELD_TEXT_FONTFAMILY);
597
+ this.textElement_, this.getConstants()!.FIELD_TEXT_FONTSIZE,
598
+ this.getConstants()!.FIELD_TEXT_FONTWEIGHT,
599
+ this.getConstants()!.FIELD_TEXT_FONTFAMILY);
620
600
  const xPadding =
621
- hasBorder ? this.getConstants().FIELD_BORDER_RECT_X_PADDING : 0;
601
+ hasBorder ? this.getConstants()!.FIELD_BORDER_RECT_X_PADDING : 0;
622
602
  let arrowWidth = 0;
623
603
  if (this.svgArrow_) {
624
604
  arrowWidth = this.positionSVGArrow_(
625
605
  textWidth + xPadding,
626
- height / 2 - this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE / 2);
606
+ height / 2 - this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_SIZE / 2);
627
607
  }
628
608
  this.size_.width = textWidth + arrowWidth + xPadding * 2;
629
609
  this.size_.height = height;
@@ -633,20 +613,19 @@ class FieldDropdown extends Field {
633
613
 
634
614
  /**
635
615
  * Position a drop-down arrow at the appropriate location at render-time.
636
- * @param {number} x X position the arrow is being rendered at, in px.
637
- * @param {number} y Y position the arrow is being rendered at, in px.
638
- * @return {number} Amount of space the arrow is taking up, in px.
639
- * @private
616
+ * @param x X position the arrow is being rendered at, in px.
617
+ * @param y Y position the arrow is being rendered at, in px.
618
+ * @return Amount of space the arrow is taking up, in px.
640
619
  */
641
- positionSVGArrow_(x, y) {
620
+ private positionSVGArrow_(x: number, y: number): number {
642
621
  if (!this.svgArrow_) {
643
622
  return 0;
644
623
  }
645
624
  const hasBorder = !!this.borderRect_;
646
625
  const xPadding =
647
- hasBorder ? this.getConstants().FIELD_BORDER_RECT_X_PADDING : 0;
648
- const textPadding = this.getConstants().FIELD_DROPDOWN_SVG_ARROW_PADDING;
649
- const svgArrowSize = this.getConstants().FIELD_DROPDOWN_SVG_ARROW_SIZE;
626
+ hasBorder ? this.getConstants()!.FIELD_BORDER_RECT_X_PADDING : 0;
627
+ const textPadding = this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_PADDING;
628
+ const svgArrowSize = this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_SIZE;
650
629
  const arrowX = this.sourceBlock_.RTL ? xPadding : x + textPadding;
651
630
  this.svgArrow_.setAttribute(
652
631
  'transform', 'translate(' + arrowX + ',' + y + ')');
@@ -657,11 +636,9 @@ class FieldDropdown extends Field {
657
636
  * Use the `getText_` developer hook to override the field's text
658
637
  * representation. Get the selected option text. If the selected option is an
659
638
  * image we return the image alt text.
660
- * @return {?string} Selected option text.
661
- * @protected
662
- * @override
639
+ * @return Selected option text.
663
640
  */
664
- getText_() {
641
+ protected override getText_(): string|null {
665
642
  if (!this.selectedOption_) {
666
643
  return null;
667
644
  }
@@ -674,27 +651,35 @@ class FieldDropdown extends Field {
674
651
 
675
652
  /**
676
653
  * Construct a FieldDropdown from a JSON arg object.
677
- * @param {!Object} options A JSON object with options (options).
678
- * @return {!FieldDropdown} The new field instance.
679
- * @package
654
+ * @param options A JSON object with options (options).
655
+ * @return The new field instance.
680
656
  * @nocollapse
657
+ * @internal
681
658
  */
682
- static fromJson(options) {
659
+ static fromJson(options: FieldDropdownFromJsonConfig): FieldDropdown {
660
+ if (!options.options) {
661
+ throw new Error(
662
+ 'options are required for the dropdown field. The ' +
663
+ 'options property must be assigned an array of ' +
664
+ '[humanReadableValue, languageNeutralValue] tuples.');
665
+ }
683
666
  // `this` might be a subclass of FieldDropdown if that class doesn't
684
667
  // override the static fromJson method.
685
- return new this(options['options'], undefined, options);
668
+ return new this(options.options, undefined, options);
686
669
  }
687
670
 
688
671
  /**
689
672
  * Use the calculated prefix and suffix lengths to trim all of the options in
690
673
  * the given array.
691
- * @param {!Array<!Array>} options Array of option tuples:
674
+ * @param options Array of option tuples:
692
675
  * (human-readable text or image, language-neutral name).
693
- * @param {number} prefixLength The length of the common prefix.
694
- * @param {number} suffixLength The length of the common suffix
695
- * @return {!Array<!Array>} A new array with all of the option text trimmed.
676
+ * @param prefixLength The length of the common prefix.
677
+ * @param suffixLength The length of the common suffix
678
+ * @return A new array with all of the option text trimmed.
696
679
  */
697
- static applyTrim_(options, prefixLength, suffixLength) {
680
+ static applyTrim_(
681
+ options: AnyDuringMigration[][], prefixLength: number,
682
+ suffixLength: number): AnyDuringMigration[][] {
698
683
  const newOptions = [];
699
684
  // Remove the prefix and suffix from the options.
700
685
  for (let i = 0; i < options.length; i++) {
@@ -708,52 +693,47 @@ class FieldDropdown extends Field {
708
693
  }
709
694
 
710
695
  /**
711
- * Dropdown image properties.
712
- * @typedef {{
713
- * src:string,
714
- * alt:string,
715
- * width:number,
716
- * height:number
717
- * }}
696
+ * Definition of a human-readable image dropdown option.
718
697
  */
719
- let ImageProperties; // eslint-disable-line no-unused-vars
698
+ export interface ImageProperties {
699
+ src: string;
700
+ alt: string;
701
+ width: number;
702
+ height: number;
703
+ }
720
704
 
721
705
  /**
722
- * Horizontal distance that a checkmark overhangs the dropdown.
706
+ * An individual option in the dropdown menu. The first element is the human-
707
+ * readable value (text or image), and the second element is the language-
708
+ * neutral value.
723
709
  */
724
- FieldDropdown.CHECKMARK_OVERHANG = 25;
710
+ export type MenuOption = [string | ImageProperties, string];
725
711
 
726
712
  /**
727
- * Maximum height of the dropdown menu, as a percentage of the viewport height.
713
+ * fromJson config for the dropdown field.
728
714
  */
729
- FieldDropdown.MAX_MENU_HEIGHT_VH = 0.45;
715
+ export interface FieldDropdownFromJsonConfig extends FieldConfig {
716
+ options?: MenuOption[];
717
+ }
730
718
 
731
719
  /**
732
720
  * The y offset from the top of the field to the top of the image, if an image
733
721
  * is selected.
734
- * @type {number}
735
- * @const
736
722
  */
737
723
  const IMAGE_Y_OFFSET = 5;
738
724
 
739
- /**
740
- * The total vertical padding above and below an image.
741
- * @type {number}
742
- * @const
743
- */
744
- const IMAGE_Y_PADDING = IMAGE_Y_OFFSET * 2;
725
+ /** The total vertical padding above and below an image. */
726
+ const IMAGE_Y_PADDING: number = IMAGE_Y_OFFSET * 2;
745
727
 
746
- /**
747
- * Android can't (in 2014) display "▾", so use "▼" instead.
748
- */
728
+ /** Android can't (in 2014) display "▾", so use "▼" instead. */
749
729
  FieldDropdown.ARROW_CHAR = userAgent.ANDROID ? '\u25BC' : '\u25BE';
750
730
 
751
731
  /**
752
732
  * Validates the data structure to be processed as an options list.
753
- * @param {?} options The proposed dropdown options.
733
+ * @param options The proposed dropdown options.
754
734
  * @throws {TypeError} If proposed options are incorrectly structured.
755
735
  */
756
- const validateOptions = function(options) {
736
+ function validateOptions(options: AnyDuringMigration) {
757
737
  if (!Array.isArray(options)) {
758
738
  throw TypeError('FieldDropdown options must be an array.');
759
739
  }
@@ -776,8 +756,8 @@ const validateOptions = function(options) {
776
756
  'a string. Found ' + tuple[1] + ' in: ',
777
757
  tuple);
778
758
  } else if (
779
- tuple[0] && (typeof tuple[0] !== 'string') &&
780
- (typeof tuple[0].src !== 'string')) {
759
+ tuple[0] && typeof tuple[0] !== 'string' &&
760
+ typeof tuple[0].src !== 'string') {
781
761
  foundError = true;
782
762
  console.error(
783
763
  'Invalid option[' + i + ']: Each FieldDropdown option must have a ' +
@@ -788,8 +768,6 @@ const validateOptions = function(options) {
788
768
  if (foundError) {
789
769
  throw TypeError('Found invalid FieldDropdown options.');
790
770
  }
791
- };
771
+ }
792
772
 
793
773
  fieldRegistry.register('field_dropdown', FieldDropdown);
794
-
795
- exports.FieldDropdown = FieldDropdown;