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
@@ -7,322 +7,324 @@
7
7
  /**
8
8
  * @fileoverview Flyout tray containing blocks which may be created.
9
9
  */
10
- 'use strict';
11
10
 
12
11
  /**
13
12
  * Flyout tray containing blocks which may be created.
14
13
  * @class
15
14
  */
16
- goog.module('Blockly.Flyout');
17
-
18
- const Tooltip = goog.require('Blockly.Tooltip');
19
- const Variables = goog.require('Blockly.Variables');
20
- const Xml = goog.require('Blockly.Xml');
21
- const blocks = goog.require('Blockly.serialization.blocks');
22
- const browserEvents = goog.require('Blockly.browserEvents');
23
- const common = goog.require('Blockly.common');
24
- const dom = goog.require('Blockly.utils.dom');
25
- const eventUtils = goog.require('Blockly.Events.utils');
26
- const idGenerator = goog.require('Blockly.utils.idGenerator');
27
- const toolbox = goog.require('Blockly.utils.toolbox');
28
- /* eslint-disable-next-line no-unused-vars */
29
- const {BlockSvg} = goog.requireType('Blockly.BlockSvg');
30
- /* eslint-disable-next-line no-unused-vars */
31
- const {Block} = goog.requireType('Blockly.Block');
32
- const {ComponentManager} = goog.require('Blockly.ComponentManager');
33
- const {Coordinate} = goog.require('Blockly.utils.Coordinate');
34
- const {DeleteArea} = goog.require('Blockly.DeleteArea');
35
- /* eslint-disable-next-line no-unused-vars */
36
- const {FlyoutButton} = goog.requireType('Blockly.FlyoutButton');
37
- const {FlyoutMetricsManager} = goog.require('Blockly.FlyoutMetricsManager');
38
- /* eslint-disable-next-line no-unused-vars */
39
- const {IFlyout} = goog.require('Blockly.IFlyout');
40
- /* eslint-disable-next-line no-unused-vars */
41
- const {Options} = goog.requireType('Blockly.Options');
42
- /* eslint-disable-next-line no-unused-vars */
43
- const {Rect} = goog.require('Blockly.utils.Rect');
44
- const {ScrollbarPair} = goog.require('Blockly.ScrollbarPair');
45
- const {Svg} = goog.require('Blockly.utils.Svg');
46
- const {WorkspaceSvg} = goog.require('Blockly.WorkspaceSvg');
47
- /** @suppress {extraRequire} */
48
- goog.require('Blockly.Events.BlockCreate');
49
- /** @suppress {extraRequire} */
50
- goog.require('Blockly.Events.VarCreate');
51
- /** @suppress {extraRequire} */
52
- goog.require('Blockly.Gesture');
53
- /** @suppress {extraRequire} */
54
- goog.require('Blockly.Touch');
55
- /** @suppress {extraRequire} */
56
- goog.require('Blockly.blockRendering');
57
-
15
+ import * as goog from '../closure/goog/goog.js';
16
+ goog.declareModuleId('Blockly.Flyout');
17
+
18
+ import type {Block} from './block.js';
19
+ import type {BlockSvg} from './block_svg.js';
20
+ import * as browserEvents from './browser_events.js';
21
+ import * as common from './common.js';
22
+ import {ComponentManager} from './component_manager.js';
23
+ import {DeleteArea} from './delete_area.js';
24
+ import * as BlockCreate from './events/events_block_create.js';
25
+ import * as VarCreate from './events/events_var_create.js';
26
+ import * as eventUtils from './events/utils.js';
27
+ import {FlyoutButton} from './flyout_button.js';
28
+ import {FlyoutMetricsManager} from './flyout_metrics_manager.js';
29
+ import * as Gesture from './gesture.js';
30
+ import type {IFlyout} from './interfaces/i_flyout.js';
31
+ import type {Options} from './options.js';
32
+ import * as blockRendering from './renderers/common/block_rendering.js';
33
+ import {ScrollbarPair} from './scrollbar_pair.js';
34
+ import * as blocks from './serialization/blocks.js';
35
+ import * as Tooltip from './tooltip.js';
36
+ import * as Touch from './touch.js';
37
+ import {Coordinate} from './utils/coordinate.js';
38
+ import * as dom from './utils/dom.js';
39
+ import * as idGenerator from './utils/idgenerator.js';
40
+ import type {Rect} from './utils/rect.js';
41
+ import {Svg} from './utils/svg.js';
42
+ import * as toolbox from './utils/toolbox.js';
43
+ import * as Variables from './variables.js';
44
+ import {WorkspaceSvg} from './workspace_svg.js';
45
+ import * as Xml from './xml.js';
46
+
47
+
48
+ enum FlyoutItemType {
49
+ BLOCK = 'block',
50
+ BUTTON = 'button',
51
+ }
58
52
 
59
53
  /**
60
54
  * Class for a flyout.
61
- * @abstract
62
- * @implements {IFlyout}
63
- * @extends {DeleteArea}
64
55
  * @alias Blockly.Flyout
65
56
  */
