blockly 8.0.5 → 9.0.0-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 (736) hide show
  1. package/blockly.min.js +2002 -2269
  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/package.json +5 -5
  609. package/php.d.ts +0 -3
  610. package/php_compressed.js +322 -93
  611. package/php_compressed.js.map +1 -1
  612. package/python.d.ts +0 -3
  613. package/python_compressed.js +237 -90
  614. package/python_compressed.js.map +1 -1
  615. package/blockly.d.ts +0 -26127
  616. package/core/blockly_options.js +0 -28
  617. package/core/bubble_dragger.js +0 -298
  618. package/core/clipboard.js +0 -80
  619. package/core/component_manager.js +0 -263
  620. package/core/contextmenu_items.js +0 -651
  621. package/core/contextmenu_registry.js +0 -178
  622. package/core/delete_area.js +0 -87
  623. package/core/dialog.js +0 -107
  624. package/core/drag_target.js +0 -98
  625. package/core/events/events.js +0 -147
  626. package/core/events/events_abstract.js +0 -133
  627. package/core/events/events_block_base.js +0 -70
  628. package/core/events/events_block_drag.js +0 -89
  629. package/core/events/events_bubble_open.js +0 -90
  630. package/core/events/events_comment_base.js +0 -121
  631. package/core/events/events_marker_move.js +0 -110
  632. package/core/events/events_selected.js +0 -83
  633. package/core/events/events_toolbox_item_select.js +0 -84
  634. package/core/events/events_trashcan_open.js +0 -73
  635. package/core/events/events_var_base.js +0 -70
  636. package/core/events/events_viewport.js +0 -107
  637. package/core/events/workspace_events.js +0 -93
  638. package/core/field_angle.js +0 -591
  639. package/core/field_checkbox.js +0 -255
  640. package/core/field_colour.js +0 -717
  641. package/core/field_image.js +0 -304
  642. package/core/field_label.js +0 -149
  643. package/core/field_label_serializable.js +0 -80
  644. package/core/field_textinput.js +0 -619
  645. package/core/flyout_button.js +0 -356
  646. package/core/grid.js +0 -226
  647. package/core/icon.js +0 -225
  648. package/core/input.js +0 -335
  649. package/core/interfaces/i_ast_node_location_svg.js +0 -45
  650. package/core/interfaces/i_ast_node_location_with_block.js +0 -41
  651. package/core/interfaces/i_autohideable.js +0 -40
  652. package/core/interfaces/i_block_dragger.js +0 -66
  653. package/core/interfaces/i_bounded_element.js +0 -45
  654. package/core/interfaces/i_bubble.js +0 -95
  655. package/core/interfaces/i_collapsible_toolbox_item.js +0 -53
  656. package/core/interfaces/i_connection_checker.js +0 -104
  657. package/core/interfaces/i_contextmenu.js +0 -32
  658. package/core/interfaces/i_copyable.js +0 -49
  659. package/core/interfaces/i_delete_area.js +0 -50
  660. package/core/interfaces/i_drag_target.js +0 -88
  661. package/core/interfaces/i_flyout.js +0 -201
  662. package/core/interfaces/i_keyboard_accessible.js +0 -38
  663. package/core/interfaces/i_metrics_manager.js +0 -154
  664. package/core/interfaces/i_positionable.js +0 -51
  665. package/core/interfaces/i_selectable.js +0 -51
  666. package/core/interfaces/i_selectable_toolbox_item.js +0 -73
  667. package/core/interfaces/i_serializer.js +0 -77
  668. package/core/interfaces/i_styleable.js +0 -39
  669. package/core/interfaces/i_toolbox.js +0 -142
  670. package/core/interfaces/i_toolbox_item.js +0 -85
  671. package/core/marker_manager.js +0 -213
  672. package/core/menuitem.js +0 -292
  673. package/core/names.js +0 -293
  674. package/core/registry.js +0 -384
  675. package/core/renderers/common/block_rendering.js +0 -170
  676. package/core/renderers/common/constants.js +0 -1250
  677. package/core/renderers/common/i_path_object.js +0 -162
  678. package/core/renderers/common/marker_svg.js +0 -721
  679. package/core/renderers/common/path_object.js +0 -283
  680. package/core/renderers/common/renderer.js +0 -305
  681. package/core/renderers/geras/constants.js +0 -73
  682. package/core/renderers/geras/geras.js +0 -36
  683. package/core/renderers/geras/measurables/inline_input.js +0 -58
  684. package/core/renderers/geras/measurables/statement_input.js +0 -57
  685. package/core/renderers/geras/renderer.js +0 -149
  686. package/core/renderers/measurables/base.js +0 -64
  687. package/core/renderers/measurables/bottom_row.js +0 -138
  688. package/core/renderers/measurables/connection.js +0 -56
  689. package/core/renderers/measurables/external_value_input.js +0 -70
  690. package/core/renderers/measurables/field.js +0 -71
  691. package/core/renderers/measurables/in_row_spacer.js +0 -47
  692. package/core/renderers/measurables/input_connection.js +0 -75
  693. package/core/renderers/measurables/next_connection.js +0 -50
  694. package/core/renderers/measurables/output_connection.js +0 -61
  695. package/core/renderers/measurables/previous_connection.js +0 -50
  696. package/core/renderers/measurables/round_corner.js +0 -52
  697. package/core/renderers/measurables/row.js +0 -247
  698. package/core/renderers/measurables/spacer_row.js +0 -69
  699. package/core/renderers/measurables/square_corner.js +0 -50
  700. package/core/renderers/measurables/top_row.js +0 -143
  701. package/core/renderers/measurables/types.js +0 -353
  702. package/core/renderers/minimalist/drawer.js +0 -42
  703. package/core/renderers/minimalist/info.js +0 -54
  704. package/core/renderers/minimalist/minimalist.js +0 -26
  705. package/core/renderers/minimalist/renderer.js +0 -80
  706. package/core/renderers/thrasos/renderer.js +0 -53
  707. package/core/renderers/thrasos/thrasos.js +0 -22
  708. package/core/renderers/zelos/marker_svg.js +0 -179
  709. package/core/renderers/zelos/measurables/bottom_row.js +0 -66
  710. package/core/renderers/zelos/measurables/row_elements.js +0 -46
  711. package/core/renderers/zelos/path_object.js +0 -247
  712. package/core/renderers/zelos/renderer.js +0 -147
  713. package/core/renderers/zelos/zelos.js +0 -38
  714. package/core/serialization/exceptions.js +0 -144
  715. package/core/shortcut_registry.js +0 -366
  716. package/core/theme/themes.js +0 -23
  717. package/core/theme.js +0 -228
  718. package/core/theme_manager.js +0 -211
  719. package/core/toolbox/category.js +0 -751
  720. package/core/toolbox/collapsible_category.js +0 -311
  721. package/core/toolbox/separator.js +0 -133
  722. package/core/toolbox/toolbox_item.js +0 -173
  723. package/core/touch.js +0 -285
  724. package/core/utils/coordinate.js +0 -138
  725. package/core/utils/global.js +0 -41
  726. package/core/utils/keycodes.js +0 -172
  727. package/core/utils/metrics.js +0 -154
  728. package/core/utils/svg.js +0 -186
  729. package/core/utils/toolbox.js +0 -459
  730. package/core/utils/useragent.js +0 -197
  731. package/core/utils.js +0 -383
  732. package/core/variable_model.js +0 -96
  733. package/core/widgetdiv.js +0 -290
  734. package/core/workspace.js +0 -836
  735. package/core/workspace_comment.js +0 -400
  736. package/core/workspace_dragger.js +0 -115
