blockly 9.0.0-beta.0 → 9.0.0-beta.1

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 (608) hide show
  1. package/blockly.min.js +401 -405
  2. package/blockly_compressed.js +398 -402
  3. package/blockly_compressed.js.map +1 -1
  4. package/blocks.d.ts +0 -5
  5. package/blocks_compressed.js +3 -3
  6. package/blocks_compressed.js.map +1 -1
  7. package/closure/goog/base.d.ts +1 -0
  8. package/closure/goog/base_minimal.d.ts +1 -0
  9. package/closure/goog/goog.d.ts +1 -0
  10. package/core/any_aliases.d.ts +1 -0
  11. package/core/block.d.ts +145 -53
  12. package/core/block_animations.d.ts +5 -0
  13. package/core/block_drag_surface.d.ts +18 -5
  14. package/core/block_dragger.d.ts +20 -5
  15. package/core/block_svg.d.ts +89 -21
  16. package/core/blockly.d.ts +29 -8
  17. package/core/blockly_options.d.ts +2 -0
  18. package/core/blocks.d.ts +2 -0
  19. package/core/browser_events.d.ts +16 -7
  20. package/core/bubble.d.ts +42 -12
  21. package/core/bubble_dragger.d.ts +9 -2
  22. package/core/bump_objects.d.ts +6 -2
  23. package/core/clipboard.d.ts +6 -2
  24. package/core/comment.d.ts +13 -3
  25. package/core/common.d.ts +35 -9
  26. package/core/component_manager.d.ts +16 -6
  27. package/core/config.d.ts +1 -0
  28. package/core/connection.d.ts +48 -18
  29. package/core/connection_checker.d.ts +16 -7
  30. package/core/connection_db.d.ts +17 -6
  31. package/core/connection_type.d.ts +2 -0
  32. package/core/constants.d.ts +3 -0
  33. package/core/contextmenu.d.ts +15 -5
  34. package/core/contextmenu_items.d.ts +15 -0
  35. package/core/contextmenu_registry.d.ts +12 -7
  36. package/core/css.d.ts +3 -0
  37. package/core/delete_area.d.ts +5 -1
  38. package/core/dialog.d.ts +14 -7
  39. package/core/drag_target.d.ts +10 -2
  40. package/core/dropdowndiv.d.ts +42 -10
  41. package/core/events/events.d.ts +1 -0
  42. package/core/events/events_abstract.d.ts +10 -3
  43. package/core/events/events_block_base.d.ts +5 -1
  44. package/core/events/events_block_change.d.ts +10 -3
  45. package/core/events/events_block_create.d.ts +6 -1
  46. package/core/events/events_block_delete.d.ts +6 -1
  47. package/core/events/events_block_drag.d.ts +5 -1
  48. package/core/events/events_block_move.d.ts +10 -3
  49. package/core/events/events_bubble_open.d.ts +6 -2
  50. package/core/events/events_click.d.ts +5 -1
  51. package/core/events/events_comment_base.d.ts +6 -1
  52. package/core/events/events_comment_change.d.ts +8 -2
  53. package/core/events/events_comment_create.d.ts +6 -1
  54. package/core/events/events_comment_delete.d.ts +6 -1
  55. package/core/events/events_comment_move.d.ts +9 -2
  56. package/core/events/events_marker_move.d.ts +5 -1
  57. package/core/events/events_selected.d.ts +5 -1
  58. package/core/events/events_theme_change.d.ts +5 -1
  59. package/core/events/events_toolbox_item_select.d.ts +5 -1
  60. package/core/events/events_trashcan_open.d.ts +5 -1
  61. package/core/events/events_ui.d.ts +5 -1
  62. package/core/events/events_ui_base.d.ts +2 -0
  63. package/core/events/events_var_base.d.ts +5 -1
  64. package/core/events/events_var_create.d.ts +6 -1
  65. package/core/events/events_var_delete.d.ts +6 -1
  66. package/core/events/events_var_rename.d.ts +6 -1
  67. package/core/events/events_viewport.d.ts +5 -1
  68. package/core/events/utils.d.ts +50 -7
  69. package/core/events/workspace_events.d.ts +5 -1
  70. package/core/extensions.d.ts +14 -4
  71. package/core/field.d.ts +93 -34
  72. package/core/field_angle.d.ts +14 -3
  73. package/core/field_checkbox.d.ts +20 -7
  74. package/core/field_colour.d.ts +22 -6
  75. package/core/field_dropdown.d.ts +28 -8
  76. package/core/field_image.d.ts +15 -4
  77. package/core/field_label.d.ts +8 -2
  78. package/core/field_label_serializable.d.ts +4 -1
  79. package/core/field_multilineinput.d.ts +21 -6
  80. package/core/field_number.d.ts +22 -6
  81. package/core/field_registry.d.ts +8 -2
  82. package/core/field_textinput.d.ts +28 -8
  83. package/core/field_variable.d.ts +36 -13
  84. package/core/flyout_base.d.ts +70 -24
  85. package/core/flyout_button.d.ts +12 -5
  86. package/core/flyout_horizontal.d.ts +14 -6
  87. package/core/flyout_metrics_manager.d.ts +6 -3
  88. package/core/flyout_vertical.d.ts +14 -6
  89. package/core/generator.d.ts +39 -20
  90. package/core/gesture.d.ts +48 -13
  91. package/core/grid.d.ts +19 -15
  92. package/core/icon.d.ts +12 -3
  93. package/core/inject.d.ts +3 -1
  94. package/core/input.d.ts +25 -10
  95. package/core/input_types.d.ts +2 -0
  96. package/core/insertion_marker_manager.d.ts +27 -9
  97. package/core/interfaces/i_ast_node_location.d.ts +2 -0
  98. package/core/interfaces/i_ast_node_location_svg.d.ts +4 -0
  99. package/core/interfaces/i_ast_node_location_with_block.d.ts +4 -1
  100. package/core/interfaces/i_autohideable.d.ts +3 -0
  101. package/core/interfaces/i_block_dragger.d.ts +7 -1
  102. package/core/interfaces/i_bounded_element.d.ts +5 -1
  103. package/core/interfaces/i_bubble.d.ts +11 -2
  104. package/core/interfaces/i_collapsible_toolbox_item.d.ts +6 -2
  105. package/core/interfaces/i_component.d.ts +2 -0
  106. package/core/interfaces/i_connection_checker.d.ts +14 -6
  107. package/core/interfaces/i_contextmenu.d.ts +2 -0
  108. package/core/interfaces/i_copyable.d.ts +3 -1
  109. package/core/interfaces/i_deletable.d.ts +4 -1
  110. package/core/interfaces/i_delete_area.d.ts +4 -1
  111. package/core/interfaces/i_drag_target.d.ts +10 -2
  112. package/core/interfaces/i_draggable.d.ts +2 -0
  113. package/core/interfaces/i_flyout.d.ts +27 -11
  114. package/core/interfaces/i_keyboard_accessible.d.ts +4 -1
  115. package/core/interfaces/i_metrics_manager.d.ts +24 -12
  116. package/core/interfaces/i_movable.d.ts +4 -1
  117. package/core/interfaces/i_positionable.d.ts +5 -1
  118. package/core/interfaces/i_registrable.d.ts +2 -0
  119. package/core/interfaces/i_registrable_field.d.ts +2 -0
  120. package/core/interfaces/i_selectable.d.ts +2 -0
  121. package/core/interfaces/i_selectable_toolbox_item.d.ts +10 -3
  122. package/core/interfaces/i_serializer.d.ts +6 -1
  123. package/core/interfaces/i_styleable.d.ts +4 -0
  124. package/core/interfaces/i_toolbox.d.ts +17 -6
  125. package/core/interfaces/i_toolbox_item.d.ts +17 -7
  126. package/core/internal_constants.d.ts +6 -0
  127. package/core/keyboard_nav/ast_node.d.ts +55 -28
  128. package/core/keyboard_nav/basic_cursor.d.ts +20 -9
  129. package/core/keyboard_nav/cursor.d.ts +11 -5
  130. package/core/keyboard_nav/marker.d.ts +9 -2
  131. package/core/keyboard_nav/tab_navigate_cursor.d.ts +4 -1
  132. package/core/main.d.ts +1 -0
  133. package/core/marker_manager.d.ts +13 -2
  134. package/core/menu.d.ts +23 -5
  135. package/core/menuitem.d.ts +22 -7
  136. package/core/metrics_manager.d.ts +30 -15
  137. package/core/msg.d.ts +1 -0
  138. package/core/mutator.d.ts +19 -7
  139. package/core/names.d.ts +20 -8
  140. package/core/options.d.ts +12 -6
  141. package/core/positionable_helpers.d.ts +11 -3
  142. package/core/procedures.d.ts +27 -10
  143. package/core/registry.d.ts +19 -8
  144. package/core/rendered_connection.d.ts +28 -7
  145. package/core/renderers/common/block_rendering.d.ts +9 -2
  146. package/core/renderers/common/constants.d.ts +49 -17
  147. package/core/renderers/common/debug.d.ts +5 -1
  148. package/core/renderers/common/debugger.d.ts +12 -1
  149. package/core/renderers/common/drawer.d.ts +12 -0
  150. package/core/renderers/common/i_path_object.d.ts +15 -0
  151. package/core/renderers/common/info.d.ts +25 -8
  152. package/core/renderers/common/marker_svg.d.ts +35 -6
  153. package/core/renderers/common/path_object.d.ts +20 -0
  154. package/core/renderers/common/renderer.d.ts +33 -12
  155. package/core/renderers/geras/constants.d.ts +2 -0
  156. package/core/renderers/geras/drawer.d.ts +2 -0
  157. package/core/renderers/geras/geras.d.ts +3 -2
  158. package/core/renderers/geras/highlight_constants.d.ts +9 -6
  159. package/core/renderers/geras/highlighter.d.ts +12 -1
  160. package/core/renderers/geras/info.d.ts +4 -1
  161. package/core/renderers/geras/measurables/inline_input.d.ts +2 -0
  162. package/core/renderers/geras/measurables/statement_input.d.ts +2 -0
  163. package/core/renderers/geras/path_object.d.ts +4 -0
  164. package/core/renderers/geras/renderer.d.ts +16 -6
  165. package/core/renderers/measurables/base.d.ts +2 -0
  166. package/core/renderers/measurables/bottom_row.d.ts +9 -3
  167. package/core/renderers/measurables/connection.d.ts +2 -0
  168. package/core/renderers/measurables/external_value_input.d.ts +2 -1
  169. package/core/renderers/measurables/field.d.ts +2 -1
  170. package/core/renderers/measurables/hat.d.ts +2 -1
  171. package/core/renderers/measurables/icon.d.ts +3 -1
  172. package/core/renderers/measurables/in_row_spacer.d.ts +2 -1
  173. package/core/renderers/measurables/inline_input.d.ts +2 -1
  174. package/core/renderers/measurables/input_connection.d.ts +2 -0
  175. package/core/renderers/measurables/input_row.d.ts +4 -1
  176. package/core/renderers/measurables/jagged_edge.d.ts +2 -1
  177. package/core/renderers/measurables/next_connection.d.ts +2 -1
  178. package/core/renderers/measurables/output_connection.d.ts +2 -1
  179. package/core/renderers/measurables/previous_connection.d.ts +2 -1
  180. package/core/renderers/measurables/round_corner.d.ts +2 -1
  181. package/core/renderers/measurables/row.d.ts +27 -5
  182. package/core/renderers/measurables/spacer_row.d.ts +2 -1
  183. package/core/renderers/measurables/square_corner.d.ts +2 -1
  184. package/core/renderers/measurables/statement_input.d.ts +2 -1
  185. package/core/renderers/measurables/top_row.d.ts +7 -3
  186. package/core/renderers/measurables/types.d.ts +54 -25
  187. package/core/renderers/minimalist/constants.d.ts +2 -0
  188. package/core/renderers/minimalist/drawer.d.ts +2 -0
  189. package/core/renderers/minimalist/info.d.ts +4 -1
  190. package/core/renderers/minimalist/minimalist.d.ts +2 -1
  191. package/core/renderers/minimalist/renderer.d.ts +8 -3
  192. package/core/renderers/thrasos/info.d.ts +4 -1
  193. package/core/renderers/thrasos/renderer.d.ts +4 -1
  194. package/core/renderers/thrasos/thrasos.d.ts +2 -1
  195. package/core/renderers/zelos/constants.d.ts +11 -3
  196. package/core/renderers/zelos/drawer.d.ts +3 -0
  197. package/core/renderers/zelos/info.d.ts +10 -5
  198. package/core/renderers/zelos/marker_svg.d.ts +5 -0
  199. package/core/renderers/zelos/measurables/bottom_row.d.ts +2 -0
  200. package/core/renderers/zelos/measurables/inputs.d.ts +2 -0
  201. package/core/renderers/zelos/measurables/row_elements.d.ts +2 -0
  202. package/core/renderers/zelos/measurables/top_row.d.ts +2 -0
  203. package/core/renderers/zelos/path_object.d.ts +8 -1
  204. package/core/renderers/zelos/renderer.d.ts +14 -6
  205. package/core/renderers/zelos/zelos.d.ts +3 -2
  206. package/core/scrollbar.d.ts +41 -9
  207. package/core/scrollbar_pair.d.ts +20 -6
  208. package/core/serialization/blocks.d.ts +10 -4
  209. package/core/serialization/exceptions.d.ts +5 -0
  210. package/core/serialization/priorities.d.ts +3 -0
  211. package/core/serialization/registry.d.ts +3 -0
  212. package/core/serialization/variables.d.ts +2 -0
  213. package/core/serialization/workspaces.d.ts +4 -1
  214. package/core/shortcut_items.d.ts +10 -0
  215. package/core/shortcut_registry.d.ts +25 -9
  216. package/core/sprites.d.ts +2 -4
  217. package/core/theme/classic.d.ts +2 -0
  218. package/core/theme/themes.d.ts +1 -0
  219. package/core/theme/zelos.d.ts +2 -0
  220. package/core/theme.d.ts +14 -3
  221. package/core/theme_manager.d.ts +10 -1
  222. package/core/toolbox/category.d.ts +42 -15
  223. package/core/toolbox/collapsible_category.d.ts +10 -3
  224. package/core/toolbox/separator.d.ts +4 -1
  225. package/core/toolbox/toolbox.d.ts +70 -22
  226. package/core/toolbox/toolbox_item.d.ts +17 -7
  227. package/core/tooltip.d.ts +22 -1
  228. package/core/touch.d.ts +18 -6
  229. package/core/touch_gesture.d.ts +16 -2
  230. package/core/trashcan.d.ts +27 -6
  231. package/core/utils/aria.d.ts +4 -0
  232. package/core/utils/array.d.ts +4 -2
  233. package/core/utils/colour.d.ts +24 -13
  234. package/core/utils/coordinate.d.ts +18 -8
  235. package/core/utils/deprecation.d.ts +6 -4
  236. package/core/utils/dom.d.ts +32 -12
  237. package/core/utils/idgenerator.d.ts +13 -3
  238. package/core/utils/keycodes.d.ts +1 -0
  239. package/core/utils/math.d.ts +7 -3
  240. package/core/utils/metrics.d.ts +1 -0
  241. package/core/utils/object.d.ts +7 -2
  242. package/core/utils/parsing.d.ts +9 -4
  243. package/core/utils/rect.d.ts +5 -3
  244. package/core/utils/sentinel.d.ts +2 -0
  245. package/core/utils/size.d.ts +4 -2
  246. package/core/utils/string.d.ts +13 -6
  247. package/core/utils/style.d.ts +14 -33
  248. package/core/utils/svg.d.ts +5 -2
  249. package/core/utils/svg_math.d.ts +15 -7
  250. package/core/utils/svg_paths.d.ts +20 -10
  251. package/core/utils/toolbox.d.ts +26 -5
  252. package/core/utils/useragent.d.ts +1 -12
  253. package/core/utils/xml.d.ts +13 -5
  254. package/core/utils.d.ts +43 -21
  255. package/core/variable_map.d.ts +26 -9
  256. package/core/variable_model.d.ts +5 -2
  257. package/core/variables.d.ts +33 -18
  258. package/core/variables_dynamic.d.ts +25 -5
  259. package/core/warning.d.ts +8 -3
  260. package/core/widgetdiv.d.ts +15 -6
  261. package/core/workspace.d.ts +80 -30
  262. package/core/workspace_audio.d.ts +6 -0
  263. package/core/workspace_comment.d.ts +33 -11
  264. package/core/workspace_comment_svg.d.ts +52 -9
  265. package/core/workspace_drag_surface_svg.d.ts +20 -14
  266. package/core/workspace_dragger.d.ts +6 -0
  267. package/core/workspace_svg.d.ts +174 -62
  268. package/core/xml.d.ts +26 -11
  269. package/core/zoom_controls.d.ts +16 -6
  270. package/core.d.ts +0 -5
  271. package/dart.d.ts +0 -5
  272. package/dart_compressed.js.map +1 -1
  273. package/index.d.ts +2 -6
  274. package/javascript.d.ts +0 -5
  275. package/javascript_compressed.js.map +1 -1
  276. package/lua.d.ts +0 -5
  277. package/lua_compressed.js.map +1 -1
  278. package/package.json +6 -3
  279. package/php.d.ts +0 -5
  280. package/php_compressed.js.map +1 -1
  281. package/python.d.ts +0 -5
  282. package/python_compressed.js.map +1 -1
  283. package/blocks/blocks.js +0 -48
  284. package/blocks/colour.js +0 -121
  285. package/blocks/lists.js +0 -996
  286. package/blocks/logic.js +0 -665
  287. package/blocks/loops.js +0 -375
  288. package/blocks/math.js +0 -594
  289. package/blocks/procedures.js +0 -1196
  290. package/blocks/text.js +0 -1000
  291. package/blocks/variables.js +0 -176
  292. package/blocks/variables_dynamic.js +0 -192
  293. package/core/any_aliases.ts +0 -1
  294. package/core/block.ts +0 -2102
  295. package/core/block_animations.ts +0 -202
  296. package/core/block_drag_surface.ts +0 -237
  297. package/core/block_dragger.ts +0 -447
  298. package/core/block_svg.ts +0 -1758
  299. package/core/blockly.js +0 -890
  300. package/core/blockly.ts +0 -749
  301. package/core/blockly_options.ts +0 -81
  302. package/core/blocks.ts +0 -29
  303. package/core/browser_events.ts +0 -289
  304. package/core/bubble.ts +0 -892
  305. package/core/bubble_dragger.ts +0 -229
  306. package/core/bump_objects.ts +0 -182
  307. package/core/clipboard.ts +0 -91
  308. package/core/comment.ts +0 -398
  309. package/core/common.ts +0 -288
  310. package/core/component_manager.ts +0 -211
  311. package/core/config.ts +0 -80
  312. package/core/connection.ts +0 -692
  313. package/core/connection_checker.ts +0 -301
  314. package/core/connection_db.ts +0 -289
  315. package/core/connection_type.ts +0 -32
  316. package/core/constants.ts +0 -29
  317. package/core/contextmenu.ts +0 -363
  318. package/core/contextmenu_items.ts +0 -576
  319. package/core/contextmenu_registry.ts +0 -179
  320. package/core/css.ts +0 -560
  321. package/core/delete_area.ts +0 -82
  322. package/core/dialog.ts +0 -127
  323. package/core/drag_target.ts +0 -94
  324. package/core/dropdowndiv.ts +0 -683
  325. package/core/events/events.ts +0 -123
  326. package/core/events/events_abstract.ts +0 -112
  327. package/core/events/events_block_base.ts +0 -65
  328. package/core/events/events_block_change.ts +0 -176
  329. package/core/events/events_block_create.ts +0 -114
  330. package/core/events/events_block_delete.ts +0 -126
  331. package/core/events/events_block_drag.ts +0 -82
  332. package/core/events/events_block_move.ts +0 -206
  333. package/core/events/events_bubble_open.ts +0 -82
  334. package/core/events/events_click.ts +0 -84
  335. package/core/events/events_comment_base.ts +0 -107
  336. package/core/events/events_comment_change.ts +0 -108
  337. package/core/events/events_comment_create.ts +0 -82
  338. package/core/events/events_comment_delete.ts +0 -77
  339. package/core/events/events_comment_move.ts +0 -154
  340. package/core/events/events_marker_move.ts +0 -99
  341. package/core/events/events_selected.ts +0 -78
  342. package/core/events/events_theme_change.ts +0 -67
  343. package/core/events/events_toolbox_item_select.ts +0 -79
  344. package/core/events/events_trashcan_open.ts +0 -68
  345. package/core/events/events_ui.ts +0 -89
  346. package/core/events/events_ui_base.ts +0 -54
  347. package/core/events/events_var_base.ts +0 -65
  348. package/core/events/events_var_create.ts +0 -88
  349. package/core/events/events_var_delete.ts +0 -88
  350. package/core/events/events_var_rename.ts +0 -89
  351. package/core/events/events_viewport.ts +0 -100
  352. package/core/events/utils.ts +0 -529
  353. package/core/events/workspace_events.ts +0 -86
  354. package/core/extensions.ts +0 -504
  355. package/core/field.ts +0 -1206
  356. package/core/field_angle.ts +0 -563
  357. package/core/field_checkbox.ts +0 -243
  358. package/core/field_colour.ts +0 -632
  359. package/core/field_dropdown.ts +0 -773
  360. package/core/field_image.ts +0 -282
  361. package/core/field_label.ts +0 -152
  362. package/core/field_label_serializable.ts +0 -76
  363. package/core/field_multilineinput.ts +0 -466
  364. package/core/field_number.ts +0 -327
  365. package/core/field_registry.ts +0 -87
  366. package/core/field_textinput.ts +0 -591
  367. package/core/field_variable.ts +0 -545
  368. package/core/flyout_base.ts +0 -1165
  369. package/core/flyout_button.ts +0 -292
  370. package/core/flyout_horizontal.ts +0 -381
  371. package/core/flyout_metrics_manager.ts +0 -94
  372. package/core/flyout_vertical.ts +0 -384
  373. package/core/generator.ts +0 -539
  374. package/core/gesture.ts +0 -946
  375. package/core/grid.ts +0 -192
  376. package/core/icon.ts +0 -189
  377. package/core/inject.ts +0 -390
  378. package/core/input.ts +0 -309
  379. package/core/input_types.ts +0 -32
  380. package/core/insertion_marker_manager.ts +0 -788
  381. package/core/interfaces/i_ast_node_location.ts +0 -23
  382. package/core/interfaces/i_ast_node_location_svg.ts +0 -37
  383. package/core/interfaces/i_ast_node_location_with_block.ts +0 -38
  384. package/core/interfaces/i_autohideable.ts +0 -34
  385. package/core/interfaces/i_block_dragger.ts +0 -67
  386. package/core/interfaces/i_bounded_element.ts +0 -42
  387. package/core/interfaces/i_bubble.ts +0 -88
  388. package/core/interfaces/i_collapsible_toolbox_item.ts +0 -47
  389. package/core/interfaces/i_component.ts +0 -32
  390. package/core/interfaces/i_connection_checker.ts +0 -102
  391. package/core/interfaces/i_contextmenu.ts +0 -26
  392. package/core/interfaces/i_copyable.ts +0 -40
  393. package/core/interfaces/i_deletable.ts +0 -29
  394. package/core/interfaces/i_delete_area.ts +0 -46
  395. package/core/interfaces/i_drag_target.ts +0 -84
  396. package/core/interfaces/i_draggable.ts +0 -25
  397. package/core/interfaces/i_flyout.ts +0 -186
  398. package/core/interfaces/i_keyboard_accessible.ts +0 -35
  399. package/core/interfaces/i_metrics_manager.ts +0 -151
  400. package/core/interfaces/i_movable.ts +0 -29
  401. package/core/interfaces/i_positionable.ts +0 -50
  402. package/core/interfaces/i_registrable.ts +0 -25
  403. package/core/interfaces/i_registrable_field.ts +0 -31
  404. package/core/interfaces/i_selectable.ts +0 -34
  405. package/core/interfaces/i_selectable_toolbox_item.ts +0 -64
  406. package/core/interfaces/i_serializer.ts +0 -65
  407. package/core/interfaces/i_styleable.ts +0 -35
  408. package/core/interfaces/i_toolbox.ts +0 -127
  409. package/core/interfaces/i_toolbox_item.ts +0 -84
  410. package/core/internal_constants.ts +0 -67
  411. package/core/keyboard_nav/ast_node.ts +0 -717
  412. package/core/keyboard_nav/basic_cursor.ts +0 -214
  413. package/core/keyboard_nav/cursor.ts +0 -134
  414. package/core/keyboard_nav/marker.ts +0 -115
  415. package/core/keyboard_nav/tab_navigate_cursor.ts +0 -48
  416. package/core/main.js +0 -303
  417. package/core/marker_manager.ts +0 -181
  418. package/core/menu.ts +0 -449
  419. package/core/menuitem.ts +0 -240
  420. package/core/metrics_manager.ts +0 -456
  421. package/core/msg.ts +0 -20
  422. package/core/mutator.ts +0 -560
  423. package/core/names.ts +0 -267
  424. package/core/options.ts +0 -365
  425. package/core/positionable_helpers.ts +0 -181
  426. package/core/procedures.ts +0 -443
  427. package/core/registry.ts +0 -339
  428. package/core/rendered_connection.ts +0 -568
  429. package/core/renderers/common/block_rendering.ts +0 -164
  430. package/core/renderers/common/constants.ts +0 -1124
  431. package/core/renderers/common/debug.ts +0 -61
  432. package/core/renderers/common/debugger.ts +0 -433
  433. package/core/renderers/common/drawer.ts +0 -450
  434. package/core/renderers/common/i_path_object.ts +0 -161
  435. package/core/renderers/common/info.ts +0 -718
  436. package/core/renderers/common/marker_svg.ts +0 -680
  437. package/core/renderers/common/path_object.ts +0 -272
  438. package/core/renderers/common/renderer.ts +0 -271
  439. package/core/renderers/geras/constants.ts +0 -61
  440. package/core/renderers/geras/drawer.ts +0 -176
  441. package/core/renderers/geras/geras.ts +0 -37
  442. package/core/renderers/geras/highlight_constants.ts +0 -337
  443. package/core/renderers/geras/highlighter.ts +0 -306
  444. package/core/renderers/geras/info.ts +0 -450
  445. package/core/renderers/geras/measurables/inline_input.ts +0 -51
  446. package/core/renderers/geras/measurables/statement_input.ts +0 -50
  447. package/core/renderers/geras/path_object.ts +0 -138
  448. package/core/renderers/geras/renderer.ts +0 -126
  449. package/core/renderers/measurables/base.ts +0 -53
  450. package/core/renderers/measurables/bottom_row.ts +0 -120
  451. package/core/renderers/measurables/connection.ts +0 -52
  452. package/core/renderers/measurables/external_value_input.ts +0 -65
  453. package/core/renderers/measurables/field.ts +0 -63
  454. package/core/renderers/measurables/hat.ts +0 -48
  455. package/core/renderers/measurables/icon.ts +0 -54
  456. package/core/renderers/measurables/in_row_spacer.ts +0 -44
  457. package/core/renderers/measurables/inline_input.ts +0 -76
  458. package/core/renderers/measurables/input_connection.ts +0 -66
  459. package/core/renderers/measurables/input_row.ts +0 -82
  460. package/core/renderers/measurables/jagged_edge.ts +0 -43
  461. package/core/renderers/measurables/next_connection.ts +0 -47
  462. package/core/renderers/measurables/output_connection.ts +0 -56
  463. package/core/renderers/measurables/previous_connection.ts +0 -47
  464. package/core/renderers/measurables/round_corner.ts +0 -49
  465. package/core/renderers/measurables/row.ts +0 -225
  466. package/core/renderers/measurables/spacer_row.ts +0 -55
  467. package/core/renderers/measurables/square_corner.ts +0 -47
  468. package/core/renderers/measurables/statement_input.ts +0 -55
  469. package/core/renderers/measurables/top_row.ts +0 -122
  470. package/core/renderers/measurables/types.ts +0 -332
  471. package/core/renderers/minimalist/constants.ts +0 -32
  472. package/core/renderers/minimalist/drawer.ts +0 -38
  473. package/core/renderers/minimalist/info.ts +0 -52
  474. package/core/renderers/minimalist/minimalist.ts +0 -22
  475. package/core/renderers/minimalist/renderer.ts +0 -71
  476. package/core/renderers/thrasos/info.ts +0 -338
  477. package/core/renderers/thrasos/renderer.ts +0 -48
  478. package/core/renderers/thrasos/thrasos.ts +0 -20
  479. package/core/renderers/zelos/constants.ts +0 -858
  480. package/core/renderers/zelos/drawer.ts +0 -228
  481. package/core/renderers/zelos/info.ts +0 -593
  482. package/core/renderers/zelos/marker_svg.ts +0 -151
  483. package/core/renderers/zelos/measurables/bottom_row.ts +0 -53
  484. package/core/renderers/zelos/measurables/inputs.ts +0 -56
  485. package/core/renderers/zelos/measurables/row_elements.ts +0 -45
  486. package/core/renderers/zelos/measurables/top_row.ts +0 -58
  487. package/core/renderers/zelos/path_object.ts +0 -215
  488. package/core/renderers/zelos/renderer.ts +0 -142
  489. package/core/renderers/zelos/zelos.ts +0 -39
  490. package/core/scrollbar.ts +0 -870
  491. package/core/scrollbar_pair.ts +0 -321
  492. package/core/serialization/blocks.ts +0 -706
  493. package/core/serialization/exceptions.ts +0 -98
  494. package/core/serialization/priorities.ts +0 -32
  495. package/core/serialization/registry.ts +0 -43
  496. package/core/serialization/variables.ts +0 -96
  497. package/core/serialization/workspaces.ts +0 -106
  498. package/core/shortcut_items.ts +0 -266
  499. package/core/shortcut_registry.ts +0 -355
  500. package/core/sprites.ts +0 -29
  501. package/core/theme/classic.ts +0 -54
  502. package/core/theme/themes.ts +0 -22
  503. package/core/theme/zelos.ts +0 -91
  504. package/core/theme.ts +0 -221
  505. package/core/theme_manager.ts +0 -186
  506. package/core/toolbox/category.ts +0 -679
  507. package/core/toolbox/collapsible_category.ts +0 -273
  508. package/core/toolbox/separator.ts +0 -105
  509. package/core/toolbox/toolbox.ts +0 -1044
  510. package/core/toolbox/toolbox_item.ts +0 -147
  511. package/core/tooltip.ts +0 -463
  512. package/core/touch.ts +0 -306
  513. package/core/touch_gesture.ts +0 -295
  514. package/core/trashcan.ts +0 -671
  515. package/core/utils/aria.ts +0 -160
  516. package/core/utils/array.ts +0 -32
  517. package/core/utils/colour.ts +0 -276
  518. package/core/utils/coordinate.ts +0 -124
  519. package/core/utils/deprecation.ts +0 -41
  520. package/core/utils/dom.ts +0 -408
  521. package/core/utils/idgenerator.ts +0 -80
  522. package/core/utils/keycodes.ts +0 -169
  523. package/core/utils/math.ts +0 -61
  524. package/core/utils/metrics.ts +0 -97
  525. package/core/utils/object.ts +0 -95
  526. package/core/utils/parsing.ts +0 -261
  527. package/core/utils/rect.ts +0 -62
  528. package/core/utils/sentinel.ts +0 -23
  529. package/core/utils/size.ts +0 -51
  530. package/core/utils/string.ts +0 -308
  531. package/core/utils/style.ts +0 -306
  532. package/core/utils/svg.ts +0 -88
  533. package/core/utils/svg_math.ts +0 -269
  534. package/core/utils/svg_paths.ts +0 -140
  535. package/core/utils/toolbox.ts +0 -433
  536. package/core/utils/useragent.ts +0 -135
  537. package/core/utils/xml.ts +0 -97
  538. package/core/utils.ts +0 -428
  539. package/core/variable_map.ts +0 -392
  540. package/core/variable_model.ts +0 -82
  541. package/core/variables.ts +0 -596
  542. package/core/variables_dynamic.ts +0 -133
  543. package/core/warning.ts +0 -161
  544. package/core/widgetdiv.ts +0 -257
  545. package/core/workspace.ts +0 -801
  546. package/core/workspace_audio.ts +0 -156
  547. package/core/workspace_comment.ts +0 -398
  548. package/core/workspace_comment_svg.ts +0 -1127
  549. package/core/workspace_drag_surface_svg.ts +0 -187
  550. package/core/workspace_dragger.ts +0 -104
  551. package/core/workspace_svg.ts +0 -2655
  552. package/core/xml.ts +0 -1023
  553. package/core/zoom_controls.ts +0 -441
  554. package/generators/dart/all.js +0 -27
  555. package/generators/dart/colour.js +0 -105
  556. package/generators/dart/lists.js +0 -431
  557. package/generators/dart/logic.js +0 -123
  558. package/generators/dart/loops.js +0 -161
  559. package/generators/dart/math.js +0 -446
  560. package/generators/dart/procedures.js +0 -105
  561. package/generators/dart/text.js +0 -338
  562. package/generators/dart/variables.js +0 -32
  563. package/generators/dart/variables_dynamic.js +0 -21
  564. package/generators/dart.js +0 -303
  565. package/generators/javascript/all.js +0 -27
  566. package/generators/javascript/colour.js +0 -85
  567. package/generators/javascript/lists.js +0 -405
  568. package/generators/javascript/logic.js +0 -127
  569. package/generators/javascript/loops.js +0 -180
  570. package/generators/javascript/math.js +0 -401
  571. package/generators/javascript/procedures.js +0 -110
  572. package/generators/javascript/text.js +0 -371
  573. package/generators/javascript/variables.js +0 -32
  574. package/generators/javascript/variables_dynamic.js +0 -21
  575. package/generators/javascript.js +0 -322
  576. package/generators/lua/all.js +0 -27
  577. package/generators/lua/colour.js +0 -71
  578. package/generators/lua/lists.js +0 -348
  579. package/generators/lua/logic.js +0 -112
  580. package/generators/lua/loops.js +0 -168
  581. package/generators/lua/math.js +0 -406
  582. package/generators/lua/procedures.js +0 -106
  583. package/generators/lua/text.js +0 -327
  584. package/generators/lua/variables.js +0 -31
  585. package/generators/lua/variables_dynamic.js +0 -21
  586. package/generators/lua.js +0 -206
  587. package/generators/php/all.js +0 -27
  588. package/generators/php/colour.js +0 -81
  589. package/generators/php/lists.js +0 -481
  590. package/generators/php/logic.js +0 -119
  591. package/generators/php/loops.js +0 -161
  592. package/generators/php/math.js +0 -349
  593. package/generators/php/procedures.js +0 -125
  594. package/generators/php/text.js +0 -255
  595. package/generators/php/variables.js +0 -32
  596. package/generators/php/variables_dynamic.js +0 -21
  597. package/generators/php.js +0 -303
  598. package/generators/python/all.js +0 -27
  599. package/generators/python/colour.js +0 -67
  600. package/generators/python/lists.js +0 -346
  601. package/generators/python/logic.js +0 -120
  602. package/generators/python/loops.js +0 -206
  603. package/generators/python/math.js +0 -373
  604. package/generators/python/procedures.js +0 -129
  605. package/generators/python/text.js +0 -291
  606. package/generators/python/variables.js +0 -32
  607. package/generators/python/variables_dynamic.js +0 -21
  608. package/generators/python.js +0 -333
