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,73 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2018 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { IBubble } from './interfaces/i_bubble.js';
7
+ import { Coordinate } from './utils/coordinate.js';
8
+ import type { WorkspaceSvg } from './workspace_svg.js';
9
+ /**
10
+ * Class for a bubble dragger. It moves things on the bubble canvas around the
11
+ * workspace when they are being dragged by a mouse or touch. These can be
12
+ * block comments, mutators, warnings, or workspace comments.
13
+ * @alias Blockly.BubbleDragger
14
+ */
15
+ export declare class BubbleDragger {
16
+ private bubble;
17
+ private workspace;
18
+ /** Which drag target the mouse pointer is over, if any. */
19
+ private dragTarget_;
20
+ /** Whether the bubble would be deleted if dropped immediately. */
21
+ private wouldDeleteBubble_;
22
+ private readonly startXY_;
23
+ private dragSurface_;
24
+ /**
25
+ * @param bubble The item on the bubble canvas to drag.
26
+ * @param workspace The workspace to drag on.
27
+ */
28
+ constructor(bubble: IBubble, workspace: WorkspaceSvg);
29
+ /**
30
+ * Start dragging a bubble. This includes moving it to the drag surface.
31
+ * @internal
32
+ */
33
+ startBubbleDrag(): void;
34
+ /**
35
+ * Execute a step of bubble dragging, based on the given event. Update the
36
+ * display accordingly.
37
+ * @param e The most recent move event.
38
+ * @param currentDragDeltaXY How far the pointer has moved from the position
39
+ * at the start of the drag, in pixel units.
40
+ * @internal
41
+ */
42
+ dragBubble(e: Event, currentDragDeltaXY: Coordinate): void;
43
+ /**
44
+ * Whether ending the drag would delete the bubble.
45
+ * @param dragTarget The drag target that the bubblee is currently over.
46
+ * @return Whether dropping the bubble immediately would delete the block.
47
+ */
48
+ private shouldDelete_;
49
+ /**
50
+ * Update the cursor (and possibly the trash can lid) to reflect whether the
51
+ * dragging bubble would be deleted if released immediately.
52
+ */
53
+ private updateCursorDuringBubbleDrag_;
54
+ /**
55
+ * Finish a bubble drag and put the bubble back on the workspace.
56
+ * @param e The mouseup/touchend event.
57
+ * @param currentDragDeltaXY How far the pointer has moved from the position
58
+ * at the start of the drag, in pixel units.
59
+ * @internal
60
+ */
61
+ endBubbleDrag(e: Event, currentDragDeltaXY: Coordinate): void;
62
+ /** Fire a move event at the end of a bubble drag. */
63
+ private fireMoveEvent_;
64
+ /**
65
+ * Convert a coordinate object from pixels to workspace units, including a
66
+ * correction for mutator workspaces.
67
+ * This function does not consider differing origins. It simply scales the
68
+ * input's x and y values.
69
+ * @param pixelCoord A coordinate with x and y values in CSS pixel units.
70
+ * @return The input coordinate divided by the workspace scale.
71
+ */
72
+ private pixelsToWorkspaceUnits_;
73
+ }
@@ -0,0 +1,229 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2018 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ /**
8
+ * @fileoverview Methods for dragging a bubble visually.
9
+ */
10
+
11
+ /**
12
+ * Methods for dragging a bubble visually.
13
+ * @class
14
+ */
15
+ import * as goog from '../closure/goog/goog.js';
16
+ goog.declareModuleId('Blockly.BubbleDragger');
17
+
18
+ // Unused import preserved for side-effects. Remove if unneeded.
19
+ // import './bubble.js';
20
+ // Unused import preserved for side-effects. Remove if unneeded.
21
+ // import './constants.js';
22
+
23
+ import type {BlockDragSurfaceSvg} from './block_drag_surface.js';
24
+ import {ComponentManager} from './component_manager.js';
25
+ import type {CommentMove} from './events/events_comment_move.js';
26
+ import * as eventUtils from './events/utils.js';
27
+ import type {IBubble} from './interfaces/i_bubble.js';
28
+ import type {IDeleteArea} from './interfaces/i_delete_area.js';
29
+ import type {IDragTarget} from './interfaces/i_drag_target.js';
30
+ import {Coordinate} from './utils/coordinate.js';
31
+ import * as svgMath from './utils/svg_math.js';
32
+ import {WorkspaceCommentSvg} from './workspace_comment_svg.js';
33
+ import type {WorkspaceSvg} from './workspace_svg.js';
34
+
35
+
36
+ /**
37
+ * Class for a bubble dragger. It moves things on the bubble canvas around the
38
+ * workspace when they are being dragged by a mouse or touch. These can be
39
+ * block comments, mutators, warnings, or workspace comments.
40
+ * @alias Blockly.BubbleDragger
41
+ */
42
+ export class BubbleDragger {
43
+ /** Which drag target the mouse pointer is over, if any. */
44
+ private dragTarget_: IDragTarget|null = null;
45
+
46
+ /** Whether the bubble would be deleted if dropped immediately. */
47
+ private wouldDeleteBubble_ = false;
48
+ private readonly startXY_: Coordinate;
49
+ private dragSurface_: BlockDragSurfaceSvg|null;
50
+
51
+ /**
52
+ * @param bubble The item on the bubble canvas to drag.
53
+ * @param workspace The workspace to drag on.
54
+ */
55
+ constructor(private bubble: IBubble, private workspace: WorkspaceSvg) {
56
+ /**
57
+ * The location of the top left corner of the dragging bubble's body at the
58
+ * beginning of the drag, in workspace coordinates.
59
+ */
60
+ this.startXY_ = this.bubble.getRelativeToSurfaceXY();
61
+
62
+ /**
63
+ * The drag surface to move bubbles to during a drag, or null if none should
64
+ * be used. Block dragging and bubble dragging use the same surface.
65
+ */
66
+ this.dragSurface_ =
67
+ svgMath.is3dSupported() && !!workspace.getBlockDragSurface() ?
68
+ workspace.getBlockDragSurface() :
69
+ null;
70
+ }
71
+
72
+ /**
73
+ * Start dragging a bubble. This includes moving it to the drag surface.
74
+ * @internal
75
+ */
76
+ startBubbleDrag() {
77
+ if (!eventUtils.getGroup()) {
78
+ eventUtils.setGroup(true);
79
+ }
80
+
81
+ this.workspace.setResizesEnabled(false);
82
+ this.bubble.setAutoLayout(false);
83
+ if (this.dragSurface_) {
84
+ this.bubble.moveTo(0, 0);
85
+ this.dragSurface_.translateSurface(this.startXY_.x, this.startXY_.y);
86
+ // Execute the move on the top-level SVG component.
87
+ this.dragSurface_.setBlocksAndShow(this.bubble.getSvgRoot());
88
+ }
89
+
90
+ this.bubble.setDragging && this.bubble.setDragging(true);
91
+ }
92
+
93
+ /**
94
+ * Execute a step of bubble dragging, based on the given event. Update the
95
+ * display accordingly.
96
+ * @param e The most recent move event.
97
+ * @param currentDragDeltaXY How far the pointer has moved from the position
98
+ * at the start of the drag, in pixel units.
99
+ * @internal
100
+ */
101
+ dragBubble(e: Event, currentDragDeltaXY: Coordinate) {
102
+ const delta = this.pixelsToWorkspaceUnits_(currentDragDeltaXY);
103
+ const newLoc = Coordinate.sum(this.startXY_, delta);
104
+ this.bubble.moveDuringDrag(this.dragSurface_, newLoc);
105
+
106
+ const oldDragTarget = this.dragTarget_;
107
+ this.dragTarget_ = this.workspace.getDragTarget(e);
108
+
109
+ const oldWouldDeleteBubble = this.wouldDeleteBubble_;
110
+ this.wouldDeleteBubble_ = this.shouldDelete_(this.dragTarget_);
111
+ if (oldWouldDeleteBubble !== this.wouldDeleteBubble_) {
112
+ // Prevent unnecessary add/remove class calls.
113
+ this.updateCursorDuringBubbleDrag_();
114
+ }
115
+ // Call drag enter/exit/over after wouldDeleteBlock is called in
116
+ // shouldDelete_
117
+ if (this.dragTarget_ !== oldDragTarget) {
118
+ oldDragTarget && oldDragTarget.onDragExit(this.bubble);
119
+ this.dragTarget_ && this.dragTarget_.onDragEnter(this.bubble);
120
+ }
121
+ this.dragTarget_ && this.dragTarget_.onDragOver(this.bubble);
122
+ }
123
+
124
+ /**
125
+ * Whether ending the drag would delete the bubble.
126
+ * @param dragTarget The drag target that the bubblee is currently over.
127
+ * @return Whether dropping the bubble immediately would delete the block.
128
+ */
129
+ private shouldDelete_(dragTarget: IDragTarget|null): boolean {
130
+ if (dragTarget) {
131
+ const componentManager = this.workspace.getComponentManager();
132
+ const isDeleteArea = componentManager.hasCapability(
133
+ dragTarget.id, ComponentManager.Capability.DELETE_AREA);
134
+ if (isDeleteArea) {
135
+ return (dragTarget as IDeleteArea).wouldDelete(this.bubble, false);
136
+ }
137
+ }
138
+ return false;
139
+ }
140
+
141
+ /**
142
+ * Update the cursor (and possibly the trash can lid) to reflect whether the
143
+ * dragging bubble would be deleted if released immediately.
144
+ */
145
+ private updateCursorDuringBubbleDrag_() {
146
+ this.bubble.setDeleteStyle(this.wouldDeleteBubble_);
147
+ }
148
+
149
+ /**
150
+ * Finish a bubble drag and put the bubble back on the workspace.
151
+ * @param e The mouseup/touchend event.
152
+ * @param currentDragDeltaXY How far the pointer has moved from the position
153
+ * at the start of the drag, in pixel units.
154
+ * @internal
155
+ */
156
+ endBubbleDrag(e: Event, currentDragDeltaXY: Coordinate) {
157
+ // Make sure internal state is fresh.
158
+ this.dragBubble(e, currentDragDeltaXY);
159
+
160
+ const preventMove =
161
+ this.dragTarget_ && this.dragTarget_.shouldPreventMove(this.bubble);
162
+ let newLoc;
163
+ if (preventMove) {
164
+ newLoc = this.startXY_;
165
+ } else {
166
+ const delta = this.pixelsToWorkspaceUnits_(currentDragDeltaXY);
167
+ newLoc = Coordinate.sum(this.startXY_, delta);
168
+ }
169
+ // Move the bubble to its final location.
170
+ this.bubble.moveTo(newLoc.x, newLoc.y);
171
+
172
+ if (this.dragTarget_) {
173
+ this.dragTarget_.onDrop(this.bubble);
174
+ }
175
+
176
+ if (this.wouldDeleteBubble_) {
177
+ // Fire a move event, so we know where to go back to for an undo.
178
+ this.fireMoveEvent_();
179
+ this.bubble.dispose();
180
+ } else {
181
+ // Put everything back onto the bubble canvas.
182
+ if (this.dragSurface_) {
183
+ this.dragSurface_.clearAndHide(this.workspace.getBubbleCanvas());
184
+ }
185
+ if (this.bubble.setDragging) {
186
+ this.bubble.setDragging(false);
187
+ }
188
+ this.fireMoveEvent_();
189
+ }
190
+ this.workspace.setResizesEnabled(true);
191
+
192
+ eventUtils.setGroup(false);
193
+ }
194
+
195
+ /** Fire a move event at the end of a bubble drag. */
196
+ private fireMoveEvent_() {
197
+ if (this.bubble instanceof WorkspaceCommentSvg) {
198
+ const event = new (eventUtils.get(eventUtils.COMMENT_MOVE))!
199
+ (this.bubble) as CommentMove;
200
+ event.setOldCoordinate(this.startXY_);
201
+ event.recordNew();
202
+ eventUtils.fire(event);
203
+ }
204
+ // TODO (fenichel): move events for comments.
205
+ return;
206
+ }
207
+
208
+ /**
209
+ * Convert a coordinate object from pixels to workspace units, including a
210
+ * correction for mutator workspaces.
211
+ * This function does not consider differing origins. It simply scales the
212
+ * input's x and y values.
213
+ * @param pixelCoord A coordinate with x and y values in CSS pixel units.
214
+ * @return The input coordinate divided by the workspace scale.
215
+ */
216
+ private pixelsToWorkspaceUnits_(pixelCoord: Coordinate): Coordinate {
217
+ const result = new Coordinate(
218
+ pixelCoord.x / this.workspace.scale,
219
+ pixelCoord.y / this.workspace.scale);
220
+ if (this.workspace.isMutator) {
221
+ // If we're in a mutator, its scale is always 1, purely because of some
222
+ // oddities in our rendering optimizations. The actual scale is the same
223
+ // as the scale on the parent workspace. Fix that for dragging.
224
+ const mainScale = this.workspace.options.parentWorkspace!.scale;
225
+ result.scale(1 / mainScale);
226
+ }
227
+ return result;
228
+ }
229
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2021 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { Abstract } from './events/events_abstract.js';
7
+ import type { IBoundedElement } from './interfaces/i_bounded_element.js';
8
+ import type { ContainerRegion } from './metrics_manager.js';
9
+ import type { WorkspaceSvg } from './workspace_svg.js';
10
+ /**
11
+ * Bumps the given object that has passed out of bounds.
12
+ * @param workspace The workspace containing the object.
13
+ * @param scrollMetrics Scroll metrics
14
+ * in workspace coordinates.
15
+ * @param object The object to bump.
16
+ * @return True if block was bumped.
17
+ * @alias Blockly.bumpObjects.bumpIntoBounds
18
+ */
19
+ declare function bumpObjectIntoBounds(workspace: WorkspaceSvg, scrollMetrics: ContainerRegion, object: IBoundedElement): boolean;
20
+ export declare const bumpIntoBounds: typeof bumpObjectIntoBounds;
21
+ /**
22
+ * Creates a handler for bumping objects when they cross fixed bounds.
23
+ * @param workspace The workspace to handle.
24
+ * @return The event handler.
25
+ * @alias Blockly.bumpObjects.bumpIntoBoundsHandler
26
+ */
27
+ export declare function bumpIntoBoundsHandler(workspace: WorkspaceSvg): (p1: Abstract) => void;
28
+ /**
29
+ * Bumps the top objects in the given workspace into bounds.
30
+ * @param workspace The workspace.
31
+ * @alias Blockly.bumpObjects.bumpTopObjectsIntoBounds
32
+ */
33
+ export declare function bumpTopObjectsIntoBounds(workspace: WorkspaceSvg): void;
34
+ export {};
@@ -7,42 +7,41 @@
7
7
  /**
8
8
  * @fileoverview Utilities for bumping objects back into worksapce bounds.
9
9
  */
10
- 'use strict';
11
10
 
12
11
  /**
13
12
  * Utilities for bumping objects back into worksapce bounds.
14
13
  * @namespace Blockly.bumpObjects
15
14
  */
16
- goog.module('Blockly.bumpObjects');
17
-
18
- const eventUtils = goog.require('Blockly.Events.utils');
19
- const mathUtils = goog.require('Blockly.utils.math');
20
- /* eslint-disable-next-line no-unused-vars */
21
- const {Abstract} = goog.requireType('Blockly.Events.Abstract');
22
- /* eslint-disable-next-line no-unused-vars */
23
- const {BlockSvg} = goog.requireType('Blockly.BlockSvg');
24
- /* eslint-disable-next-line no-unused-vars */
25
- const {IBoundedElement} = goog.requireType('Blockly.IBoundedElement');
26
- /* eslint-disable-next-line no-unused-vars */
27
- const {MetricsManager} = goog.requireType('Blockly.MetricsManager');
28
- /* eslint-disable-next-line no-unused-vars */
29
- const {ViewportChange} = goog.requireType('Blockly.Events.ViewportChange');
30
- /* eslint-disable-next-line no-unused-vars */
31
- const {WorkspaceCommentSvg} = goog.requireType('Blockly.WorkspaceCommentSvg');
32
- /* eslint-disable-next-line no-unused-vars */
33
- const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
15
+ import * as goog from '../closure/goog/goog.js';
16
+ goog.declareModuleId('Blockly.bumpObjects');
17
+
18
+ import type {BlockSvg} from './block_svg.js';
19
+ import type {Abstract} from './events/events_abstract.js';
20
+ import type {BlockCreate} from './events/events_block_create.js';
21
+ import type {BlockMove} from './events/events_block_move.js';
22
+ import type {CommentCreate} from './events/events_comment_create.js';
23
+ import type {CommentMove} from './events/events_comment_move.js';
24
+ import type {ViewportChange} from './events/events_viewport.js';
25
+ import * as eventUtils from './events/utils.js';
26
+ import type {IBoundedElement} from './interfaces/i_bounded_element.js';
27
+ import type {ContainerRegion, MetricsManager} from './metrics_manager.js';
28
+ import * as mathUtils from './utils/math.js';
29
+ import type {WorkspaceCommentSvg} from './workspace_comment_svg.js';
30
+ import type {WorkspaceSvg} from './workspace_svg.js';
34
31
 
35
32
 
36
33
  /**
37
34
  * Bumps the given object that has passed out of bounds.
38
- * @param {!WorkspaceSvg} workspace The workspace containing the object.
39
- * @param {!MetricsManager.ContainerRegion} scrollMetrics Scroll metrics
35
+ * @param workspace The workspace containing the object.
36
+ * @param scrollMetrics Scroll metrics
40
37
  * in workspace coordinates.
41
- * @param {!IBoundedElement} object The object to bump.
42
- * @return {boolean} True if block was bumped.
38
+ * @param object The object to bump.
39
+ * @return True if block was bumped.
43
40
  * @alias Blockly.bumpObjects.bumpIntoBounds
44
41
  */
45
- const bumpObjectIntoBounds = function(workspace, scrollMetrics, object) {
42
+ function bumpObjectIntoBounds(
43
+ workspace: WorkspaceSvg, scrollMetrics: ContainerRegion,
44
+ object: IBoundedElement): boolean {
46
45
  // Compute new top/left position for object.
47
46
  const objectMetrics = object.getBoundingRectangle();
48
47
  const height = objectMetrics.bottom - objectMetrics.top;
@@ -82,27 +81,29 @@ const bumpObjectIntoBounds = function(workspace, scrollMetrics, object) {
82
81
  return true;
83
82
  }
84
83
  return false;
85
- };
86
- exports.bumpIntoBounds = bumpObjectIntoBounds;
84
+ }
85
+ export const bumpIntoBounds = bumpObjectIntoBounds;
87
86
 
88
87
  /**
89
88
  * Creates a handler for bumping objects when they cross fixed bounds.
90
- * @param {!WorkspaceSvg} workspace The workspace to handle.
91
- * @return {function(Abstract)} The event handler.
89
+ * @param workspace The workspace to handle.
90
+ * @return The event handler.
92
91
  * @alias Blockly.bumpObjects.bumpIntoBoundsHandler
93
92
  */
94
- const bumpIntoBoundsHandler = function(workspace) {
95
- return function(e) {
93
+ export function bumpIntoBoundsHandler(workspace: WorkspaceSvg):
94
+ (p1: Abstract) => void {
95
+ return (e) => {
96
96
  const metricsManager = workspace.getMetricsManager();
97
97
  if (!metricsManager.hasFixedEdges() || workspace.isDragging()) {
98
98
  return;
99
99
  }
100
100
 
101
- if (eventUtils.BUMP_EVENTS.indexOf(e.type) !== -1) {
101
+ if (eventUtils.BUMP_EVENTS.indexOf(e.type ?? '') !== -1) {
102
102
  const scrollMetricsInWsCoords = metricsManager.getScrollMetrics(true);
103
103
 
104
104
  // Triggered by move/create event
105
- const object = extractObjectFromEvent(workspace, e);
105
+ const object =
106
+ extractObjectFromEvent(workspace, e as eventUtils.BumpEvent);
106
107
  if (!object) {
107
108
  return;
108
109
  }
@@ -111,8 +112,7 @@ const bumpIntoBoundsHandler = function(workspace) {
111
112
  eventUtils.setGroup(e.group);
112
113
 
113
114
  const wasBumped = bumpObjectIntoBounds(
114
- workspace, scrollMetricsInWsCoords,
115
- /** @type {!IBoundedElement} */ (object));
115
+ workspace, scrollMetricsInWsCoords, (object as IBoundedElement));
116
116
 
117
117
  if (wasBumped && !e.group) {
118
118
  console.warn(
@@ -123,49 +123,52 @@ const bumpIntoBoundsHandler = function(workspace) {
123
123
  eventUtils.setGroup(oldGroup);
124
124
  }
125
125
  } else if (e.type === eventUtils.VIEWPORT_CHANGE) {
126
- const viewportEvent = /** @type {!ViewportChange} */ (e);
127
- if (viewportEvent.scale > viewportEvent.oldScale) {
126
+ const viewportEvent = (e as ViewportChange);
127
+ if (viewportEvent.scale && viewportEvent.oldScale &&
128
+ viewportEvent.scale > viewportEvent.oldScale) {
128
129
  bumpTopObjectsIntoBounds(workspace);
129
130
  }
130
131
  }
131
132
  };
132
- };
133
- exports.bumpIntoBoundsHandler = bumpIntoBoundsHandler;
133
+ }
134
134
 
135
135
  /**
136
136
  * Extracts the object from the given event.
137
- * @param {!WorkspaceSvg} workspace The workspace the event originated
137
+ * @param workspace The workspace the event originated
138
138
  * from.
139
- * @param {!eventUtils.BumpEvent} e An event containing an object.
140
- * @return {?BlockSvg|?WorkspaceCommentSvg} The extracted
139
+ * @param e An event containing an object.
140
+ * @return The extracted
141
141
  * object.
142
142
  */
143
- const extractObjectFromEvent = function(workspace, e) {
143
+ function extractObjectFromEvent(
144
+ workspace: WorkspaceSvg, e: eventUtils.BumpEvent): BlockSvg|null|
145
+ WorkspaceCommentSvg {
144
146
  let object = null;
145
147
  switch (e.type) {
146
148
  case eventUtils.BLOCK_CREATE:
147
149
  case eventUtils.BLOCK_MOVE:
148
- object = workspace.getBlockById(e.blockId);
150
+ object = workspace.getBlockById((e as BlockCreate | BlockMove).blockId);
149
151
  if (object) {
150
152
  object = object.getRootBlock();
151
153
  }
152
154
  break;
153
155
  case eventUtils.COMMENT_CREATE:
154
156
  case eventUtils.COMMENT_MOVE:
155
- object = (
156
- /** @type {?WorkspaceCommentSvg} */
157
- (workspace.getCommentById(e.commentId)));
157
+ object = workspace.getCommentById(
158
+ (e as CommentCreate | CommentMove).commentId) as
159
+ WorkspaceCommentSvg |
160
+ null;
158
161
  break;
159
162
  }
160
163
  return object;
161
- };
164
+ }
162
165
 
163
166
  /**
164
167
  * Bumps the top objects in the given workspace into bounds.
165
- * @param {!WorkspaceSvg} workspace The workspace.
168
+ * @param workspace The workspace.
166
169
  * @alias Blockly.bumpObjects.bumpTopObjectsIntoBounds
167
170
  */
168
- const bumpTopObjectsIntoBounds = function(workspace) {
171
+ export function bumpTopObjectsIntoBounds(workspace: WorkspaceSvg) {
169
172
  const metricsManager = workspace.getMetricsManager();
170
173
  if (!metricsManager.hasFixedEdges() || workspace.isDragging()) {
171
174
  return;
@@ -173,8 +176,7 @@ const bumpTopObjectsIntoBounds = function(workspace) {
173
176
 
174
177
  const scrollMetricsInWsCoords = metricsManager.getScrollMetrics(true);
175
178
  const topBlocks = workspace.getTopBoundedElements();
176
- for (let i = 0, block; (block = topBlocks[i]); i++) {
179
+ for (let i = 0, block; block = topBlocks[i]; i++) {
177
180
  bumpObjectIntoBounds(workspace, scrollMetricsInWsCoords, block);
178
181
  }
179
- };
180
- exports.bumpTopObjectsIntoBounds = bumpTopObjectsIntoBounds;
182
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2021 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { ICopyable } from './interfaces/i_copyable.js';
7
+ /**
8
+ * Copy a block or workspace comment onto the local clipboard.
9
+ * @param toCopy Block or Workspace Comment to be copied.
10
+ * @alias Blockly.clipboard.copy
11
+ * @internal
12
+ */
13
+ export declare function copy(toCopy: ICopyable): void;
14
+ /**
15
+ * Private version of copy for stubbing in tests.
16
+ */
17
+ declare function copyInternal(toCopy: ICopyable): void;
18
+ /**
19
+ * Paste a block or workspace comment on to the main workspace.
20
+ * @return The pasted thing if the paste was successful, null otherwise.
21
+ * @alias Blockly.clipboard.paste
22
+ * @internal
23
+ */
24
+ export declare function paste(): ICopyable | null;
25
+ /**
26
+ * Duplicate this block and its children, or a workspace comment.
27
+ * @param toDuplicate Block or Workspace Comment to be duplicated.
28
+ * @return The block or workspace comment that was duplicated, or null if the
29
+ * duplication failed.
30
+ * @alias Blockly.clipboard.duplicate
31
+ * @internal
32
+ */
33
+ export declare function duplicate(toDuplicate: ICopyable): ICopyable | null;
34
+ /**
35
+ * Private version of duplicate for stubbing in tests.
36
+ */
37
+ declare function duplicateInternal(toDuplicate: ICopyable): ICopyable | null;
38
+ export declare const TEST_ONLY: {
39
+ duplicateInternal: typeof duplicateInternal;
40
+ copyInternal: typeof copyInternal;
41
+ };
42
+ export {};
@@ -0,0 +1,91 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2021 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ /**
8
+ * @fileoverview Blockly's internal clipboard for managing copy-paste.
9
+ */
10
+
11
+ /**
12
+ * Blockly's internal clipboard for managing copy-paste.
13
+ * @namespace Blockly.clipboard
14
+ */
15
+ import * as goog from '../closure/goog/goog.js';
16
+ goog.declareModuleId('Blockly.clipboard');
17
+
18
+ import type {CopyData, ICopyable} from './interfaces/i_copyable.js';
19
+
20
+
21
+ /** Metadata about the object that is currently on the clipboard. */
22
+ let copyData: CopyData|null = null;
23
+
24
+ /**
25
+ * Copy a block or workspace comment onto the local clipboard.
26
+ * @param toCopy Block or Workspace Comment to be copied.
27
+ * @alias Blockly.clipboard.copy
28
+ * @internal
29
+ */
30
+ export function copy(toCopy: ICopyable) {
31
+ TEST_ONLY.copyInternal(toCopy);
32
+ }
33
+
34
+ /**
35
+ * Private version of copy for stubbing in tests.
36
+ */
37
+ function copyInternal(toCopy: ICopyable) {
38
+ copyData = toCopy.toCopyData();
39
+ }
40
+
41
+ /**
42
+ * Paste a block or workspace comment on to the main workspace.
43
+ * @return The pasted thing if the paste was successful, null otherwise.
44
+ * @alias Blockly.clipboard.paste
45
+ * @internal
46
+ */
47
+ export function paste(): ICopyable|null {
48
+ if (!copyData) {
49
+ return null;
50
+ }
51
+ // Pasting always pastes to the main workspace, even if the copy
52
+ // started in a flyout workspace.
53
+ let workspace = copyData.source;
54
+ if (workspace.isFlyout) {
55
+ workspace = workspace.targetWorkspace;
56
+ }
57
+ if (copyData.typeCounts &&
58
+ workspace.isCapacityAvailable(copyData.typeCounts)) {
59
+ return workspace.paste(copyData.saveInfo);
60
+ }
61
+ return null;
62
+ }
63
+
64
+ /**
65
+ * Duplicate this block and its children, or a workspace comment.
66
+ * @param toDuplicate Block or Workspace Comment to be duplicated.
67
+ * @return The block or workspace comment that was duplicated, or null if the
68
+ * duplication failed.
69
+ * @alias Blockly.clipboard.duplicate
70
+ * @internal
71
+ */
72
+ export function duplicate(toDuplicate: ICopyable): ICopyable|null {
73
+ return TEST_ONLY.duplicateInternal(toDuplicate);
74
+ }
75
+
76
+ /**
77
+ * Private version of duplicate for stubbing in tests.
78
+ */
79
+ function duplicateInternal(toDuplicate: ICopyable): ICopyable|null {
80
+ const oldCopyData = copyData;
81
+ copy(toDuplicate);
82
+ const pastedThing =
83
+ toDuplicate.toCopyData()?.source?.paste(copyData!.saveInfo) ?? null;
84
+ copyData = oldCopyData;
85
+ return pastedThing;
86
+ }
87
+
88
+ export const TEST_ONLY = {
89
+ duplicateInternal,
90
+ copyInternal,
91
+ }