66
- class Flyout extends DeleteArea {
57
+ export abstract class Flyout extends DeleteArea implements IFlyout {
58
+ /**
59
+ * Position the flyout.
60
+ */
61
+ abstract position(): void;
62
+
63
+ /**
64
+ * Determine if a drag delta is toward the workspace, based on the position
65
+ * and orientation of the flyout. This is used in determineDragIntention_ to
66
+ * determine if a new block should be created or if the flyout should scroll.
67
+ * @param currentDragDeltaXY How far the pointer has
68
+ * moved from the position at mouse down, in pixel units.
69
+ * @return True if the drag is toward the workspace.
70
+ */
71
+ abstract isDragTowardWorkspace(currentDragDeltaXY: Coordinate): boolean;
72
+
73
+ /**
74
+ * Sets the translation of the flyout to match the scrollbars.
75
+ * @param xyRatio Contains a y property which is a float
76
+ * between 0 and 1 specifying the degree of scrolling and a
77
+ * similar x property.
78
+ */
79
+ protected abstract setMetrics_(xyRatio: {x: number, y: number}): void;
80
+
81
+ /**
82
+ * Lay out the blocks in the flyout.
83
+ * @param contents The blocks and buttons to lay
84
+ * out.
85
+ * @param gaps The visible gaps between blocks.
86
+ */
87
+ protected abstract layout_(contents: FlyoutItem[], gaps: number[]): void;
88
+
89
+ /**
90
+ * Scroll the flyout.
91
+ * @param e Mouse wheel scroll event.
92
+ */
93
+ protected abstract wheel_(e: WheelEvent): void;
94
+
95
+ /**
96
+ * Compute height of flyout. Position mat under each block.
97
+ * For RTL: Lay out the blocks right-aligned.
98
+ */
99
+ protected abstract reflowInternal_(): void;
100
+
101
+ /**
102
+ * Calculates the x coordinate for the flyout position.
103
+ * @return X coordinate.
104
+ */
105
+ abstract getX(): number;
106
+
107
+ /**
108
+ * Calculates the y coordinate for the flyout position.
109
+ * @return Y coordinate.
110
+ */
111
+ abstract getY(): number;
112
+
113
+ /**
114
+ * Scroll the flyout to the beginning of its contents.
115
+ */
116
+ abstract scrollToStart(): void;
117
+
118
+ /**
119
+ * The type of a flyout content item.
120
+ */
121
+ static FlyoutItemType = FlyoutItemType;
122
+
123
+ protected workspace_: WorkspaceSvg;
124
+ RTL: boolean;
125
+ /**
126
+ * Whether the flyout should be laid out horizontally or not.
127
+ * @internal
128
+ */
129
+ horizontalLayout: boolean = false;
130
+ protected toolboxPosition_: number;
131
+
132
+ /**
133
+ * Opaque data that can be passed to Blockly.unbindEvent_.
134
+ */
135
+ private eventWrappers_: browserEvents.Data = [];
136
+
137
+ /**
138
+ * Function that will be registered as a change listener on the workspace
139
+ * to reflow when blocks in the flyout workspace change.
140
+ */
141
+ private reflowWrapper_: Function|null = null;
142
+
143
+ /**
144
+ * Function that disables blocks in the flyout based on max block counts
145
+ * allowed in the target workspace. Registered as a change listener on the
146
+ * target workspace.
147
+ */
148
+ private filterWrapper_: Function|null = null;
149
+
150
+ /**
151
+ * List of background mats that lurk behind each block to catch clicks
152
+ * landing in the blocks' lakes and bays.
153
+ */
154
+ private mats_: SVGElement[] = [];
67
155
  /**
68
- * @param {!Options} workspaceOptions Dictionary of options for the
156
+ * List of visible buttons.
157
+ */
158
+ protected buttons_: FlyoutButton[] = [];
159
+ /**
160
+ * List of event listeners.
161
+ */
162
+ private listeners_: AnyDuringMigration[][] = [];
163
+
164
+ /**
165
+ * List of blocks that should always be disabled.
166
+ */
167
+ private permanentlyDisabled_: Block[] = [];
168
+ protected readonly tabWidth_: number;
169
+
170
+ /**
171
+ * The target workspace.
172
+ * @internal
173
+ */
174
+ targetWorkspace!: WorkspaceSvg;
175
+ /**
176
+ * A list of blocks that can be reused.
177
+ */
178
+ private recycledBlocks_: BlockSvg[] = [];
179
+ /**
180
+ * Does the flyout automatically close when a block is created?
181
+ */
182
+ autoClose: boolean = true;
183
+
184
+ /**
185
+ * Whether the flyout is visible.
186
+ */
187
+ private isVisible_: boolean = false;
188
+
189
+ /**
190
+ * Whether the workspace containing this flyout is visible.
191
+ */
192
+ private containerVisible_: boolean = true;
193
+ protected rectMap_: WeakMap<BlockSvg, SVGElement>;
194
+
195
+ /**
196
+ * Corner radius of the flyout background.
197
+ */
198
+ readonly CORNER_RADIUS: number = 8;
199
+ readonly MARGIN: number;
200
+ readonly GAP_X: number;
201
+ readonly GAP_Y: number;
202
+
203
+ /**
204
+ * Top/bottom padding between scrollbar and edge of flyout background.
205
+ */
206
+ readonly SCROLLBAR_MARGIN: number = 2.5;
207
+
208
+ /**
209
+ * Width of flyout.
210
+ */
211
+ protected width_: number = 0;
212
+
213
+ /**
214
+ * Height of flyout.
215
+ */
216
+ protected height_: number = 0;
217
+ // clang-format off
218
+ /**
219
+ * Range of a drag angle from a flyout considered "dragging toward
220
+ * workspace". Drags that are within the bounds of this many degrees from
221
+ * the orthogonal line to the flyout edge are considered to be "drags toward
222
+ * the workspace".
223
+ * Example:
224
+ * Flyout Edge Workspace
225
+ * [block] / <-within this angle, drags "toward workspace" |
226
+ * [block] ---- orthogonal to flyout boundary ---- |
227
+ * [block] \ |
228
+ * The angle is given in degrees from the orthogonal.
229
+ *
230
+ * This is used to know when to create a new block and when to scroll the
231
+ * flyout. Setting it to 360 means that all drags create a new block.
232
+ */
233
+ // clang-format on
234
+ protected dragAngleRange_: number = 70;
235
+
236
+ /**
237
+ * The path around the background of the flyout, which will be filled with a
238
+ * background colour.
239
+ */
240
+ protected svgBackground_: SVGPathElement|null = null;
241
+
242
+ /**
243
+ * The root SVG group for the button or label.
244
+ */
245
+ protected svgGroup_: SVGGElement|null = null;
246
+ /**
247
+ * @param workspaceOptions Dictionary of options for the
69
248
  * workspace.
70
249
  */
71
- constructor(workspaceOptions) {
250
+ constructor(workspaceOptions: Options) {
72
251
  super();
73
252
  workspaceOptions.setMetrics = this.setMetrics_.bind(this);
74
253
 
75
- /**
76
- * @type {!WorkspaceSvg}
77
- * @protected
78
- */
79
254
  this.workspace_ = new WorkspaceSvg(workspaceOptions);
80
255
  this.workspace_.setMetricsManager(
81
256
  new FlyoutMetricsManager(this.workspace_, this));
82
257
 
83
- this.workspace_.isFlyout = true;
258
+ this.workspace_.internalIsFlyout = true;
84
259
  // Keep the workspace visibility consistent with the flyout's visibility.
85
260
  this.workspace_.setVisible(this.isVisible_);
86
261
 
87
262
  /**
88
263
  * The unique id for this component that is used to register with the
89
264
  * ComponentManager.
90
- * @type {string}
91
265
  */
92
266
  this.id = idGenerator.genUid();
93
267
 
94
268
  /**
95
269
  * Is RTL vs LTR.
96
- * @type {boolean}
97
270
  */
98
271
  this.RTL = !!workspaceOptions.RTL;
99
272
 
100
- /**
101
- * Whether the flyout should be laid out horizontally or not.
102
- * @type {boolean}
103
- * @package
104
- */
105
- this.horizontalLayout = false;
106
-
107
273
  /**
108
274
  * Position of the toolbox and flyout relative to the workspace.
109
- * @type {number}
110
- * @protected
111
275
  */
112
276
  this.toolboxPosition_ = workspaceOptions.toolboxPosition;
113
277
 
114
- /**
115
- * Opaque data that can be passed to Blockly.unbindEvent_.
116
- * @type {!Array<!Array>}
117
- * @private
118
- */
119
- this.eventWrappers_ = [];
120
-
121
- /**
122
- * Function that will be registered as a change listener on the workspace
123
- * to reflow when blocks in the flyout workspace change.
124
- * @type {?Function}
125
- * @private
126
- */
127
- this.reflowWrapper_ = null;
128
-
129
- /**
130
- * Function that disables blocks in the flyout based on max block counts
131
- * allowed in the target workspace. Registered as a change listener on the
132
- * target workspace.
133
- * @type {?Function}
134
- * @private
135
- */
136
- this.filterWrapper_ = null;
137
-
138
- /**
139
- * List of background mats that lurk behind each block to catch clicks
140
- * landing in the blocks' lakes and bays.
141
- * @type {!Array<!SVGElement>}
142
- * @private
143
- */
144
- this.mats_ = [];
145
-
146
- /**
147
- * List of visible buttons.
148
- * @type {!Array<!FlyoutButton>}
149
- * @protected
150
- */
151
- this.buttons_ = [];
152
-
153
- /**
154
- * List of event listeners.
155
- * @type {!Array<!Array>}
156
- * @private
157
- */
158
- this.listeners_ = [];
159
-
160
- /**
161
- * List of blocks that should always be disabled.
162
- * @type {!Array<!Block>}
163
- * @private
164
- */
165
- this.permanentlyDisabled_ = [];
166
-
167
278
  /**
168
279
  * Width of output tab.
169
- * @type {number}
170
- * @protected
171
- * @const
172
280
  */
173
281
  this.tabWidth_ = this.workspace_.getRenderer().getConstants().TAB_WIDTH;
174
282
 
175
- /**
176
- * The target workspace
177
- * @type {?WorkspaceSvg}
178
- * @package
179
- */
180
- this.targetWorkspace = null;
181
-
182
- /**
183
- * A list of blocks that can be reused.
184
- * @type {!Array<!BlockSvg>}
185
- * @private
186
- */
187
- this.recycledBlocks_ = [];
188
-
189
- /**
190
- * Does the flyout automatically close when a block is created?
191
- * @type {boolean}
192
- */
193
- this.autoClose = true;
194
-
195
- /**
196
- * Whether the flyout is visible.
197
- * @type {boolean}
198
- * @private
199
- */
200
- this.isVisible_ = false;
201
-
202
- /**
203
- * Whether the workspace containing this flyout is visible.
204
- * @type {boolean}
205
- * @private
206
- */
207
- this.containerVisible_ = true;
208
-
209
283
  /**
210
284
  * A map from blocks to the rects which are beneath them to act as input
211
285
  * targets.
212
- * @type {!WeakMap<!BlockSvg, !SVGElement>}
213
- * @private
286
+ * @internal
214
287
  */
215
288
  this.rectMap_ = new WeakMap();
216
289
 
217
- /**
218
- * Corner radius of the flyout background.
219
- * @type {number}
220
- * @const
221
- */
222
- this.CORNER_RADIUS = 8;
223
-
224
290
  /**
225
291
  * Margin around the edges of the blocks in the flyout.
226
- * @type {number}
227
- * @const
228
292
  */
229
293
  this.MARGIN = this.CORNER_RADIUS;
230
294
 
231
295
  // TODO: Move GAP_X and GAP_Y to their appropriate files.
232
-
233
296
  /**
234
297
  * Gap between items in horizontal flyouts. Can be overridden with the "sep"
235
298
  * element.
236
- * @const {number}
237
299
  */
238
300
  this.GAP_X = this.MARGIN * 3;
239
301
 
240
302
  /**
241
303
  * Gap between items in vertical flyouts. Can be overridden with the "sep"
242
304
  * element.
243
- * @const {number}
244
305
  */
245
306
  this.GAP_Y = this.MARGIN * 3;
246
-
247
- /**
248
- * Top/bottom padding between scrollbar and edge of flyout background.
249
- * @type {number}
250
- * @const
251
- */
252
- this.SCROLLBAR_MARGIN = 2.5;
253
-
254
- /**
255
- * Width of flyout.
256
- * @type {number}
257
- * @protected
258
- */
259
- this.width_ = 0;
260
-
261
- /**
262
- * Height of flyout.
263
- * @type {number}
264
- * @protected
265
- */
266
- this.height_ = 0;
267
-
268
- // clang-format off
269
- /**
270
- * Range of a drag angle from a flyout considered "dragging toward
271
- * workspace". Drags that are within the bounds of this many degrees from
272
- * the orthogonal line to the flyout edge are considered to be "drags toward
273
- * the workspace".
274
- * Example:
275
- * Flyout Edge Workspace
276
- * [block] / <-within this angle, drags "toward workspace" |
277
- * [block] ---- orthogonal to flyout boundary ---- |
278
- * [block] \ |
279
- * The angle is given in degrees from the orthogonal.
280
- *
281
- * This is used to know when to create a new block and when to scroll the
282
- * flyout. Setting it to 360 means that all drags create a new block.
283
- * @type {number}
284
- * @protected
285
- */
286
- // clang-format on
287
- this.dragAngleRange_ = 70;
288
-
289
- /**
290
- * The path around the background of the flyout, which will be filled with a
291
- * background colour.
292
- * @type {?SVGPathElement}
293
- * @protected
294
- */
295
- this.svgBackground_ = null;
296
-
297
- /**
298
- * The root SVG group for the button or label.
299
- * @type {?SVGGElement}
300
- * @protected
301
- */
302
- this.svgGroup_ = null;
303
307
  }
304
308
 
305
309
  /**
306
310
  * Creates the flyout's DOM. Only needs to be called once. The flyout can
307
311
  * either exist as its own SVG element or be a g element nested inside a
308
312
  * separate SVG element.
309
- * @param {string|
310
- * !Svg<!SVGSVGElement>|
311
- * !Svg<!SVGGElement>} tagName The type of tag to
313
+ * @param tagName The type of tag to
312
314
  * put the flyout in. This should be <svg> or <g>.
313
- * @return {!SVGElement} The flyout's SVG group.
315
+ * @return The flyout's SVG group.
314
316
  */
315
- createDom(tagName) {
317
+ createDom(tagName: string|Svg<SVGSVGElement>|Svg<SVGGElement>): SVGElement {
316
318
  /*
317
- <svg | g>
318
- <path class="blocklyFlyoutBackground"/>
319
- <g class="blocklyFlyout"></g>
320
- </ svg | g>
321
- */
319
+ <svg | g>
320
+ <path class="blocklyFlyoutBackground"/>
321
+ <g class="blocklyFlyout"></g>
322
+ </ svg | g>
323
+ */
322
324
  // Setting style to display:none to start. The toolbox and flyout
323
325
  // hide/show code will set up proper visibility and size later.
324
326
  this.svgGroup_ = dom.createSvgElement(
325
- tagName, {'class': 'blocklyFlyout', 'style': 'display: none'}, null);
327
+ tagName, {'class': 'blocklyFlyout', 'style': 'display: none'});
326
328
  this.svgBackground_ = dom.createSvgElement(
327
329
  Svg.PATH, {'class': 'blocklyFlyoutBackground'}, this.svgGroup_);
328
330
  this.svgGroup_.appendChild(this.workspace_.createDom());
@@ -335,10 +337,10 @@ class Flyout extends DeleteArea {
335
337
 
336
338
  /**
337
339
  * Initializes the flyout.
338
- * @param {!WorkspaceSvg} targetWorkspace The workspace in which to
340
+ * @param targetWorkspace The workspace in which to
339
341
  * create new blocks.
340
342
  */
341
- init(targetWorkspace) {
343
+ init(targetWorkspace: WorkspaceSvg) {
342
344
  this.targetWorkspace = targetWorkspace;
343
345
  this.workspace_.targetWorkspace = targetWorkspace;
344
346
 
@@ -351,8 +353,7 @@ class Flyout extends DeleteArea {
351
353
  Array.prototype.push.apply(
352
354
  this.eventWrappers_,
353
355
  browserEvents.conditionalBind(
354
- /** @type {!SVGGElement} */ (this.svgGroup_), 'wheel', this,
355
- this.wheel_));
356
+ (this.svgGroup_ as SVGGElement), 'wheel', this, this.wheel_));
356
357
  if (!this.autoClose) {
357
358
  this.filterWrapper_ = this.filterForCapacity_.bind(this);
358
359
  this.targetWorkspace.addChangeListener(this.filterWrapper_);
@@ -362,8 +363,8 @@ class Flyout extends DeleteArea {
362
363
  Array.prototype.push.apply(
363
364
  this.eventWrappers_,
364
365
  browserEvents.conditionalBind(
365
- /** @type {!SVGPathElement} */ (this.svgBackground_), 'mousedown',
366
- this, this.onMouseDown_));
366
+ (this.svgBackground_ as SVGPathElement), 'mousedown', this,
367
+ this.onMouseDown_));
367
368
 
368
369
  // A flyout connected to a workspace doesn't have its own current gesture.
369
370
  this.workspace_.getGesture =
@@ -398,58 +399,55 @@ class Flyout extends DeleteArea {
398
399
  this.filterWrapper_ = null;
399
400
  }
400
401
  if (this.workspace_) {
401
- this.workspace_.getThemeManager().unsubscribe(this.svgBackground_);
402
- this.workspace_.targetWorkspace = null;
402
+ this.workspace_.getThemeManager().unsubscribe(this.svgBackground_!);
403
403
  this.workspace_.dispose();
404
- this.workspace_ = null;
405
404
  }
406
405
  if (this.svgGroup_) {
407
406
  dom.removeNode(this.svgGroup_);
408
407
  this.svgGroup_ = null;
409
408
  }
410
409
  this.svgBackground_ = null;
411
- this.targetWorkspace = null;
412
410
  }
413
411
 
414
412
  /**
415
413
  * Get the width of the flyout.
416
- * @return {number} The width of the flyout.
414
+ * @return The width of the flyout.
417
415
  */
418
- getWidth() {
416
+ getWidth(): number {
419
417
  return this.width_;
420
418
  }
421
419
 
422
420
  /**
423
421
  * Get the height of the flyout.
424
- * @return {number} The width of the flyout.
422
+ * @return The width of the flyout.
425
423
  */
426
- getHeight() {
424
+ getHeight(): number {
427
425
  return this.height_;
428
426
  }
429
427
 
430
428
  /**
431
429
  * Get the scale (zoom level) of the flyout. By default,
432
430
  * this matches the target workspace scale, but this can be overridden.
433
- * @return {number} Flyout workspace scale.
431
+ * @return Flyout workspace scale.
434
432
  */
435
- getFlyoutScale() {
433
+ getFlyoutScale(): number {
436
434
  return this.targetWorkspace.scale;
437
435
  }
438
436
 
439
437
  /**
440
438
  * Get the workspace inside the flyout.
441
- * @return {!WorkspaceSvg} The workspace inside the flyout.
442
- * @package
439
+ * @return The workspace inside the flyout.
440
+ * @internal
443
441
  */
444
- getWorkspace() {
442
+ getWorkspace(): WorkspaceSvg {
445
443
  return this.workspace_;
446
444
  }
447
445
 
448
446
  /**
449
447
  * Is the flyout visible?
450
- * @return {boolean} True if visible.
448
+ * @return True if visible.
451
449
  */
452
- isVisible() {
450
+ isVisible(): boolean {
453
451
  return this.isVisible_;
454
452
  }
455
453
 
@@ -457,10 +455,10 @@ class Flyout extends DeleteArea {
457
455
  * Set whether the flyout is visible. A value of true does not necessarily
458
456
  * mean that the flyout is shown. It could be hidden because its container is
459
457
  * hidden.
460
- * @param {boolean} visible True if visible.
458
+ * @param visible True if visible.
461
459
  */
462
- setVisible(visible) {
463
- const visibilityChanged = (visible !== this.isVisible());
460
+ setVisible(visible: boolean) {
461
+ const visibilityChanged = visible !== this.isVisible();
464
462
 
465
463
  this.isVisible_ = visible;
466
464
  if (visibilityChanged) {
@@ -475,10 +473,10 @@ class Flyout extends DeleteArea {
475
473
 
476
474
  /**
477
475
  * Set whether this flyout's container is visible.
478
- * @param {boolean} visible Whether the container is visible.
476
+ * @param visible Whether the container is visible.
479
477
  */
480
- setContainerVisible(visible) {
481
- const visibilityChanged = (visible !== this.containerVisible_);
478
+ setContainerVisible(visible: boolean) {
479
+ const visibilityChanged = visible !== this.containerVisible_;
482
480
  this.containerVisible_ = visible;
483
481
  if (visibilityChanged) {
484
482
  this.updateDisplay_();
@@ -488,16 +486,17 @@ class Flyout extends DeleteArea {
488
486
  /**
489
487
  * Update the display property of the flyout based whether it thinks it should
490
488
  * be visible and whether its containing workspace is visible.
491
- * @private
492
489
  */
493
- updateDisplay_() {
490
+ private updateDisplay_() {
494
491
  let show = true;
495
492
  if (!this.containerVisible_) {
496
493
  show = false;
497
494
  } else {
498
495
  show = this.isVisible();
499
496
  }
500
- this.svgGroup_.style.display = show ? 'block' : 'none';
497
+ if (this.svgGroup_) {
498
+ this.svgGroup_.style.display = show ? 'block' : 'none';
499
+ }
501
500
  // Update the scrollbar's visibility too since it should mimic the
502
501
  // flyout's visibility.
503
502
  this.workspace_.scrollbar.setContainerVisible(show);
@@ -505,25 +504,24 @@ class Flyout extends DeleteArea {
505
504
 
506
505
  /**
507
506
  * Update the view based on coordinates calculated in position().
508
- * @param {number} width The computed width of the flyout's SVG group
509
- * @param {number} height The computed height of the flyout's SVG group.
510
- * @param {number} x The computed x origin of the flyout's SVG group.
511
- * @param {number} y The computed y origin of the flyout's SVG group.
512
- * @protected
513
- */
514
- positionAt_(width, height, x, y) {
515
- this.svgGroup_.setAttribute('width', width);
516
- this.svgGroup_.setAttribute('height', height);
507
+ * @param width The computed width of the flyout's SVG group
508
+ * @param height The computed height of the flyout's SVG group.
509
+ * @param x The computed x origin of the flyout's SVG group.
510
+ * @param y The computed y origin of the flyout's SVG group.
511
+ */
512
+ protected positionAt_(width: number, height: number, x: number, y: number) {
513
+ this.svgGroup_?.setAttribute('width', width.toString());
514
+ this.svgGroup_?.setAttribute('height', height.toString());
517
515
  this.workspace_.setCachedParentSvgSize(width, height);
518
516
 
519
- if (this.svgGroup_.tagName === 'svg') {
517
+ if (this.svgGroup_?.tagName === 'svg') {
520
518
  const transform = 'translate(' + x + 'px,' + y + 'px)';
521
519
  dom.setCssTransform(this.svgGroup_, transform);
522
520
  } else {
523
521
  // IE and Edge don't support CSS transforms on SVG elements so
524
522
  // it's important to set the transform on the SVG element itself
525
523
  const transform = 'translate(' + x + ',' + y + ')';
526
- this.svgGroup_.setAttribute('transform', transform);
524
+ this.svgGroup_?.setAttribute('transform', transform);
527
525
  }
528
526
 
529
527
  // Update the scrollbar (if one exists).
@@ -554,7 +552,7 @@ class Flyout extends DeleteArea {
554
552
  }
555
553
  this.setVisible(false);
556
554
  // Delete all the event listeners.
557
- for (let i = 0, listen; (listen = this.listeners_[i]); i++) {
555
+ for (let i = 0, listen; listen = this.listeners_[i]; i++) {
558
556
  browserEvents.unbind(listen);
559
557
  }
560
558
  this.listeners_.length = 0;
@@ -562,17 +560,17 @@ class Flyout extends DeleteArea {
562
560
  this.workspace_.removeChangeListener(this.reflowWrapper_);
563
561
  this.reflowWrapper_ = null;
564
562
  }
565
- // Do NOT delete the blocks here. Wait until Flyout.show.
566
- // https://neil.fraser.name/news/2014/08/09/
567
563
  }
564
+ // Do NOT delete the blocks here. Wait until Flyout.show.
565
+ // https://neil.fraser.name/news/2014/08/09/
568
566
 
569
567
  /**
570
568
  * Show and populate the flyout.
571
- * @param {!toolbox.FlyoutDefinition|string} flyoutDef Contents to display
569
+ * @param flyoutDef Contents to display
572
570
  * in the flyout. This is either an array of Nodes, a NodeList, a
573
571
  * toolbox definition, or a string with the name of the dynamic category.
574
572
  */
575
- show(flyoutDef) {
573
+ show(flyoutDef: toolbox.FlyoutDefinition|string) {
576
574
  this.workspace_.setResizesEnabled(false);
577
575
  this.hide();
578
576
  this.clearOldBlocks_();
@@ -585,25 +583,21 @@ class Flyout extends DeleteArea {
585
583
 
586
584
  // Parse the Array, Node or NodeList into a a list of flyout items.
587
585
  const parsedContent = toolbox.convertFlyoutDefToJsonArray(flyoutDef);
588
- const flyoutInfo =
589
- /** @type {{contents:!Array<!Object>, gaps:!Array<number>}} */ (
590
- this.createFlyoutInfo_(parsedContent));
586
+ const flyoutInfo = this.createFlyoutInfo_(parsedContent);
591
587
 
592
588
  this.layout_(flyoutInfo.contents, flyoutInfo.gaps);
593
589
 
594
590
  // IE 11 is an incompetent browser that fails to fire mouseout events.
595
591
  // When the mouse is over the background, deselect all blocks.
596
- const deselectAll =
597
- /** @this {Flyout} */
598
- function() {
599
- const topBlocks = this.workspace_.getTopBlocks(false);
600
- for (let i = 0, block; (block = topBlocks[i]); i++) {
601
- block.removeSelect();
602
- }
603
- };
592
+ function deselectAll(this: Flyout) {
593
+ const topBlocks = this.workspace_.getTopBlocks(false);
594
+ for (let i = 0, block; block = topBlocks[i]; i++) {
595
+ block.removeSelect();
596
+ }
597
+ }
604
598
 
605
599
  this.listeners_.push(browserEvents.conditionalBind(
606
- /** @type {!SVGPathElement} */ (this.svgBackground_), 'mouseover', this,
600
+ (this.svgBackground_ as SVGPathElement), 'mouseover', this,
607
601
  deselectAll));
608
602
 
609
603
  if (this.horizontalLayout) {
@@ -627,56 +621,54 @@ class Flyout extends DeleteArea {
627
621
  /**
628
622
  * Create the contents array and gaps array necessary to create the layout for
629
623
  * the flyout.
630
- * @param {!toolbox.FlyoutItemInfoArray} parsedContent The array
624
+ * @param parsedContent The array
631
625
  * of objects to show in the flyout.
632
- * @return {{contents:Array<Object>, gaps:Array<number>}} The list of contents
633
- * and gaps needed to lay out the flyout.
634
- * @private
626
+ * @return The list of contents and gaps needed to lay out the flyout.
635
627
  */
636
- createFlyoutInfo_(parsedContent) {
637
- const contents = [];
638
- const gaps = [];
628
+ private createFlyoutInfo_(parsedContent: toolbox.FlyoutItemInfoArray):
629
+ {contents: FlyoutItem[], gaps: number[]} {
630
+ const contents: FlyoutItem[] = [];
631
+ const gaps: number[] = [];
639
632
  this.permanentlyDisabled_.length = 0;
640
633
  const defaultGap = this.horizontalLayout ? this.GAP_X : this.GAP_Y;
641
- for (let i = 0, contentInfo; (contentInfo = parsedContent[i]); i++) {
642
- if (contentInfo['custom']) {
643
- const customInfo =
644
- /** @type {!toolbox.DynamicCategoryInfo} */ (contentInfo);
634
+ for (let i = 0, contentInfo; contentInfo = parsedContent[i]; i++) {
635
+ if ('custom' in contentInfo) {
636
+ const customInfo = (contentInfo as toolbox.DynamicCategoryInfo);
645
637
  const categoryName = customInfo['custom'];
646
638
  const flyoutDef = this.getDynamicCategoryContents_(categoryName);
647
- const parsedDynamicContent = /** @type {!toolbox.FlyoutItemInfoArray} */
648
- (toolbox.convertFlyoutDefToJsonArray(flyoutDef));
639
+ const parsedDynamicContent =
640
+ toolbox.convertFlyoutDefToJsonArray(flyoutDef);
649
641
  // Replace the element at i with the dynamic content it represents.
650
642
  parsedContent.splice.apply(
651
- parsedContent, [i, 1].concat(parsedDynamicContent));
643
+ parsedContent, [i, 1, ...parsedDynamicContent]);
652
644
  contentInfo = parsedContent[i];
653
645
  }
654
646
 
655
647
  switch (contentInfo['kind'].toUpperCase()) {
656
648
  case 'BLOCK': {
657
- const blockInfo = /** @type {!toolbox.BlockInfo} */ (contentInfo);
649
+ const blockInfo = (contentInfo as toolbox.BlockInfo);
658
650
  const block = this.createFlyoutBlock_(blockInfo);
659
- contents.push({type: 'block', block: block});
651
+ contents.push({type: FlyoutItemType.BLOCK, block: block});
660
652
  this.addBlockGap_(blockInfo, gaps, defaultGap);
661
653
  break;
662
654
  }
663
655
  case 'SEP': {
664
- const sepInfo = /** @type {!toolbox.SeparatorInfo} */ (contentInfo);
656
+ const sepInfo = (contentInfo as toolbox.SeparatorInfo);
665
657
  this.addSeparatorGap_(sepInfo, gaps, defaultGap);
666
658
  break;
667
659
  }
668
660
  case 'LABEL': {
669
- const labelInfo = /** @type {!toolbox.LabelInfo} */ (contentInfo);
661
+ const labelInfo = (contentInfo as toolbox.LabelInfo);
670
662
  // A label is a button with different styling.
671
663
  const label = this.createButton_(labelInfo, /** isLabel */ true);
672
- contents.push({type: 'button', button: label});
664
+ contents.push({type: FlyoutItemType.BUTTON, button: label});
673
665
  gaps.push(defaultGap);
674
666
  break;
675
667
  }
676
668
  case 'BUTTON': {
677
- const buttonInfo = /** @type {!toolbox.ButtonInfo} */ (contentInfo);
669
+ const buttonInfo = (contentInfo as toolbox.ButtonInfo);
678
670
  const button = this.createButton_(buttonInfo, /** isLabel */ false);
679
- contents.push({type: 'button', button: button});
671
+ contents.push({type: FlyoutItemType.BUTTON, button: button});
680
672
  gaps.push(defaultGap);
681
673
  break;
682
674
  }
@@ -687,12 +679,12 @@ class Flyout extends DeleteArea {
687
679
 
688
680
  /**
689
681
  * Gets the flyout definition for the dynamic category.
690
- * @param {string} categoryName The name of the dynamic category.
691
- * @return {!toolbox.FlyoutDefinition} The definition of the
682
+ * @param categoryName The name of the dynamic category.
683
+ * @return The definition of the
692
684
  * flyout in one of its many forms.
693
- * @private
694
685
  */
695
- getDynamicCategoryContents_(categoryName) {
686
+ private getDynamicCategoryContents_(categoryName: string):
687
+ toolbox.FlyoutDefinition {
696
688
  // Look up the correct category generation function and call that to get a
697
689
  // valid XML list.
698
690
  const fnToApply =
@@ -708,50 +700,43 @@ class Flyout extends DeleteArea {
708
700
 
709
701
  /**
710
702
  * Creates a flyout button or a flyout label.
711
- * @param {!toolbox.ButtonOrLabelInfo} btnInfo
712
- * The object holding information about a button or a label.
713
- * @param {boolean} isLabel True if the button is a label, false otherwise.
714
- * @return {!FlyoutButton} The object used to display the button in the
703
+ * @param btnInfo The object holding information about a button or a label.
704
+ * @param isLabel True if the button is a label, false otherwise.
705
+ * @return The object used to display the button in the
715
706
  * flyout.
716
- * @private
717
707
  */
718
- createButton_(btnInfo, isLabel) {
719
- const {FlyoutButton} = goog.module.get('Blockly.FlyoutButton');
720
- if (!FlyoutButton) {
721
- throw Error('Missing require for Blockly.FlyoutButton');
722
- }
708
+ private createButton_(btnInfo: toolbox.ButtonOrLabelInfo, isLabel: boolean):
709
+ FlyoutButton {
723
710
  const curButton = new FlyoutButton(
724
- this.workspace_,
725
- /** @type {!WorkspaceSvg} */ (this.targetWorkspace), btnInfo, isLabel);
711
+ this.workspace_, (this.targetWorkspace as WorkspaceSvg), btnInfo,
712
+ isLabel);
726
713
  return curButton;
727
714
  }
728
715
 
729
716
  /**
730
717
  * Create a block from the xml and permanently disable any blocks that were
731
718
  * defined as disabled.
732
- * @param {!toolbox.BlockInfo} blockInfo The info of the block.
733
- * @return {!BlockSvg} The block created from the blockInfo.
734
- * @private
719
+ * @param blockInfo The info of the block.
720
+ * @return The block created from the blockInfo.
735
721
  */
736
- createFlyoutBlock_(blockInfo) {
722
+ private createFlyoutBlock_(blockInfo: toolbox.BlockInfo): BlockSvg {
737
723
  let block;
738
724
  if (blockInfo['blockxml']) {
739
- const xml = typeof blockInfo['blockxml'] === 'string' ?
740
- Xml.textToDom(blockInfo['blockxml']) :
741
- blockInfo['blockxml'];
742
- block = this.getRecycledBlock_(xml.getAttribute('type'));
725
+ const xml = (typeof blockInfo['blockxml'] === 'string' ?
726
+ Xml.textToDom(blockInfo['blockxml']) :
727
+ blockInfo['blockxml']) as Element;
728
+ block = this.getRecycledBlock_(xml.getAttribute('type')!);
743
729
  if (!block) {
744
730
  block = Xml.domToBlock(xml, this.workspace_);
745
731
  }
746
732
  } else {
747
- block = this.getRecycledBlock_(blockInfo['type']);
733
+ block = this.getRecycledBlock_(blockInfo['type']!);
748
734
  if (!block) {
749
735
  if (blockInfo['enabled'] === undefined) {
750
736
  blockInfo['enabled'] = blockInfo['disabled'] !== 'true' &&
751
737
  blockInfo['disabled'] !== true;
752
738
  }
753
- block = blocks.append(
754
- /** @type {blocks.State} */ (blockInfo), this.workspace_);
739
+ block = blocks.append((blockInfo as blocks.State), this.workspace_);
755
740
  }
756
741
  }
757
742
 
@@ -760,18 +745,17 @@ class Flyout extends DeleteArea {
760
745
  // Do not enable these blocks as a result of capacity filtering.
761
746
  this.permanentlyDisabled_.push(block);
762
747
  }
763
- return /** @type {!BlockSvg} */ (block);
748
+ return (block as BlockSvg);
764
749
  }
765
750
 
766
751
  /**
767
752
  * Returns a block from the array of recycled blocks with the given type, or
768
753
  * undefined if one cannot be found.
769
- * @param {string} blockType The type of the block to try to recycle.
770
- * @return {(!BlockSvg|undefined)} The recycled block, or undefined if
754
+ * @param blockType The type of the block to try to recycle.
755
+ * @return The recycled block, or undefined if
771
756
  * one could not be recycled.
772
- * @private
773
757
  */
774
- getRecycledBlock_(blockType) {
758
+ private getRecycledBlock_(blockType: string): BlockSvg|undefined {
775
759
  let index = -1;
776
760
  for (let i = 0; i < this.recycledBlocks_.length; i++) {
777
761
  if (this.recycledBlocks_[i].type === blockType) {
@@ -784,40 +768,40 @@ class Flyout extends DeleteArea {
784
768
 
785
769
  /**
786
770
  * Adds a gap in the flyout based on block info.
787
- * @param {!toolbox.BlockInfo} blockInfo Information about a block.
788
- * @param {!Array<number>} gaps The list of gaps between items in the flyout.
789
- * @param {number} defaultGap The default gap between one element and the
771
+ * @param blockInfo Information about a block.
772
+ * @param gaps The list of gaps between items in the flyout.
773
+ * @param defaultGap The default gap between one element and the
790
774
  * next.
791
- * @private
792
775
  */
793
- addBlockGap_(blockInfo, gaps, defaultGap) {
776
+ private addBlockGap_(
777
+ blockInfo: toolbox.BlockInfo, gaps: number[], defaultGap: number) {
794
778
  let gap;
795
779
  if (blockInfo['gap']) {
796
- gap = parseInt(blockInfo['gap'], 10);
780
+ gap = parseInt(blockInfo['gap'].toString(), 10);
797
781
  } else if (blockInfo['blockxml']) {
798
- const xml = typeof blockInfo['blockxml'] === 'string' ?
799
- Xml.textToDom(blockInfo['blockxml']) :
800
- blockInfo['blockxml'];
801
- gap = parseInt(xml.getAttribute('gap'), 10);
782
+ const xml = (typeof blockInfo['blockxml'] === 'string' ?
783
+ Xml.textToDom(blockInfo['blockxml']) :
784
+ blockInfo['blockxml']) as Element;
785
+ gap = parseInt(xml.getAttribute('gap')!, 10);
802
786
  }
803
- gaps.push(isNaN(gap) ? defaultGap : gap);
787
+ gaps.push(!gap || isNaN(gap) ? defaultGap : gap);
804
788
  }
805
789
 
806
790
  /**
807
791
  * Add the necessary gap in the flyout for a separator.
808
- * @param {!toolbox.SeparatorInfo} sepInfo The object holding
792
+ * @param sepInfo The object holding
809
793
  * information about a separator.
810
- * @param {!Array<number>} gaps The list gaps between items in the flyout.
811
- * @param {number} defaultGap The default gap between the button and next
794
+ * @param gaps The list gaps between items in the flyout.
795
+ * @param defaultGap The default gap between the button and next
812
796
  * element.
813
- * @private
814
797
  */
815
- addSeparatorGap_(sepInfo, gaps, defaultGap) {
798
+ private addSeparatorGap_(
799
+ sepInfo: toolbox.SeparatorInfo, gaps: number[], defaultGap: number) {
816
800
  // Change the gap between two toolbox elements.
817
801
  // <sep gap="36"></sep>
818
802
  // The default gap is 24, can be set larger or smaller.
819
803
  // This overwrites the gap attribute on the previous element.
820
- const newGap = parseInt(sepInfo['gap'], 10);
804
+ const newGap = parseInt(sepInfo['gap']!.toString(), 10);
821
805
  // Ignore gaps before the first block.
822
806
  if (!isNaN(newGap) && gaps.length > 0) {
823
807
  gaps[gaps.length - 1] = newGap;
@@ -828,12 +812,11 @@ class Flyout extends DeleteArea {
828
812
 
829
813
  /**
830
814
  * Delete blocks, mats and buttons from a previous showing of the flyout.
831
- * @private
832
815
  */
833
- clearOldBlocks_() {
816
+ private clearOldBlocks_() {
834
817
  // Delete any blocks from a previous showing.
835
818
  const oldBlocks = this.workspace_.getTopBlocks(false);
836
- for (let i = 0, block; (block = oldBlocks[i]); i++) {
819
+ for (let i = 0, block; block = oldBlocks[i]; i++) {
837
820
  if (this.blockIsRecyclable_(block)) {
838
821
  this.recycleBlock_(block);
839
822
  } else {
@@ -850,20 +833,19 @@ class Flyout extends DeleteArea {
850
833
  }
851
834
  this.mats_.length = 0;
852
835
  // Delete any buttons from a previous showing.
853
- for (let i = 0, button; (button = this.buttons_[i]); i++) {
836
+ for (let i = 0, button; button = this.buttons_[i]; i++) {
854
837
  button.dispose();
855
838
  }
856
839
  this.buttons_.length = 0;
857
840
 
858
841
  // Clear potential variables from the previous showing.
859
- this.workspace_.getPotentialVariableMap().clear();
842
+ this.workspace_.getPotentialVariableMap()?.clear();
860
843
  }
861
844
 
862
845
  /**
863
846
  * Empties all of the recycled blocks, properly disposing of them.
864
- * @private
865
847
  */
866
- emptyRecycledBlocks_() {
848
+ private emptyRecycledBlocks_() {
867
849
  for (let i = 0; i < this.recycledBlocks_.length; i++) {
868
850
  this.recycledBlocks_[i].dispose();
869
851
  }
@@ -872,11 +854,10 @@ class Flyout extends DeleteArea {
872
854
 
873
855
  /**
874
856
  * Returns whether the given block can be recycled or not.
875
- * @param {!BlockSvg} _block The block to check for recyclability.
876
- * @return {boolean} True if the block can be recycled. False otherwise.
877
- * @protected
857
+ * @param _block The block to check for recyclability.
858
+ * @return True if the block can be recycled. False otherwise.
878
859
  */
879
- blockIsRecyclable_(_block) {
860
+ protected blockIsRecyclable_(_block: BlockSvg): boolean {
880
861
  // By default, recycling is disabled.
881
862
  return false;
882
863
  }
@@ -885,10 +866,9 @@ class Flyout extends DeleteArea {
885
866
  * Puts a previously created block into the recycle bin and moves it to the
886
867
  * top of the workspace. Used during large workspace swaps to limit the number
887
868
  * of new DOM elements we need to create.
888
- * @param {!BlockSvg} block The block to recycle.
889
- * @private
869
+ * @param block The block to recycle.
890
870
  */
891
- recycleBlock_(block) {
871
+ private recycleBlock_(block: BlockSvg) {
892
872
  const xy = block.getRelativeToSurfaceXY();
893
873
  block.moveBy(-xy.x, -xy.y);
894
874
  this.recycledBlocks_.push(block);
@@ -896,13 +876,13 @@ class Flyout extends DeleteArea {
896
876
 
897
877
  /**
898
878
  * Add listeners to a block that has been added to the flyout.
899
- * @param {!SVGElement} root The root node of the SVG group the block is in.
900
- * @param {!BlockSvg} block The block to add listeners for.
901
- * @param {!SVGElement} rect The invisible rectangle under the block that acts
879
+ * @param root The root node of the SVG group the block is in.
880
+ * @param block The block to add listeners for.
881
+ * @param rect The invisible rectangle under the block that acts
902
882
  * as a mat for that block.
903
- * @protected
904
883
  */
905
- addBlockListeners_(root, block, rect) {
884
+ protected addBlockListeners_(
885
+ root: SVGElement, block: BlockSvg, rect: SVGElement) {
906
886
  this.listeners_.push(browserEvents.conditionalBind(
907
887
  root, 'mousedown', null, this.blockMouseDown_(block)));
908
888
  this.listeners_.push(browserEvents.conditionalBind(
@@ -919,13 +899,12 @@ class Flyout extends DeleteArea {
919
899
 
920
900
  /**
921
901
  * Handle a mouse-down on an SVG block in a non-closing flyout.
922
- * @param {!BlockSvg} block The flyout block to copy.
923
- * @return {!Function} Function to call when block is clicked.
924
- * @private
902
+ * @param block The flyout block to copy.
903
+ * @return Function to call when block is clicked.
925
904
  */
926
- blockMouseDown_(block) {
905
+ private blockMouseDown_(block: BlockSvg): Function {
927
906
  const flyout = this;
928
- return function(e) {
907
+ return (e: MouseEvent) => {
929
908
  const gesture = flyout.targetWorkspace.getGesture(e);
930
909
  if (gesture) {
931
910
  gesture.setStartBlock(block);
@@ -936,10 +915,9 @@ class Flyout extends DeleteArea {
936
915
 
937
916
  /**
938
917
  * Mouse down on the flyout background. Start a vertical scroll drag.
939
- * @param {!Event} e Mouse down event.
940
- * @private
918
+ * @param e Mouse down event.
941
919
  */
942
- onMouseDown_(e) {
920
+ private onMouseDown_(e: MouseEvent) {
943
921
  const gesture = this.targetWorkspace.getGesture(e);
944
922
  if (gesture) {
945
923
  gesture.handleFlyoutStart(e, this);
@@ -949,23 +927,23 @@ class Flyout extends DeleteArea {
949
927
  /**
950
928
  * Does this flyout allow you to create a new instance of the given block?
951
929
  * Used for deciding if a block can be "dragged out of" the flyout.
952
- * @param {!BlockSvg} block The block to copy from the flyout.
953
- * @return {boolean} True if you can create a new instance of the block, false
930
+ * @param block The block to copy from the flyout.
931
+ * @return True if you can create a new instance of the block, false
954
932
  * otherwise.
955
- * @package
933
+ * @internal
956
934
  */
957
- isBlockCreatable_(block) {
935
+ isBlockCreatable(block: BlockSvg): boolean {
958
936
  return block.isEnabled();
959
937
  }
960
938
 
961
939
  /**
962
940
  * Create a copy of this block on the workspace.
963
- * @param {!BlockSvg} originalBlock The block to copy from the flyout.
964
- * @return {!BlockSvg} The newly created block.
941
+ * @param originalBlock The block to copy from the flyout.
942
+ * @return The newly created block.
965
943
  * @throws {Error} if something went wrong with deserialization.
966
- * @package
944
+ * @internal
967
945
  */
968
- createBlock(originalBlock) {
946
+ createBlock(originalBlock: BlockSvg): BlockSvg {
969
947
  let newBlock = null;
970
948
  eventUtils.disable();
971
949
  const variablesBeforeCreation = this.targetWorkspace.getAllVariables();
@@ -987,13 +965,13 @@ class Flyout extends DeleteArea {
987
965
  // Fire a VarCreate event for each (if any) new variable created.
988
966
  for (let i = 0; i < newVariables.length; i++) {
989
967
  const thisVariable = newVariables[i];
990
- eventUtils.fire(
991
- new (eventUtils.get(eventUtils.VAR_CREATE))(thisVariable));
968
+ eventUtils.fire(new (eventUtils.get(eventUtils.VAR_CREATE))!
969
+ (thisVariable));
992
970
  }
993
971
 
994
972
  // Block events come after var events, in case they refer to newly created
995
973
  // variables.
996
- eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CREATE))(newBlock));
974
+ eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CREATE))!(newBlock));
997
975
  }
998
976
  if (this.autoClose) {
999
977
  this.hide();
@@ -1006,12 +984,11 @@ class Flyout extends DeleteArea {
1006
984
  /**
1007
985
  * Initialize the given button: move it to the correct location,
1008
986
  * add listeners, etc.
1009
- * @param {!FlyoutButton} button The button to initialize and place.
1010
- * @param {number} x The x position of the cursor during this layout pass.
1011
- * @param {number} y The y position of the cursor during this layout pass.
1012
- * @protected
987
+ * @param button The button to initialize and place.
988
+ * @param x The x position of the cursor during this layout pass.
989
+ * @param y The y position of the cursor during this layout pass.
1013
990
  */
1014
- initFlyoutButton_(button, x, y) {
991
+ protected initFlyoutButton_(button: FlyoutButton, x: number, y: number) {
1015
992
  const buttonSvg = button.createDom();
1016
993
  button.moveTo(x, y);
1017
994
  button.show();
@@ -1025,30 +1002,29 @@ class Flyout extends DeleteArea {
1025
1002
 
1026
1003
  /**
1027
1004
  * Create and place a rectangle corresponding to the given block.
1028
- * @param {!BlockSvg} block The block to associate the rect to.
1029
- * @param {number} x The x position of the cursor during this layout pass.
1030
- * @param {number} y The y position of the cursor during this layout pass.
1031
- * @param {!{height: number, width: number}} blockHW The height and width of
1005
+ * @param block The block to associate the rect to.
1006
+ * @param x The x position of the cursor during this layout pass.
1007
+ * @param y The y position of the cursor during this layout pass.
1008
+ * @param blockHW The height and width of
1032
1009
  * the block.
1033
- * @param {number} index The index into the mats list where this rect should
1010
+ * @param index The index into the mats list where this rect should
1034
1011
  * be placed.
1035
- * @return {!SVGElement} Newly created SVG element for the rectangle behind
1012
+ * @return Newly created SVG element for the rectangle behind
1036
1013
  * the block.
1037
- * @protected
1038
1014
  */
1039
- createRect_(block, x, y, blockHW, index) {
1015
+ protected createRect_(
1016
+ block: BlockSvg, x: number, y: number,
1017
+ blockHW: {height: number, width: number}, index: number): SVGElement {
1040
1018
  // Create an invisible rectangle under the block to act as a button. Just
1041
1019
  // using the block as a button is poor, since blocks have holes in them.
1042
- const rect = dom.createSvgElement(
1043
- Svg.RECT, {
1044
- 'fill-opacity': 0,
1045
- 'x': x,
1046
- 'y': y,
1047
- 'height': blockHW.height,
1048
- 'width': blockHW.width,
1049
- },
1050
- null);
1051
- rect.tooltip = block;
1020
+ const rect = dom.createSvgElement(Svg.RECT, {
1021
+ 'fill-opacity': 0,
1022
+ 'x': x,
1023
+ 'y': y,
1024
+ 'height': blockHW.height,
1025
+ 'width': blockHW.width,
1026
+ });
1027
+ (rect as AnyDuringMigration).tooltip = block;
1052
1028
  Tooltip.bindMouseEvents(rect);
1053
1029
  // Add the rectangles under the blocks, so that the blocks' tooltips work.
1054
1030
  this.workspace_.getCanvas().insertBefore(rect, block.getSvgRoot());
@@ -1061,18 +1037,18 @@ class Flyout extends DeleteArea {
1061
1037
  /**
1062
1038
  * Move a rectangle to sit exactly behind a block, taking into account tabs,
1063
1039
  * hats, and any other protrusions we invent.
1064
- * @param {!SVGElement} rect The rectangle to move directly behind the block.
1065
- * @param {!BlockSvg} block The block the rectangle should be behind.
1066
- * @protected
1040
+ * @param rect The rectangle to move directly behind the block.
1041
+ * @param block The block the rectangle should be behind.
1067
1042
  */
1068
- moveRectToBlock_(rect, block) {
1043
+ protected moveRectToBlock_(rect: SVGElement, block: BlockSvg) {
1069
1044
  const blockHW = block.getHeightWidth();
1070
- rect.setAttribute('width', blockHW.width);
1071
- rect.setAttribute('height', blockHW.height);
1045
+ rect.setAttribute('width', blockHW.width.toString());
1046
+ rect.setAttribute('height', blockHW.height.toString());
1072
1047
 
1073
1048
  const blockXY = block.getRelativeToSurfaceXY();
1074
- rect.setAttribute('y', blockXY.y);
1075
- rect.setAttribute('x', this.RTL ? blockXY.x - blockHW.width : blockXY.x);
1049
+ rect.setAttribute('y', blockXY.y.toString());
1050
+ rect.setAttribute(
1051
+ 'x', (this.RTL ? blockXY.x - blockHW.width : blockXY.x).toString());
1076
1052
  }
1077
1053
 
1078
1054
  /**
@@ -1080,11 +1056,10 @@ class Flyout extends DeleteArea {
1080
1056
  * capacity limit. For instance, if the user may only place two more blocks
1081
1057
  * on the workspace, an "a + b" block that has two shadow blocks would be
1082
1058
  * disabled.
1083
- * @private
1084
1059
  */
1085
- filterForCapacity_() {
1060
+ private filterForCapacity_() {
1086
1061
  const blocks = this.workspace_.getTopBlocks(false);
1087
- for (let i = 0, block; (block = blocks[i]); i++) {
1062
+ for (let i = 0, block; block = blocks[i]; i++) {
1088
1063
  if (this.permanentlyDisabled_.indexOf(block) === -1) {
1089
1064
  const enable = this.targetWorkspace.isCapacityAvailable(
1090
1065
  common.getBlockTypeCounts(block));
@@ -1110,22 +1085,21 @@ class Flyout extends DeleteArea {
1110
1085
  }
1111
1086
 
1112
1087
  /**
1113
- * @return {boolean} True if this flyout may be scrolled with a scrollbar or
1088
+ * @return True if this flyout may be scrolled with a scrollbar or
1114
1089
  * by dragging.
1115
- * @package
1090
+ * @internal
1116
1091
  */
1117
- isScrollable() {
1092
+ isScrollable(): boolean {
1118
1093
  return this.workspace_.scrollbar ? this.workspace_.scrollbar.isVisible() :
1119
1094
  false;
1120
1095
  }
1121
1096
 
1122
1097
  /**
1123
1098
  * Copy a block from the flyout to the workspace and position it correctly.
1124
- * @param {!BlockSvg} oldBlock The flyout block to copy.
1125
- * @return {!BlockSvg} The new block in the main workspace.
1126
- * @private
1099
+ * @param oldBlock The flyout block to copy.
1100
+ * @return The new block in the main workspace.
1127
1101
  */
1128
- placeNewBlock_(oldBlock) {
1102
+ private placeNewBlock_(oldBlock: BlockSvg): BlockSvg {
1129
1103
  const targetWorkspace = this.targetWorkspace;
1130
1104
  const svgRootOld = oldBlock.getSvgRoot();
1131
1105
  if (!svgRootOld) {
@@ -1133,11 +1107,10 @@ class Flyout extends DeleteArea {
1133
1107
  }
1134
1108
 
1135
1109
  // Clone the block.
1136
- const json = /** @type {!blocks.State} */ (blocks.save(oldBlock));
1110
+ const json = (blocks.save(oldBlock) as blocks.State);
1137
1111
  // Normallly this resizes leading to weird jumps. Save it for terminateDrag.
1138
1112
  targetWorkspace.setResizesEnabled(false);
1139
- const block =
1140
- /** @type {!BlockSvg} */ (blocks.append(json, targetWorkspace));
1113
+ const block = (blocks.append(json, targetWorkspace) as BlockSvg);
1141
1114
 
1142
1115
  this.positionNewBlock_(oldBlock, block);
1143
1116
 
@@ -1146,11 +1119,10 @@ class Flyout extends DeleteArea {
1146
1119
 
1147
1120
  /**
1148
1121
  * Positions a block on the target workspace.
1149
- * @param {!BlockSvg} oldBlock The flyout block being copied.
1150
- * @param {!BlockSvg} block The block to posiiton.
1151
- * @private
1122
+ * @param oldBlock The flyout block being copied.
1123
+ * @param block The block to posiiton.
1152
1124
  */
1153
- positionNewBlock_(oldBlock, block) {
1125
+ private positionNewBlock_(oldBlock: BlockSvg, block: BlockSvg) {
1154
1126
  const targetWorkspace = this.targetWorkspace;
1155
1127
 
1156
1128
  // The offset in pixels between the main workspace's origin and the upper
@@ -1184,71 +1156,10 @@ class Flyout extends DeleteArea {
1184
1156
  }
1185
1157
 
1186
1158
  /**
1187
- * Returns the bounding rectangle of the drag target area in pixel units
1188
- * relative to viewport.
1189
- * @return {Rect} The component's bounding box.
1190
- */
1191
- Flyout.prototype.getClientRect;
1192
-
1193
- /**
1194
- * Position the flyout.
1195
- * @return {void}
1159
+ * A flyout content item.
1196
1160
  */
1197
- Flyout.prototype.position;
1198
-
1199
- /**
1200
- * Determine if a drag delta is toward the workspace, based on the position
1201
- * and orientation of the flyout. This is used in determineDragIntention_ to
1202
- * determine if a new block should be created or if the flyout should scroll.
1203
- * @param {!Coordinate} currentDragDeltaXY How far the pointer has
1204
- * moved from the position at mouse down, in pixel units.
1205
- * @return {boolean} True if the drag is toward the workspace.
1206
- * @package
1207
- */
1208
- Flyout.prototype.isDragTowardWorkspace;
1209
-
1210
- /**
1211
- * Sets the translation of the flyout to match the scrollbars.
1212
- * @param {!{x:number,y:number}} xyRatio Contains a y property which is a float
1213
- * between 0 and 1 specifying the degree of scrolling and a
1214
- * similar x property.
1215
- * @protected
1216
- */
1217
- Flyout.prototype.setMetrics_;
1218
-
1219
- /**
1220
- * Lay out the blocks in the flyout.
1221
- * @param {!Array<!Object>} contents The blocks and buttons to lay out.
1222
- * @param {!Array<number>} gaps The visible gaps between blocks.
1223
- * @protected
1224
- */
1225
- Flyout.prototype.layout_;
1226
-
1227
- /**
1228
- * Scroll the flyout.
1229
- * @param {!Event} e Mouse wheel scroll event.
1230
- * @protected
1231
- */
1232
- Flyout.prototype.wheel_;
1233
-
1234
- /**
1235
- * Compute height of flyout. Position mat under each block.
1236
- * For RTL: Lay out the blocks right-aligned.
1237
- * @return {void}
1238
- * @protected
1239
- */
1240
- Flyout.prototype.reflowInternal_;
1241
-
1242
- /**
1243
- * Calculates the x coordinate for the flyout position.
1244
- * @return {number} X coordinate.
1245
- */
1246
- Flyout.prototype.getX;
1247
-
1248
- /**
1249
- * Calculates the y coordinate for the flyout position.
1250
- * @return {number} Y coordinate.
1251
- */
1252
- Flyout.prototype.getY;
1253
-
1254
- exports.Flyout = Flyout;
1161
+ export interface FlyoutItem {
1162
+ type: FlyoutItemType;
1163
+ button?: FlyoutButton|undefined;
1164
+ block?: BlockSvg|undefined;
1165
+ }