package/core/bubble.ts DELETED
@@ -1,892 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2012 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- /**
8
- * @fileoverview Object representing a UI bubble.
9
- */
10
-
11
- /**
12
- * Object representing a UI bubble.
13
- * @class
14
- */
15
- import * as goog from '../closure/goog/goog.js';
16
- goog.declareModuleId('Blockly.Bubble');
17
-
18
- /* eslint-disable-next-line no-unused-vars */
19
- // Unused import preserved for side-effects. Remove if unneeded.
20
- // import './metrics_manager.js';
21
- // Unused import preserved for side-effects. Remove if unneeded.
22
- // import './workspace.js';
23
-
24
- import type {BlockDragSurfaceSvg} from './block_drag_surface.js';
25
- import type {BlockSvg} from './block_svg.js';
26
- import * as browserEvents from './browser_events.js';
27
- import type {IBubble} from './interfaces/i_bubble.js';
28
- import type {ContainerRegion} from './metrics_manager.js';
29
- import {Scrollbar} from './scrollbar.js';
30
- import * as Touch from './touch.js';
31
- import {Coordinate} from './utils/coordinate.js';
32
- import * as dom from './utils/dom.js';
33
- import * as math from './utils/math.js';
34
- import {Size} from './utils/size.js';
35
- import {Svg} from './utils/svg.js';
36
- import * as userAgent from './utils/useragent.js';
37
- import type {WorkspaceSvg} from './workspace_svg.js';
38
-
39
-
40
- /**
41
- * Class for UI bubble.
42
- * @alias Blockly.Bubble
43
- */
44
- export class Bubble implements IBubble {
45
- /** Width of the border around the bubble. */
46
- static BORDER_WIDTH = 6;
47
-
48
- /**
49
- * Determines the thickness of the base of the arrow in relation to the size
50
- * of the bubble. Higher numbers result in thinner arrows.
51
- */
52
- static ARROW_THICKNESS = 5;
53
-
54
- /** The number of degrees that the arrow bends counter-clockwise. */
55
- static ARROW_ANGLE = 20;
56
-
57
- /**
58
- * The sharpness of the arrow's bend. Higher numbers result in smoother
59
- * arrows.
60
- */
61
- static ARROW_BEND = 4;
62
-
63
- /** Distance between arrow point and anchor point. */
64
- static ANCHOR_RADIUS = 8;
65
-
66
- /** Mouse up event data. */
67
- private static onMouseUpWrapper_: browserEvents.Data|null = null;
68
-
69
- /** Mouse move event data. */
70
- private static onMouseMoveWrapper_: browserEvents.Data|null = null;
71
- workspace_: WorkspaceSvg;
72
- content_: SVGElement;
73
- shape_: SVGElement;
74
-
75
- /** Flag to stop incremental rendering during construction. */
76
- private readonly rendered_: boolean;
77
-
78
- /** The SVG group containing all parts of the bubble. */
79
- private bubbleGroup_: SVGGElement|null = null;
80
-
81
- /**
82
- * The SVG path for the arrow from the bubble to the icon on the block.
83
- */
84
- private bubbleArrow_: SVGPathElement|null = null;
85
-
86
- /** The SVG rect for the main body of the bubble. */
87
- private bubbleBack_: SVGRectElement|null = null;
88
-
89
- /** The SVG group for the resize hash marks on some bubbles. */
90
- private resizeGroup_: SVGGElement|null = null;
91
-
92
- /** Absolute coordinate of anchor point, in workspace coordinates. */
93
- private anchorXY_!: Coordinate;
94
-
95
- /**
96
- * Relative X coordinate of bubble with respect to the anchor's centre,
97
- * in workspace units.
98
- * In RTL mode the initial value is negated.
99
- */
100
- private relativeLeft_ = 0;
101
-
102
- /**
103
- * Relative Y coordinate of bubble with respect to the anchor's centre, in
104
- * workspace units.
105
- */
106
- private relativeTop_ = 0;
107
-
108
- /** Width of bubble, in workspace units. */
109
- private width_ = 0;
110
-
111
- /** Height of bubble, in workspace units. */
112
- private height_ = 0;
113
-
114
- /** Automatically position and reposition the bubble. */
115
- private autoLayout_ = true;
116
-
117
- /** Method to call on resize of bubble. */
118
- private resizeCallback_: (() => void)|null = null;
119
-
120
- /** Method to call on move of bubble. */
121
- private moveCallback_: (() => void)|null = null;
122
-
123
- /** Mouse down on bubbleBack_ event data. */
124
- private onMouseDownBubbleWrapper_: browserEvents.Data|null = null;
125
-
126
- /** Mouse down on resizeGroup_ event data. */
127
- private onMouseDownResizeWrapper_: browserEvents.Data|null = null;
128
-
129
- /**
130
- * Describes whether this bubble has been disposed of (nodes and event
131
- * listeners removed from the page) or not.
132
- * @internal
133
- */
134
- disposed = false;
135
- private arrow_radians_: number;
136
-
137
- /**
138
- * @param workspace The workspace on which to draw the bubble.
139
- * @param content SVG content for the bubble.
140
- * @param shape SVG element to avoid eclipsing.
141
- * @param anchorXY Absolute position of bubble's anchor point.
142
- * @param bubbleWidth Width of bubble, or null if not resizable.
143
- * @param bubbleHeight Height of bubble, or null if not resizable.
144
- * @struct
145
- */
146
- constructor(
147
- workspace: WorkspaceSvg, content: SVGElement, shape: SVGElement,
148
- anchorXY: Coordinate, bubbleWidth: number|null,
149
- bubbleHeight: number|null) {
150
- this.rendered_ = false;
151
- this.workspace_ = workspace;
152
- this.content_ = content;
153
- this.shape_ = shape;
154
-
155
- let angle = Bubble.ARROW_ANGLE;
156
- if (this.workspace_.RTL) {
157
- angle = -angle;
158
- }
159
- this.arrow_radians_ = math.toRadians(angle);
160
-
161
- const canvas = workspace.getBubbleCanvas();
162
- canvas.appendChild(
163
- this.createDom_(content, !!(bubbleWidth && bubbleHeight)));
164
-
165
- this.setAnchorLocation(anchorXY);
166
- if (!bubbleWidth || !bubbleHeight) {
167
- const bBox = (this.content_ as SVGGraphicsElement).getBBox();
168
- bubbleWidth = bBox.width + 2 * Bubble.BORDER_WIDTH;
169
- bubbleHeight = bBox.height + 2 * Bubble.BORDER_WIDTH;
170
- }
171
- this.setBubbleSize(bubbleWidth, bubbleHeight);
172
-
173
- // Render the bubble.
174
- this.positionBubble_();
175
- this.renderArrow_();
176
- this.rendered_ = true;
177
- }
178
-
179
- /**
180
- * Create the bubble's DOM.
181
- * @param content SVG content for the bubble.
182
- * @param hasResize Add diagonal resize gripper if true.
183
- * @return The bubble's SVG group.
184
- */
185
- private createDom_(content: Element, hasResize: boolean): SVGElement {
186
- /* Create the bubble. Here's the markup that will be generated:
187
- <g>
188
- <g filter="url(#blocklyEmbossFilter837493)">
189
- <path d="... Z" />
190
- <rect class="blocklyDraggable" rx="8" ry="8" width="180"
191
- height="180"/>
192
- </g>
193
- <g transform="translate(165, 165)" class="blocklyResizeSE">
194
- <polygon points="0,15 15,15 15,0"/>
195
- <line class="blocklyResizeLine" x1="5" y1="14" x2="14" y2="5"/>
196
- <line class="blocklyResizeLine" x1="10" y1="14" x2="14" y2="10"/>
197
- </g>
198
- [...content goes here...]
199
- </g>
200
- */
201
- this.bubbleGroup_ = dom.createSvgElement(Svg.G, {});
202
- let filter: {filter?: string} = {
203
- 'filter': 'url(#' +
204
- this.workspace_.getRenderer().getConstants().embossFilterId + ')',
205
- };
206
- if (userAgent.JavaFx) {
207
- // Multiple reports that JavaFX can't handle filters.
208
- // https://github.com/google/blockly/issues/99
209
- filter = {};
210
- }
211
- const bubbleEmboss = dom.createSvgElement(Svg.G, filter, this.bubbleGroup_);
212
- this.bubbleArrow_ = dom.createSvgElement(Svg.PATH, {}, bubbleEmboss);
213
- this.bubbleBack_ = dom.createSvgElement(
214
- Svg.RECT, {
215
- 'class': 'blocklyDraggable',
216
- 'x': 0,
217
- 'y': 0,
218
- 'rx': Bubble.BORDER_WIDTH,
219
- 'ry': Bubble.BORDER_WIDTH,
220
- },
221
- bubbleEmboss);
222
- if (hasResize) {
223
- this.resizeGroup_ = dom.createSvgElement(
224
- Svg.G, {
225
- 'class': this.workspace_.RTL ? 'blocklyResizeSW' :
226
- 'blocklyResizeSE',
227
- },
228
- this.bubbleGroup_);
229
- const resizeSize = 2 * Bubble.BORDER_WIDTH;
230
- dom.createSvgElement(
231
- Svg.POLYGON,
232
- {'points': '0,x x,x x,0'.replace(/x/g, resizeSize.toString())},
233
- this.resizeGroup_);
234
- dom.createSvgElement(
235
- Svg.LINE, {
236
- 'class': 'blocklyResizeLine',
237
- 'x1': resizeSize / 3,
238
- 'y1': resizeSize - 1,
239
- 'x2': resizeSize - 1,
240
- 'y2': resizeSize / 3,
241
- },
242
- this.resizeGroup_);
243
- dom.createSvgElement(
244
- Svg.LINE, {
245
- 'class': 'blocklyResizeLine',
246
- 'x1': resizeSize * 2 / 3,
247
- 'y1': resizeSize - 1,
248
- 'x2': resizeSize - 1,
249
- 'y2': resizeSize * 2 / 3,
250
- },
251
- this.resizeGroup_);
252
- } else {
253
- this.resizeGroup_ = null;
254
- }
255
-
256
- if (!this.workspace_.options.readOnly) {
257
- this.onMouseDownBubbleWrapper_ = browserEvents.conditionalBind(
258
- this.bubbleBack_, 'mousedown', this, this.bubbleMouseDown_);
259
- if (this.resizeGroup_) {
260
- this.onMouseDownResizeWrapper_ = browserEvents.conditionalBind(
261
- this.resizeGroup_, 'mousedown', this, this.resizeMouseDown_);
262
- }
263
- }
264
- this.bubbleGroup_.appendChild(content);
265
- return this.bubbleGroup_;
266
- }
267
-
268
- /**
269
- * Return the root node of the bubble's SVG group.
270
- * @return The root SVG node of the bubble's group.
271
- */
272
- getSvgRoot(): SVGElement {
273
- return this.bubbleGroup_ as SVGElement;
274
- }
275
-
276
- /**
277
- * Expose the block's ID on the bubble's top-level SVG group.
278
- * @param id ID of block.
279
- */
280
- setSvgId(id: string) {
281
- this.bubbleGroup_?.setAttribute('data-block-id', id);
282
- }
283
-
284
- /**
285
- * Handle a mouse-down on bubble's border.
286
- * @param e Mouse down event.
287
- */
288
- private bubbleMouseDown_(e: Event) {
289
- const gesture = this.workspace_.getGesture(e);
290
- if (gesture) {
291
- gesture.handleBubbleStart(e, this);
292
- }
293
- }
294
-
295
- /**
296
- * Show the context menu for this bubble.
297
- * @param _e Mouse event.
298
- * @internal
299
- */
300
- showContextMenu(_e: Event) {}
301
- // NOP on bubbles, but used by the bubble dragger to pass events to
302
- // workspace comments.
303
-
304
- /**
305
- * Get whether this bubble is deletable or not.
306
- * @return True if deletable.
307
- * @internal
308
- */
309
- isDeletable(): boolean {
310
- return false;
311
- }
312
-
313
- /**
314
- * Update the style of this bubble when it is dragged over a delete area.
315
- * @param _enable True if the bubble is about to be deleted, false otherwise.
316
- */
317
- setDeleteStyle(_enable: boolean) {}
318
- // NOP if bubble is not deletable.
319
-
320
- /**
321
- * Handle a mouse-down on bubble's resize corner.
322
- * @param e Mouse down event.
323
- */
324
- private resizeMouseDown_(e: MouseEvent) {
325
- this.promote();
326
- Bubble.unbindDragEvents_();
327
- if (browserEvents.isRightButton(e)) {
328
- // No right-click.
329
- e.stopPropagation();
330
- return;
331
- }
332
- // Left-click (or middle click)
333
- this.workspace_.startDrag(
334
- e,
335
- new Coordinate(
336
- this.workspace_.RTL ? -this.width_ : this.width_, this.height_));
337
-
338
- Bubble.onMouseUpWrapper_ = browserEvents.conditionalBind(
339
- document, 'mouseup', this, Bubble.bubbleMouseUp_);
340
- Bubble.onMouseMoveWrapper_ = browserEvents.conditionalBind(
341
- document, 'mousemove', this, this.resizeMouseMove_);
342
- this.workspace_.hideChaff();
343
- // This event has been handled. No need to bubble up to the document.
344
- e.stopPropagation();
345
- }
346
-
347
- /**
348
- * Resize this bubble to follow the mouse.
349
- * @param e Mouse move event.
350
- */
351
- private resizeMouseMove_(e: MouseEvent) {
352
- this.autoLayout_ = false;
353
- const newXY = this.workspace_.moveDrag(e);
354
- this.setBubbleSize(this.workspace_.RTL ? -newXY.x : newXY.x, newXY.y);
355
- if (this.workspace_.RTL) {
356
- // RTL requires the bubble to move its left edge.
357
- this.positionBubble_();
358
- }
359
- }
360
-
361
- /**
362
- * Register a function as a callback event for when the bubble is resized.
363
- * @param callback The function to call on resize.
364
- */
365
- registerResizeEvent(callback: () => void) {
366
- this.resizeCallback_ = callback;
367
- }
368
-
369
- /**
370
- * Register a function as a callback event for when the bubble is moved.
371
- * @param callback The function to call on move.
372
- */
373
- registerMoveEvent(callback: () => void) {
374
- this.moveCallback_ = callback;
375
- }
376
-
377
- /**
378
- * Move this bubble to the top of the stack.
379
- * @return Whether or not the bubble has been moved.
380
- * @internal
381
- */
382
- promote(): boolean {
383
- const svgGroup = this.bubbleGroup_?.parentNode;
384
- if (svgGroup?.lastChild !== this.bubbleGroup_ && this.bubbleGroup_) {
385
- svgGroup?.appendChild(this.bubbleGroup_);
386
- return true;
387
- }
388
- return false;
389
- }
390
-
391
- /**
392
- * Notification that the anchor has moved.
393
- * Update the arrow and bubble accordingly.
394
- * @param xy Absolute location.
395
- */
396
- setAnchorLocation(xy: Coordinate) {
397
- this.anchorXY_ = xy;
398
- if (this.rendered_) {
399
- this.positionBubble_();
400
- }
401
- }
402
-
403
- /** Position the bubble so that it does not fall off-screen. */
404
- private layoutBubble_() {
405
- // Get the metrics in workspace units.
406
- const viewMetrics =
407
- this.workspace_.getMetricsManager().getViewMetrics(true);
408
-
409
- const optimalLeft = this.getOptimalRelativeLeft_(viewMetrics);
410
- const optimalTop = this.getOptimalRelativeTop_(viewMetrics);
411
- const bbox = (this.shape_ as SVGGraphicsElement).getBBox();
412
-
413
- const topPosition = {
414
- x: optimalLeft,
415
- y: -this.height_ -
416
- this.workspace_.getRenderer().getConstants().MIN_BLOCK_HEIGHT as
417
- number,
418
- };
419
- const startPosition = {x: -this.width_ - 30, y: optimalTop};
420
- const endPosition = {x: bbox.width, y: optimalTop};
421
- const bottomPosition = {x: optimalLeft, y: bbox.height};
422
-
423
- const closerPosition =
424
- bbox.width < bbox.height ? endPosition : bottomPosition;
425
- const fartherPosition =
426
- bbox.width < bbox.height ? bottomPosition : endPosition;
427
-
428
- const topPositionOverlap = this.getOverlap_(topPosition, viewMetrics);
429
- const startPositionOverlap = this.getOverlap_(startPosition, viewMetrics);
430
- const closerPositionOverlap = this.getOverlap_(closerPosition, viewMetrics);
431
- const fartherPositionOverlap =
432
- this.getOverlap_(fartherPosition, viewMetrics);
433
-
434
- // Set the position to whichever position shows the most of the bubble,
435
- // with tiebreaks going in the order: top > start > close > far.
436
- const mostOverlap = Math.max(
437
- topPositionOverlap, startPositionOverlap, closerPositionOverlap,
438
- fartherPositionOverlap);
439
- if (topPositionOverlap === mostOverlap) {
440
- this.relativeLeft_ = topPosition.x;
441
- this.relativeTop_ = topPosition.y;
442
- return;
443
- }
444
- if (startPositionOverlap === mostOverlap) {
445
- this.relativeLeft_ = startPosition.x;
446
- this.relativeTop_ = startPosition.y;
447
- return;
448
- }
449
- if (closerPositionOverlap === mostOverlap) {
450
- this.relativeLeft_ = closerPosition.x;
451
- this.relativeTop_ = closerPosition.y;
452
- return;
453
- }
454
- // TODO: I believe relativeLeft_ should actually be called relativeStart_
455
- // and then the math should be fixed to reflect this. (hopefully it'll
456
- // make it look simpler)
457
- this.relativeLeft_ = fartherPosition.x;
458
- this.relativeTop_ = fartherPosition.y;
459
- }
460
-
461
- /**
462
- * Calculate the what percentage of the bubble overlaps with the visible
463
- * workspace (what percentage of the bubble is visible).
464
- * @param relativeMin The position of the top-left corner of the bubble
465
- * relative to the anchor point.
466
- * @param viewMetrics The view metrics of the workspace the bubble will appear
467
- * in.
468
- * @return The percentage of the bubble that is visible.
469
- */
470
- private getOverlap_(
471
- relativeMin: {x: number, y: number},
472
- viewMetrics: ContainerRegion): number {
473
- // The position of the top-left corner of the bubble in workspace units.
474
- const bubbleMin = {
475
- x: this.workspace_.RTL ? this.anchorXY_.x - relativeMin.x - this.width_ :
476
- relativeMin.x + this.anchorXY_.x,
477
- y: relativeMin.y + this.anchorXY_.y,
478
- };
479
- // The position of the bottom-right corner of the bubble in workspace units.
480
- const bubbleMax = {
481
- x: bubbleMin.x + this.width_,
482
- y: bubbleMin.y + this.height_,
483
- };
484
-
485
- // We could adjust these values to account for the scrollbars, but the
486
- // bubbles should have been adjusted to not collide with them anyway, so
487
- // giving the workspace a slightly larger "bounding box" shouldn't affect
488
- // the calculation.
489
-
490
- // The position of the top-left corner of the workspace.
491
- const workspaceMin = {x: viewMetrics.left, y: viewMetrics.top};
492
- // The position of the bottom-right corner of the workspace.
493
- const workspaceMax = {
494
- x: viewMetrics.left + viewMetrics.width,
495
- y: viewMetrics.top + viewMetrics.height,
496
- };
497
-
498
- const overlapWidth = Math.min(bubbleMax.x, workspaceMax.x) -
499
- Math.max(bubbleMin.x, workspaceMin.x);
500
- const overlapHeight = Math.min(bubbleMax.y, workspaceMax.y) -
501
- Math.max(bubbleMin.y, workspaceMin.y);
502
- return Math.max(
503
- 0,
504
- Math.min(
505
- 1, overlapWidth * overlapHeight / (this.width_ * this.height_)));
506
- }
507
-
508
- /**
509
- * Calculate what the optimal horizontal position of the top-left corner of
510
- * the bubble is (relative to the anchor point) so that the most area of the
511
- * bubble is shown.
512
- * @param viewMetrics The view metrics of the workspace the bubble will appear
513
- * in.
514
- * @return The optimal horizontal position of the top-left corner of the
515
- * bubble.
516
- */
517
- private getOptimalRelativeLeft_(viewMetrics: ContainerRegion): number {
518
- let relativeLeft = -this.width_ / 4;
519
-
520
- // No amount of sliding left or right will give us a better overlap.
521
- if (this.width_ > viewMetrics.width) {
522
- return relativeLeft;
523
- }
524
-
525
- if (this.workspace_.RTL) {
526
- // Bubble coordinates are flipped in RTL.
527
- const bubbleRight = this.anchorXY_.x - relativeLeft;
528
- const bubbleLeft = bubbleRight - this.width_;
529
-
530
- const workspaceRight = viewMetrics.left + viewMetrics.width;
531
- const workspaceLeft = viewMetrics.left +
532
- // Thickness in workspace units.
533
- Scrollbar.scrollbarThickness / this.workspace_.scale;
534
-
535
- if (bubbleLeft < workspaceLeft) {
536
- // Slide the bubble right until it is onscreen.
537
- relativeLeft = -(workspaceLeft - this.anchorXY_.x + this.width_);
538
- } else if (bubbleRight > workspaceRight) {
539
- // Slide the bubble left until it is onscreen.
540
- relativeLeft = -(workspaceRight - this.anchorXY_.x);
541
- }
542
- } else {
543
- const bubbleLeft = relativeLeft + this.anchorXY_.x;
544
- const bubbleRight = bubbleLeft + this.width_;
545
-
546
- const workspaceLeft = viewMetrics.left;
547
- const workspaceRight = viewMetrics.left + viewMetrics.width -
548
- // Thickness in workspace units.
549
- Scrollbar.scrollbarThickness / this.workspace_.scale;
550
-
551
- if (bubbleLeft < workspaceLeft) {
552
- // Slide the bubble right until it is onscreen.
553
- relativeLeft = workspaceLeft - this.anchorXY_.x;
554
- } else if (bubbleRight > workspaceRight) {
555
- // Slide the bubble left until it is onscreen.
556
- relativeLeft = workspaceRight - this.anchorXY_.x - this.width_;
557
- }
558
- }
559
-
560
- return relativeLeft;
561
- }
562
-
563
- /**
564
- * Calculate what the optimal vertical position of the top-left corner of
565
- * the bubble is (relative to the anchor point) so that the most area of the
566
- * bubble is shown.
567
- * @param viewMetrics The view metrics of the workspace the bubble will appear
568
- * in.
569
- * @return The optimal vertical position of the top-left corner of the bubble.
570
- */
571
- private getOptimalRelativeTop_(viewMetrics: ContainerRegion): number {
572
- let relativeTop = -this.height_ / 4;
573
-
574
- // No amount of sliding up or down will give us a better overlap.
575
- if (this.height_ > viewMetrics.height) {
576
- return relativeTop;
577
- }
578
-
579
- const bubbleTop = this.anchorXY_.y + relativeTop;
580
- const bubbleBottom = bubbleTop + this.height_;
581
- const workspaceTop = viewMetrics.top;
582
- const workspaceBottom = viewMetrics.top +
583
- viewMetrics.height - // Thickness in workspace units.
584
- Scrollbar.scrollbarThickness / this.workspace_.scale;
585
-
586
- const anchorY = this.anchorXY_.y;
587
- if (bubbleTop < workspaceTop) {
588
- // Slide the bubble down until it is onscreen.
589
- relativeTop = workspaceTop - anchorY;
590
- } else if (bubbleBottom > workspaceBottom) {
591
- // Slide the bubble up until it is onscreen.
592
- relativeTop = workspaceBottom - anchorY - this.height_;
593
- }
594
-
595
- return relativeTop;
596
- }
597
-
598
- /** Move the bubble to a location relative to the anchor's centre. */
599
- private positionBubble_() {
600
- let left = this.anchorXY_.x;
601
- if (this.workspace_.RTL) {
602
- left -= this.relativeLeft_ + this.width_;
603
- } else {
604
- left += this.relativeLeft_;
605
- }
606
- const top = this.relativeTop_ + this.anchorXY_.y;
607
- this.moveTo(left, top);
608
- }
609
-
610
- /**
611
- * Move the bubble group to the specified location in workspace coordinates.
612
- * @param x The x position to move to.
613
- * @param y The y position to move to.
614
- * @internal
615
- */
616
- moveTo(x: number, y: number) {
617
- this.bubbleGroup_?.setAttribute(
618
- 'transform', 'translate(' + x + ',' + y + ')');
619
- }
620
-
621
- /**
622
- * Triggers a move callback if one exists at the end of a drag.
623
- * @param adding True if adding, false if removing.
624
- * @internal
625
- */
626
- setDragging(adding: boolean) {
627
- if (!adding && this.moveCallback_) {
628
- this.moveCallback_();
629
- }
630
- }
631
-
632
- /**
633
- * Get the dimensions of this bubble.
634
- * @return The height and width of the bubble.
635
- */
636
- getBubbleSize(): Size {
637
- return new Size(this.width_, this.height_);
638
- }
639
-
640
- /**
641
- * Size this bubble.
642
- * @param width Width of the bubble.
643
- * @param height Height of the bubble.
644
- */
645
- setBubbleSize(width: number, height: number) {
646
- const doubleBorderWidth = 2 * Bubble.BORDER_WIDTH;
647
- // Minimum size of a bubble.
648
- width = Math.max(width, doubleBorderWidth + 45);
649
- height = Math.max(height, doubleBorderWidth + 20);
650
- this.width_ = width;
651
- this.height_ = height;
652
- this.bubbleBack_?.setAttribute('width', width.toString());
653
- this.bubbleBack_?.setAttribute('height', height.toString());
654
- if (this.resizeGroup_) {
655
- if (this.workspace_.RTL) {
656
- // Mirror the resize group.
657
- const resizeSize = 2 * Bubble.BORDER_WIDTH;
658
- this.resizeGroup_.setAttribute(
659
- 'transform',
660
- 'translate(' + resizeSize + ',' + (height - doubleBorderWidth) +
661
- ') scale(-1 1)');
662
- } else {
663
- this.resizeGroup_.setAttribute(
664
- 'transform',
665
- 'translate(' + (width - doubleBorderWidth) + ',' +
666
- (height - doubleBorderWidth) + ')');
667
- }
668
- }
669
- if (this.autoLayout_) {
670
- this.layoutBubble_();
671
- }
672
- this.positionBubble_();
673
- this.renderArrow_();
674
-
675
- // Allow the contents to resize.
676
- if (this.resizeCallback_) {
677
- this.resizeCallback_();
678
- }
679
- }
680
-
681
- /** Draw the arrow between the bubble and the origin. */
682
- private renderArrow_() {
683
- const steps = [];
684
- // Find the relative coordinates of the center of the bubble.
685
- const relBubbleX = this.width_ / 2;
686
- const relBubbleY = this.height_ / 2;
687
- // Find the relative coordinates of the center of the anchor.
688
- let relAnchorX = -this.relativeLeft_;
689
- let relAnchorY = -this.relativeTop_;
690
- if (relBubbleX === relAnchorX && relBubbleY === relAnchorY) {
691
- // Null case. Bubble is directly on top of the anchor.
692
- // Short circuit this rather than wade through divide by zeros.
693
- steps.push('M ' + relBubbleX + ',' + relBubbleY);
694
- } else {
695
- // Compute the angle of the arrow's line.
696
- const rise = relAnchorY - relBubbleY;
697
- let run = relAnchorX - relBubbleX;
698
- if (this.workspace_.RTL) {
699
- run *= -1;
700
- }
701
- const hypotenuse = Math.sqrt(rise * rise + run * run);
702
- let angle = Math.acos(run / hypotenuse);
703
- if (rise < 0) {
704
- angle = 2 * Math.PI - angle;
705
- }
706
- // Compute a line perpendicular to the arrow.
707
- let rightAngle = angle + Math.PI / 2;
708
- if (rightAngle > Math.PI * 2) {
709
- rightAngle -= Math.PI * 2;
710
- }
711
- const rightRise = Math.sin(rightAngle);
712
- const rightRun = Math.cos(rightAngle);
713
-
714
- // Calculate the thickness of the base of the arrow.
715
- const bubbleSize = this.getBubbleSize();
716
- let thickness =
717
- (bubbleSize.width + bubbleSize.height) / Bubble.ARROW_THICKNESS;
718
- thickness = Math.min(thickness, bubbleSize.width, bubbleSize.height) / 4;
719
-
720
- // Back the tip of the arrow off of the anchor.
721
- const backoffRatio = 1 - Bubble.ANCHOR_RADIUS / hypotenuse;
722
- relAnchorX = relBubbleX + backoffRatio * run;
723
- relAnchorY = relBubbleY + backoffRatio * rise;
724
-
725
- // Coordinates for the base of the arrow.
726
- const baseX1 = relBubbleX + thickness * rightRun;
727
- const baseY1 = relBubbleY + thickness * rightRise;
728
- const baseX2 = relBubbleX - thickness * rightRun;
729
- const baseY2 = relBubbleY - thickness * rightRise;
730
-
731
- // Distortion to curve the arrow.
732
- let swirlAngle = angle + this.arrow_radians_;
733
- if (swirlAngle > Math.PI * 2) {
734
- swirlAngle -= Math.PI * 2;
735
- }
736
- const swirlRise = Math.sin(swirlAngle) * hypotenuse / Bubble.ARROW_BEND;
737
- const swirlRun = Math.cos(swirlAngle) * hypotenuse / Bubble.ARROW_BEND;
738
-
739
- steps.push('M' + baseX1 + ',' + baseY1);
740
- steps.push(
741
- 'C' + (baseX1 + swirlRun) + ',' + (baseY1 + swirlRise) + ' ' +
742
- relAnchorX + ',' + relAnchorY + ' ' + relAnchorX + ',' + relAnchorY);
743
- steps.push(
744
- 'C' + relAnchorX + ',' + relAnchorY + ' ' + (baseX2 + swirlRun) +
745
- ',' + (baseY2 + swirlRise) + ' ' + baseX2 + ',' + baseY2);
746
- }
747
- steps.push('z');
748
- this.bubbleArrow_?.setAttribute('d', steps.join(' '));
749
- }
750
-
751
- /**
752
- * Change the colour of a bubble.
753
- * @param hexColour Hex code of colour.
754
- */
755
- setColour(hexColour: string) {
756
- this.bubbleBack_?.setAttribute('fill', hexColour);
757
- this.bubbleArrow_?.setAttribute('fill', hexColour);
758
- }
759
-
760
- /** Dispose of this bubble. */
761
- dispose() {
762
- if (this.onMouseDownBubbleWrapper_) {
763
- browserEvents.unbind(this.onMouseDownBubbleWrapper_);
764
- }
765
- if (this.onMouseDownResizeWrapper_) {
766
- browserEvents.unbind(this.onMouseDownResizeWrapper_);
767
- }
768
- Bubble.unbindDragEvents_();
769
- dom.removeNode(this.bubbleGroup_);
770
- this.disposed = true;
771
- }
772
-
773
- /**
774
- * Move this bubble during a drag, taking into account whether or not there is
775
- * a drag surface.
776
- * @param dragSurface The surface that carries rendered items during a drag,
777
- * or null if no drag surface is in use.
778
- * @param newLoc The location to translate to, in workspace coordinates.
779
- * @internal
780
- */
781
- moveDuringDrag(dragSurface: BlockDragSurfaceSvg, newLoc: Coordinate) {
782
- if (dragSurface) {
783
- dragSurface.translateSurface(newLoc.x, newLoc.y);
784
- } else {
785
- this.moveTo(newLoc.x, newLoc.y);
786
- }
787
- if (this.workspace_.RTL) {
788
- this.relativeLeft_ = this.anchorXY_.x - newLoc.x - this.width_;
789
- } else {
790
- this.relativeLeft_ = newLoc.x - this.anchorXY_.x;
791
- }
792
- this.relativeTop_ = newLoc.y - this.anchorXY_.y;
793
- this.renderArrow_();
794
- }
795
-
796
- /**
797
- * Return the coordinates of the top-left corner of this bubble's body
798
- * relative to the drawing surface's origin (0,0), in workspace units.
799
- * @return Object with .x and .y properties.
800
- */
801
- getRelativeToSurfaceXY(): Coordinate {
802
- return new Coordinate(
803
- this.workspace_.RTL ?
804
- -this.relativeLeft_ + this.anchorXY_.x - this.width_ :
805
- this.anchorXY_.x + this.relativeLeft_,
806
- this.anchorXY_.y + this.relativeTop_);
807
- }
808
-
809
- /**
810
- * Set whether auto-layout of this bubble is enabled. The first time a bubble
811
- * is shown it positions itself to not cover any blocks. Once a user has
812
- * dragged it to reposition, it renders where the user put it.
813
- * @param enable True if auto-layout should be enabled, false otherwise.
814
- * @internal
815
- */
816
- setAutoLayout(enable: boolean) {
817
- this.autoLayout_ = enable;
818
- }
819
-
820
- /** Stop binding to the global mouseup and mousemove events. */
821
- private static unbindDragEvents_() {
822
- if (Bubble.onMouseUpWrapper_) {
823
- browserEvents.unbind(Bubble.onMouseUpWrapper_);
824
- Bubble.onMouseUpWrapper_ = null;
825
- }
826
- if (Bubble.onMouseMoveWrapper_) {
827
- browserEvents.unbind(Bubble.onMouseMoveWrapper_);
828
- Bubble.onMouseMoveWrapper_ = null;
829
- }
830
- }
831
-
832
- /**
833
- * Handle a mouse-up event while dragging a bubble's border or resize handle.
834
- * @param _e Mouse up event.
835
- */
836
- private static bubbleMouseUp_(_e: MouseEvent) {
837
- Touch.clearTouchIdentifier();
838
- Bubble.unbindDragEvents_();
839
- }
840
-
841
- /**
842
- * Create the text for a non editable bubble.
843
- * @param text The text to display.
844
- * @return The top-level node of the text.
845
- * @internal
846
- */
847
- static textToDom(text: string): SVGTextElement {
848
- const paragraph = dom.createSvgElement(Svg.TEXT, {
849
- 'class': 'blocklyText blocklyBubbleText blocklyNoPointerEvents',
850
- 'y': Bubble.BORDER_WIDTH,
851
- });
852
- const lines = text.split('\n');
853
- for (let i = 0; i < lines.length; i++) {
854
- const tspanElement = dom.createSvgElement(
855
- Svg.TSPAN, {'dy': '1em', 'x': Bubble.BORDER_WIDTH}, paragraph);
856
- const textNode = document.createTextNode(lines[i]);
857
- tspanElement.appendChild(textNode);
858
- }
859
- return paragraph;
860
- }
861
-
862
- /**
863
- * Creates a bubble that can not be edited.
864
- * @param paragraphElement The text element for the non editable bubble.
865
- * @param block The block that the bubble is attached to.
866
- * @param iconXY The coordinate of the icon.
867
- * @return The non editable bubble.
868
- * @internal
869
- */
870
- static createNonEditableBubble(
871
- paragraphElement: SVGTextElement, block: BlockSvg,
872
- iconXY: Coordinate): Bubble {
873
- const bubble = new Bubble(
874
- block.workspace!, paragraphElement, block.pathObject.svgPath, (iconXY),
875
- null, null);
876
- // Expose this bubble's block's ID on its top-level SVG group.
877
- bubble.setSvgId(block.id);
878
- if (block.RTL) {
879
- // Right-align the paragraph.
880
- // This cannot be done until the bubble is rendered on screen.
881
- const maxWidth = paragraphElement.getBBox().width;
882
- for (let i = 0, textElement;
883
- textElement = paragraphElement.childNodes[i] as SVGTSpanElement;
884
- i++) {
885
- textElement.setAttribute('text-anchor', 'end');
886
- textElement.setAttribute(
887
- 'x', (maxWidth + Bubble.BORDER_WIDTH).toString());
888
- }
889
- }
890
- return bubble;
891
- }
892
- }