@@ -0,0 +1,576 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2020 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ /**
8
+ * @fileoverview Registers default context menu items.
9
+ */
10
+
11
+ /**
12
+ * Registers default context menu items.
13
+ * @namespace Blockly.ContextMenuItems
14
+ */
15
+ import * as goog from '../closure/goog/goog.js';
16
+ goog.declareModuleId('Blockly.ContextMenuItems');
17
+
18
+ import type {BlockSvg} from './block_svg.js';
19
+ import * as clipboard from './clipboard.js';
20
+ import {ContextMenuRegistry, RegistryItem, Scope} from './contextmenu_registry.js';
21
+ import * as dialog from './dialog.js';
22
+ import * as Events from './events/events.js';
23
+ import * as eventUtils from './events/utils.js';
24
+ import {inputTypes} from './input_types.js';
25
+ import {Msg} from './msg.js';
26
+ import * as idGenerator from './utils/idgenerator.js';
27
+ import * as userAgent from './utils/useragent.js';
28
+ import type {WorkspaceSvg} from './workspace_svg.js';
29
+
30
+
31
+ /**
32
+ * Option to undo previous action.
33
+ * @alias Blockly.ContextMenuItems.registerUndo
34
+ */
35
+ export function registerUndo() {
36
+ const undoOption: RegistryItem = {
37
+ displayText() {
38
+ return Msg['UNDO'];
39
+ },
40
+ preconditionFn(scope: Scope) {
41
+ if (scope.workspace!.getUndoStack().length > 0) {
42
+ return 'enabled';
43
+ }
44
+ return 'disabled';
45
+ },
46
+ callback(scope: Scope) {
47
+ scope.workspace!.undo(false);
48
+ },
49
+ scopeType: ContextMenuRegistry.ScopeType.WORKSPACE,
50
+ id: 'undoWorkspace',
51
+ weight: 1,
52
+ };
53
+ ContextMenuRegistry.registry.register(undoOption);
54
+ }
55
+
56
+ /**
57
+ * Option to redo previous action.
58
+ * @alias Blockly.ContextMenuItems.registerRedo
59
+ */
60
+ export function registerRedo() {
61
+ const redoOption: RegistryItem = {
62
+ displayText() {
63
+ return Msg['REDO'];
64
+ },
65
+ preconditionFn(scope: Scope) {
66
+ if (scope.workspace!.getRedoStack().length > 0) {
67
+ return 'enabled';
68
+ }
69
+ return 'disabled';
70
+ },
71
+ callback(scope: Scope) {
72
+ scope.workspace!.undo(true);
73
+ },
74
+ scopeType: ContextMenuRegistry.ScopeType.WORKSPACE,
75
+ id: 'redoWorkspace',
76
+ weight: 2,
77
+ };
78
+ ContextMenuRegistry.registry.register(redoOption);
79
+ }
80
+
81
+ /**
82
+ * Option to clean up blocks.
83
+ * @alias Blockly.ContextMenuItems.registerCleanup
84
+ */
85
+ export function registerCleanup() {
86
+ const cleanOption: RegistryItem = {
87
+ displayText() {
88
+ return Msg['CLEAN_UP'];
89
+ },
90
+ preconditionFn(scope: Scope) {
91
+ if (scope.workspace!.isMovable()) {
92
+ if (scope.workspace!.getTopBlocks(false).length > 1) {
93
+ return 'enabled';
94
+ }
95
+ return 'disabled';
96
+ }
97
+ return 'hidden';
98
+ },
99
+ callback(scope: Scope) {
100
+ scope.workspace!.cleanUp();
101
+ },
102
+ scopeType: ContextMenuRegistry.ScopeType.WORKSPACE,
103
+ id: 'cleanWorkspace',
104
+ weight: 3,
105
+ };
106
+ ContextMenuRegistry.registry.register(cleanOption);
107
+ }
108
+ /**
109
+ * Creates a callback to collapse or expand top blocks.
110
+ * @param shouldCollapse Whether a block should collapse.
111
+ * @param topBlocks Top blocks in the workspace.
112
+ */
113
+ function toggleOption_(shouldCollapse: boolean, topBlocks: BlockSvg[]) {
114
+ const DELAY = 10;
115
+ let ms = 0;
116
+ let timeoutCounter = 0;
117
+ function timeoutFn(block: BlockSvg) {
118
+ timeoutCounter--;
119
+ block.setCollapsed(shouldCollapse);
120
+ if (timeoutCounter === 0) {
121
+ Events.setGroup(false);
122
+ }
123
+ }
124
+ Events.setGroup(true);
125
+ for (let i = 0; i < topBlocks.length; i++) {
126
+ let block: BlockSvg|null = topBlocks[i];
127
+ while (block) {
128
+ timeoutCounter++;
129
+ setTimeout(timeoutFn.bind(null, block), ms);
130
+ block = block.getNextBlock();
131
+ ms += DELAY;
132
+ }
133
+ }
134
+ }
135
+
136
+ /**
137
+ * Option to collapse all blocks.
138
+ * @alias Blockly.ContextMenuItems.registerCollapse
139
+ */
140
+ export function registerCollapse() {
141
+ const collapseOption: RegistryItem = {
142
+ displayText() {
143
+ return Msg['COLLAPSE_ALL'];
144
+ },
145
+ preconditionFn(scope: Scope) {
146
+ if (scope.workspace!.options.collapse) {
147
+ const topBlocks = scope.workspace!.getTopBlocks(false);
148
+ for (let i = 0; i < topBlocks.length; i++) {
149
+ let block: BlockSvg|null = topBlocks[i];
150
+ while (block) {
151
+ if (!block.isCollapsed()) {
152
+ return 'enabled';
153
+ }
154
+ block = block.getNextBlock();
155
+ }
156
+ }
157
+ return 'disabled';
158
+ }
159
+ return 'hidden';
160
+ },
161
+ callback(scope: Scope) {
162
+ toggleOption_(true, scope.workspace!.getTopBlocks(true));
163
+ },
164
+ scopeType: ContextMenuRegistry.ScopeType.WORKSPACE,
165
+ id: 'collapseWorkspace',
166
+ weight: 4,
167
+ };
168
+ ContextMenuRegistry.registry.register(collapseOption);
169
+ }
170
+
171
+ /**
172
+ * Option to expand all blocks.
173
+ * @alias Blockly.ContextMenuItems.registerExpand
174
+ */
175
+ export function registerExpand() {
176
+ const expandOption: RegistryItem = {
177
+ displayText() {
178
+ return Msg['EXPAND_ALL'];
179
+ },
180
+ preconditionFn(scope: Scope) {
181
+ if (scope.workspace!.options.collapse) {
182
+ const topBlocks = scope.workspace!.getTopBlocks(false);
183
+ for (let i = 0; i < topBlocks.length; i++) {
184
+ let block: BlockSvg|null = topBlocks[i];
185
+ while (block) {
186
+ if (block.isCollapsed()) {
187
+ return 'enabled';
188
+ }
189
+ block = block.getNextBlock();
190
+ }
191
+ }
192
+ return 'disabled';
193
+ }
194
+ return 'hidden';
195
+ },
196
+ callback(scope: Scope) {
197
+ toggleOption_(false, scope.workspace!.getTopBlocks(true));
198
+ },
199
+ scopeType: ContextMenuRegistry.ScopeType.WORKSPACE,
200
+ id: 'expandWorkspace',
201
+ weight: 5,
202
+ };
203
+ ContextMenuRegistry.registry.register(expandOption);
204
+ }
205
+ /**
206
+ * Adds a block and its children to a list of deletable blocks.
207
+ * @param block to delete.
208
+ * @param deleteList list of blocks that can be deleted.
209
+ * This will be modified in place with the given block and its descendants.
210
+ */
211
+ function addDeletableBlocks_(block: BlockSvg, deleteList: BlockSvg[]) {
212
+ if (block.isDeletable()) {
213
+ Array.prototype.push.apply(deleteList, block.getDescendants(false));
214
+ } else {
215
+ const children = block.getChildren(false);
216
+ for (let i = 0; i < children.length; i++) {
217
+ addDeletableBlocks_(children[i], deleteList);
218
+ }
219
+ }
220
+ }
221
+
222
+ /**
223
+ * Constructs a list of blocks that can be deleted in the given workspace.
224
+ * @param workspace to delete all blocks from.
225
+ * @return list of blocks to delete.
226
+ */
227
+ function getDeletableBlocks_(workspace: WorkspaceSvg): BlockSvg[] {
228
+ const deleteList: BlockSvg[] = [];
229
+ const topBlocks = workspace.getTopBlocks(true);
230
+ for (let i = 0; i < topBlocks.length; i++) {
231
+ addDeletableBlocks_(topBlocks[i], deleteList);
232
+ }
233
+ return deleteList;
234
+ }
235
+
236
+ /**
237
+ * Deletes the given blocks. Used to delete all blocks in the workspace.
238
+ * @param deleteList list of blocks to delete.
239
+ * @param eventGroup event group ID with which all delete events should be
240
+ * associated.
241
+ */
242
+ function deleteNext_(deleteList: BlockSvg[], eventGroup: string) {
243
+ const DELAY = 10;
244
+ eventUtils.setGroup(eventGroup);
245
+ const block = deleteList.shift();
246
+ if (block) {
247
+ if (!block.disposed) {
248
+ block.dispose(false, true);
249
+ setTimeout(deleteNext_, DELAY, deleteList, eventGroup);
250
+ } else {
251
+ deleteNext_(deleteList, eventGroup);
252
+ }
253
+ }
254
+ eventUtils.setGroup(false);
255
+ }
256
+
257
+ /**
258
+ * Option to delete all blocks.
259
+ * @alias Blockly.ContextMenuItems.registerDeleteAll
260
+ */
261
+ export function registerDeleteAll() {
262
+ const deleteOption: RegistryItem = {
263
+ displayText(scope: Scope) {
264
+ if (!scope.workspace) {
265
+ return '';
266
+ }
267
+ const deletableBlocksLength = getDeletableBlocks_(scope.workspace).length;
268
+ if (deletableBlocksLength === 1) {
269
+ return Msg['DELETE_BLOCK'];
270
+ } else {
271
+ return Msg['DELETE_X_BLOCKS'].replace(
272
+ '%1', String(deletableBlocksLength));
273
+ }
274
+ },
275
+ preconditionFn(scope: Scope) {
276
+ if (!scope.workspace) {
277
+ return 'disabled';
278
+ }
279
+ const deletableBlocksLength = getDeletableBlocks_(scope.workspace).length;
280
+ return deletableBlocksLength > 0 ? 'enabled' : 'disabled';
281
+ },
282
+ callback(scope: Scope) {
283
+ if (!scope.workspace) {
284
+ return;
285
+ }
286
+ scope.workspace.cancelCurrentGesture();
287
+ const deletableBlocks = getDeletableBlocks_(scope.workspace);
288
+ const eventGroup = idGenerator.genUid();
289
+ if (deletableBlocks.length < 2) {
290
+ deleteNext_(deletableBlocks, eventGroup);
291
+ } else {
292
+ dialog.confirm(
293
+ Msg['DELETE_ALL_BLOCKS'].replace(
294
+ '%1', String(deletableBlocks.length)),
295
+ function(ok) {
296
+ if (ok) {
297
+ deleteNext_(deletableBlocks, eventGroup);
298
+ }
299
+ });
300
+ }
301
+ },
302
+ scopeType: ContextMenuRegistry.ScopeType.WORKSPACE,
303
+ id: 'workspaceDelete',
304
+ weight: 6,
305
+ };
306
+ ContextMenuRegistry.registry.register(deleteOption);
307
+ }
308
+ /** Registers all workspace-scoped context menu items. */
309
+ function registerWorkspaceOptions_() {
310
+ registerUndo();
311
+ registerRedo();
312
+ registerCleanup();
313
+ registerCollapse();
314
+ registerExpand();
315
+ registerDeleteAll();
316
+ }
317
+
318
+ /**
319
+ * Option to duplicate a block.
320
+ * @alias Blockly.ContextMenuItems.registerDuplicate
321
+ */
322
+ export function registerDuplicate() {
323
+ const duplicateOption: RegistryItem = {
324
+ displayText() {
325
+ return Msg['DUPLICATE_BLOCK'];
326
+ },
327
+ preconditionFn(scope: Scope) {
328
+ const block = scope.block;
329
+ if (!block!.isInFlyout && block!.isDeletable() && block!.isMovable()) {
330
+ if (block!.isDuplicatable()) {
331
+ return 'enabled';
332
+ }
333
+ return 'disabled';
334
+ }
335
+ return 'hidden';
336
+ },
337
+ callback(scope: Scope) {
338
+ if (scope.block) {
339
+ clipboard.duplicate(scope.block);
340
+ }
341
+ },
342
+ scopeType: ContextMenuRegistry.ScopeType.BLOCK,
343
+ id: 'blockDuplicate',
344
+ weight: 1,
345
+ };
346
+ ContextMenuRegistry.registry.register(duplicateOption);
347
+ }
348
+
349
+ /**
350
+ * Option to add or remove block-level comment.
351
+ * @alias Blockly.ContextMenuItems.registerComment
352
+ */
353
+ export function registerComment() {
354
+ const commentOption: RegistryItem = {
355
+ displayText(scope: Scope) {
356
+ if (scope.block!.getCommentIcon()) {
357
+ // If there's already a comment, option is to remove.
358
+ return Msg['REMOVE_COMMENT'];
359
+ }
360
+ // If there's no comment yet, option is to add.
361
+ return Msg['ADD_COMMENT'];
362
+ },
363
+ preconditionFn(scope: Scope) {
364
+ const block = scope.block;
365
+ // IE doesn't support necessary features for comment editing.
366
+ if (!userAgent.IE && !block!.isInFlyout &&
367
+ block!.workspace.options.comments && !block!.isCollapsed() &&
368
+ block!.isEditable()) {
369
+ return 'enabled';
370
+ }
371
+ return 'hidden';
372
+ },
373
+ callback(scope: Scope) {
374
+ const block = scope.block;
375
+ if (block!.getCommentIcon()) {
376
+ block!.setCommentText(null);
377
+ } else {
378
+ block!.setCommentText('');
379
+ }
380
+ },
381
+ scopeType: ContextMenuRegistry.ScopeType.BLOCK,
382
+ id: 'blockComment',
383
+ weight: 2,
384
+ };
385
+ ContextMenuRegistry.registry.register(commentOption);
386
+ }
387
+
388
+ /**
389
+ * Option to inline variables.
390
+ * @alias Blockly.ContextMenuItems.registerInline
391
+ */
392
+ export function registerInline() {
393
+ const inlineOption: RegistryItem = {
394
+ displayText(scope: Scope) {
395
+ return scope.block!.getInputsInline() ? Msg['EXTERNAL_INPUTS'] :
396
+ Msg['INLINE_INPUTS'];
397
+ },
398
+ preconditionFn(scope: Scope) {
399
+ const block = scope.block;
400
+ if (!block!.isInFlyout && block!.isMovable() && !block!.isCollapsed()) {
401
+ for (let i = 1; i < block!.inputList.length; i++) {
402
+ // Only display this option if there are two value or dummy inputs
403
+ // next to each other.
404
+ if (block!.inputList[i - 1].type !== inputTypes.STATEMENT &&
405
+ block!.inputList[i].type !== inputTypes.STATEMENT) {
406
+ return 'enabled';
407
+ }
408
+ }
409
+ }
410
+ return 'hidden';
411
+ },
412
+ callback(scope: Scope) {
413
+ scope.block!.setInputsInline(!scope.block!.getInputsInline());
414
+ },
415
+ scopeType: ContextMenuRegistry.ScopeType.BLOCK,
416
+ id: 'blockInline',
417
+ weight: 3,
418
+ };
419
+ ContextMenuRegistry.registry.register(inlineOption);
420
+ }
421
+
422
+ /**
423
+ * Option to collapse or expand a block.
424
+ * @alias Blockly.ContextMenuItems.registerCollapseExpandBlock
425
+ */
426
+ export function registerCollapseExpandBlock() {
427
+ const collapseExpandOption: RegistryItem = {
428
+ displayText(scope: Scope) {
429
+ return scope.block!.isCollapsed() ? Msg['EXPAND_BLOCK'] :
430
+ Msg['COLLAPSE_BLOCK'];
431
+ },
432
+ preconditionFn(scope: Scope) {
433
+ const block = scope.block;
434
+ if (!block!.isInFlyout && block!.isMovable() &&
435
+ block!.workspace.options.collapse) {
436
+ return 'enabled';
437
+ }
438
+ return 'hidden';
439
+ },
440
+ callback(scope: Scope) {
441
+ scope.block!.setCollapsed(!scope.block!.isCollapsed());
442
+ },
443
+ scopeType: ContextMenuRegistry.ScopeType.BLOCK,
444
+ id: 'blockCollapseExpand',
445
+ weight: 4,
446
+ };
447
+ ContextMenuRegistry.registry.register(collapseExpandOption);
448
+ }
449
+
450
+ /**
451
+ * Option to disable or enable a block.
452
+ * @alias Blockly.ContextMenuItems.registerDisable
453
+ */
454
+ export function registerDisable() {
455
+ const disableOption: RegistryItem = {
456
+ displayText(scope: Scope) {
457
+ return scope.block!.isEnabled() ? Msg['DISABLE_BLOCK'] :
458
+ Msg['ENABLE_BLOCK'];
459
+ },
460
+ preconditionFn(scope: Scope) {
461
+ const block = scope.block;
462
+ if (!block!.isInFlyout && block!.workspace.options.disable &&
463
+ block!.isEditable()) {
464
+ if (block!.getInheritedDisabled()) {
465
+ return 'disabled';
466
+ }
467
+ return 'enabled';
468
+ }
469
+ return 'hidden';
470
+ },
471
+ callback(scope: Scope) {
472
+ const block = scope.block;
473
+ const group = eventUtils.getGroup();
474
+ if (!group) {
475
+ eventUtils.setGroup(true);
476
+ }
477
+ block!.setEnabled(!block!.isEnabled());
478
+ if (!group) {
479
+ eventUtils.setGroup(false);
480
+ }
481
+ },
482
+ scopeType: ContextMenuRegistry.ScopeType.BLOCK,
483
+ id: 'blockDisable',
484
+ weight: 5,
485
+ };
486
+ ContextMenuRegistry.registry.register(disableOption);
487
+ }
488
+
489
+ /**
490
+ * Option to delete a block.
491
+ * @alias Blockly.ContextMenuItems.registerDelete
492
+ */
493
+ export function registerDelete() {
494
+ const deleteOption: RegistryItem = {
495
+ displayText(scope: Scope) {
496
+ const block = scope.block;
497
+ // Count the number of blocks that are nested in this block.
498
+ let descendantCount = block!.getDescendants(false).length;
499
+ const nextBlock = block!.getNextBlock();
500
+ if (nextBlock) {
501
+ // Blocks in the current stack would survive this block's deletion.
502
+ descendantCount -= nextBlock.getDescendants(false).length;
503
+ }
504
+ return descendantCount === 1 ?
505
+ Msg['DELETE_BLOCK'] :
506
+ Msg['DELETE_X_BLOCKS'].replace('%1', String(descendantCount));
507
+ },
508
+ preconditionFn(scope: Scope) {
509
+ if (!scope.block!.isInFlyout && scope.block!.isDeletable()) {
510
+ return 'enabled';
511
+ }
512
+ return 'hidden';
513
+ },
514
+ callback(scope: Scope) {
515
+ if (scope.block) {
516
+ scope.block.checkAndDelete();
517
+ }
518
+ },
519
+ scopeType: ContextMenuRegistry.ScopeType.BLOCK,
520
+ id: 'blockDelete',
521
+ weight: 6,
522
+ };
523
+ ContextMenuRegistry.registry.register(deleteOption);
524
+ }
525
+
526
+ /**
527
+ * Option to open help for a block.
528
+ * @alias Blockly.ContextMenuItems.registerHelp
529
+ */
530
+ export function registerHelp() {
531
+ const helpOption: RegistryItem = {
532
+ displayText() {
533
+ return Msg['HELP'];
534
+ },
535
+ preconditionFn(scope: Scope) {
536
+ const block = scope.block;
537
+ const url = typeof block!.helpUrl === 'function' ? block!.helpUrl() :
538
+ block!.helpUrl;
539
+ if (url) {
540
+ return 'enabled';
541
+ }
542
+ return 'hidden';
543
+ },
544
+ callback(scope: Scope) {
545
+ scope.block!.showHelp();
546
+ },
547
+ scopeType: ContextMenuRegistry.ScopeType.BLOCK,
548
+ id: 'blockHelp',
549
+ weight: 7,
550
+ };
551
+ ContextMenuRegistry.registry.register(helpOption);
552
+ }
553
+
554
+ /** Registers all block-scoped context menu items. */
555
+ function registerBlockOptions_() {
556
+ registerDuplicate();
557
+ registerComment();
558
+ registerInline();
559
+ registerCollapseExpandBlock();
560
+ registerDisable();
561
+ registerDelete();
562
+ registerHelp();
563
+ }
564
+
565
+ /**
566
+ * Registers all default context menu items. This should be called once per
567
+ * instance of ContextMenuRegistry.
568
+ * @alias Blockly.ContextMenuItems.registerDefaultOptions
569
+ * @internal
570
+ */
571
+ export function registerDefaultOptions() {
572
+ registerWorkspaceOptions_();
573
+ registerBlockOptions_();
574
+ }
575
+
576
+ registerDefaultOptions();
@@ -0,0 +1,105 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2020 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { BlockSvg } from './block_svg.js';
7
+ import type { WorkspaceSvg } from './workspace_svg.js';
8
+ /**
9
+ * Class for the registry of context menu items. This is intended to be a
10
+ * singleton. You should not create a new instance, and only access this class
11
+ * from ContextMenuRegistry.registry.
12
+ * @alias Blockly.ContextMenuRegistry
13
+ */
14
+ export declare class ContextMenuRegistry {
15
+ static registry: ContextMenuRegistry;
16
+ /** Registry of all registered RegistryItems, keyed by ID. */
17
+ private registry_;
18
+ /** Resets the existing singleton instance of ContextMenuRegistry. */
19
+ constructor();
20
+ /** Clear and recreate the registry. */
21
+ reset(): void;
22
+ /**
23
+ * Registers a RegistryItem.
24
+ * @param item Context menu item to register.
25
+ * @throws {Error} if an item with the given ID already exists.
26
+ */
27
+ register(item: RegistryItem): void;
28
+ /**
29
+ * Unregisters a RegistryItem with the given ID.
30
+ * @param id The ID of the RegistryItem to remove.
31
+ * @throws {Error} if an item with the given ID does not exist.
32
+ */
33
+ unregister(id: string): void;
34
+ /**
35
+ * @param id The ID of the RegistryItem to get.
36
+ * @return RegistryItem or null if not found
37
+ */
38
+ getItem(id: string): RegistryItem | null;
39
+ /**
40
+ * Gets the valid context menu options for the given scope type (e.g. block or
41
+ * workspace) and scope. Blocks are only shown if the preconditionFn shows
42
+ * they should not be hidden.
43
+ * @param scopeType Type of scope where menu should be shown (e.g. on a block
44
+ * or on a workspace)
45
+ * @param scope Current scope of context menu (i.e., the exact workspace or
46
+ * block being clicked on)
47
+ * @return the list of ContextMenuOptions
48
+ */
49
+ getContextMenuOptions(scopeType: ScopeType, scope: Scope): ContextMenuOption[];
50
+ }
51
+ export declare namespace ContextMenuRegistry {
52
+ /**
53
+ * Where this menu item should be rendered. If the menu item should be
54
+ * rendered in multiple scopes, e.g. on both a block and a workspace, it
55
+ * should be registered for each scope.
56
+ */
57
+ enum ScopeType {
58
+ BLOCK = "block",
59
+ WORKSPACE = "workspace"
60
+ }
61
+ /**
62
+ * The actual workspace/block where the menu is being rendered. This is passed
63
+ * to callback and displayText functions that depend on this information.
64
+ */
65
+ interface Scope {
66
+ block: BlockSvg | undefined;
67
+ workspace: WorkspaceSvg | undefined;
68
+ }
69
+ /**
70
+ * A menu item as entered in the registry.
71
+ */
72
+ interface RegistryItem {
73
+ callback: (p1: Scope) => any;
74
+ scopeType: ScopeType;
75
+ displayText: ((p1: Scope) => string) | string;
76
+ preconditionFn: (p1: Scope) => string;
77
+ weight: number;
78
+ id: string;
79
+ }
80
+ /**
81
+ * A menu item as presented to contextmenu.js.
82
+ */
83
+ interface ContextMenuOption {
84
+ text: string;
85
+ enabled: boolean;
86
+ callback: (p1: Scope) => any;
87
+ scope: Scope;
88
+ weight: number;
89
+ }
90
+ /**
91
+ * A subset of ContextMenuOption corresponding to what was publicly
92
+ * documented. ContextMenuOption should be preferred for new code.
93
+ */
94
+ interface LegacyContextMenuOption {
95
+ text: string;
96
+ enabled: boolean;
97
+ callback: (p1: Scope) => any;
98
+ }
99
+ }
100
+ export declare type ScopeType = ContextMenuRegistry.ScopeType;
101
+ export declare const ScopeType: typeof ContextMenuRegistry.ScopeType;
102
+ export declare type Scope = ContextMenuRegistry.Scope;
103
+ export declare type RegistryItem = ContextMenuRegistry.RegistryItem;
104
+ export declare type ContextMenuOption = ContextMenuRegistry.ContextMenuOption;
105
+ export declare type LegacyContextMenuOption = ContextMenuRegistry.LegacyContextMenuOption;