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
@@ -1,683 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2016 Massachusetts Institute of Technology
4
- * All rights reserved.
5
- * SPDX-License-Identifier: Apache-2.0
6
- */
7
-
8
- /**
9
- * @fileoverview A div that floats on top of the workspace, for drop-down menus.
10
- * The drop-down can be kept inside the workspace, animate in/out, etc.
11
- */
12
-
13
- /**
14
- * A div that floats on top of the workspace, for drop-down menus.
15
- * @class
16
- */
17
- import * as goog from '../closure/goog/goog.js';
18
- goog.declareModuleId('Blockly.dropDownDiv');
19
-
20
- import type {BlockSvg} from './block_svg.js';
21
- import * as common from './common.js';
22
- import type {Field} from './field.js';
23
- import * as dom from './utils/dom.js';
24
- import * as math from './utils/math.js';
25
- import {Rect} from './utils/rect.js';
26
- import type {Size} from './utils/size.js';
27
- import * as style from './utils/style.js';
28
- import type {WorkspaceSvg} from './workspace_svg.js';
29
-
30
-
31
- /**
32
- * Arrow size in px. Should match the value in CSS
33
- * (need to position pre-render).
34
- */
35
- export const ARROW_SIZE = 16;
36
-
37
- /**
38
- * Drop-down border size in px. Should match the value in CSS (need to position
39
- * the arrow).
40
- */
41
- export const BORDER_SIZE = 1;
42
-
43
- /**
44
- * Amount the arrow must be kept away from the edges of the main drop-down div,
45
- * in px.
46
- */
47
- export const ARROW_HORIZONTAL_PADDING = 12;
48
-
49
- /** Amount drop-downs should be padded away from the source, in px. */
50
- export const PADDING_Y = 16;
51
-
52
- /** Length of animations in seconds. */
53
- export const ANIMATION_TIME = 0.25;
54
-
55
- /**
56
- * Timer for animation out, to be cleared if we need to immediately hide
57
- * without disrupting new shows.
58
- */
59
- let animateOutTimer: AnyDuringMigration = null;
60
-
61
- /** Callback for when the drop-down is hidden. */
62
- let onHide: Function|null = null;
63
-
64
- /** A class name representing the current owner's workspace renderer. */
65
- let renderedClassName = '';
66
-
67
- /** A class name representing the current owner's workspace theme. */
68
- let themeClassName = '';
69
-
70
- /** The content element. */
71
- let div: HTMLDivElement;
72
-
73
- /** The content element. */
74
- let content: HTMLDivElement;
75
-
76
- /** The arrow element. */
77
- let arrow: HTMLDivElement;
78
-
79
- /**
80
- * Drop-downs will appear within the bounds of this element if possible.
81
- * Set in setBoundsElement.
82
- */
83
- let boundsElement: Element|null = null;
84
-
85
- /** The object currently using the drop-down. */
86
- let owner: AnyDuringMigration|null = null;
87
-
88
- /** Whether the dropdown was positioned to a field or the source block. */
89
- let positionToField: boolean|null = null;
90
-
91
- /**
92
- * Dropdown bounds info object used to encapsulate sizing information about a
93
- * bounding element (bounding box and width/height).
94
- */
95
- export interface BoundsInfo {
96
- top: number;
97
- left: number;
98
- bottom: number;
99
- right: number;
100
- width: number;
101
- height: number;
102
- }
103
-
104
- /** Dropdown position metrics. */
105
- export interface PositionMetrics {
106
- initialX: number;
107
- initialY: number;
108
- finalX: number;
109
- finalY: number;
110
- arrowX: number|null;
111
- arrowY: number|null;
112
- arrowAtTop: boolean|null;
113
- arrowVisible: boolean;
114
- }
115
-
116
- /**
117
- * Create and insert the DOM element for this div.
118
- * @internal
119
- */
120
- export function createDom() {
121
- if (div) {
122
- return; // Already created.
123
- }
124
- div = document.createElement('div');
125
- div.className = 'blocklyDropDownDiv';
126
- const parentDiv = common.getParentContainer() || document.body;
127
- parentDiv.appendChild(div);
128
-
129
- content = document.createElement('div');
130
- content.className = 'blocklyDropDownContent';
131
- div.appendChild(content);
132
-
133
- arrow = document.createElement('div');
134
- arrow.className = 'blocklyDropDownArrow';
135
- div.appendChild(arrow);
136
-
137
- // AnyDuringMigration because: Type 'number' is not assignable to type
138
- // 'string'.
139
- div.style.opacity = 0 as AnyDuringMigration;
140
- // Transition animation for transform: translate() and opacity.
141
- div.style.transition = 'transform ' + ANIMATION_TIME + 's, ' +
142
- 'opacity ' + ANIMATION_TIME + 's';
143
-
144
- // Handle focusin/out events to add a visual indicator when
145
- // a child is focused or blurred.
146
- div.addEventListener('focusin', function() {
147
- dom.addClass(div, 'blocklyFocused');
148
- });
149
- div.addEventListener('focusout', function() {
150
- dom.removeClass(div, 'blocklyFocused');
151
- });
152
- }
153
-
154
- /**
155
- * Set an element to maintain bounds within. Drop-downs will appear
156
- * within the box of this element if possible.
157
- * @param boundsElem Element to bind drop-down to.
158
- */
159
- export function setBoundsElement(boundsElem: Element|null) {
160
- boundsElement = boundsElem;
161
- }
162
-
163
- /**
164
- * Provide the div for inserting content into the drop-down.
165
- * @return Div to populate with content.
166
- */
167
- export function getContentDiv(): Element {
168
- return content;
169
- }
170
-
171
- /** Clear the content of the drop-down. */
172
- export function clearContent() {
173
- content.textContent = '';
174
- content.style.width = '';
175
- }
176
-
177
- /**
178
- * Set the colour for the drop-down.
179
- * @param backgroundColour Any CSS colour for the background.
180
- * @param borderColour Any CSS colour for the border.
181
- */
182
- export function setColour(backgroundColour: string, borderColour: string) {
183
- div.style.backgroundColor = backgroundColour;
184
- div.style.borderColor = borderColour;
185
- }
186
-
187
- /**
188
- * Shortcut to show and place the drop-down with positioning determined
189
- * by a particular block. The primary position will be below the block,
190
- * and the secondary position above the block. Drop-down will be
191
- * constrained to the block's workspace.
192
- * @param field The field showing the drop-down.
193
- * @param block Block to position the drop-down around.
194
- * @param opt_onHide Optional callback for when the drop-down is hidden.
195
- * @param opt_secondaryYOffset Optional Y offset for above-block positioning.
196
- * @return True if the menu rendered below block; false if above.
197
- */
198
- export function showPositionedByBlock(
199
- field: Field, block: BlockSvg, opt_onHide?: Function,
200
- opt_secondaryYOffset?: number): boolean {
201
- return showPositionedByRect(
202
- getScaledBboxOfBlock(block), field, opt_onHide, opt_secondaryYOffset);
203
- }
204
-
205
- /**
206
- * Shortcut to show and place the drop-down with positioning determined
207
- * by a particular field. The primary position will be below the field,
208
- * and the secondary position above the field. Drop-down will be
209
- * constrained to the block's workspace.
210
- * @param field The field to position the dropdown against.
211
- * @param opt_onHide Optional callback for when the drop-down is hidden.
212
- * @param opt_secondaryYOffset Optional Y offset for above-block positioning.
213
- * @return True if the menu rendered below block; false if above.
214
- */
215
- export function showPositionedByField(
216
- field: Field, opt_onHide?: Function,
217
- opt_secondaryYOffset?: number): boolean {
218
- positionToField = true;
219
- return showPositionedByRect(
220
- getScaledBboxOfField(field), field, opt_onHide, opt_secondaryYOffset);
221
- }
222
- /**
223
- * Get the scaled bounding box of a block.
224
- * @param block The block.
225
- * @return The scaled bounding box of the block.
226
- */
227
- function getScaledBboxOfBlock(block: BlockSvg): Rect {
228
- const blockSvg = block.getSvgRoot();
229
- const scale = block.workspace.scale;
230
- const scaledHeight = block.height * scale;
231
- const scaledWidth = block.width * scale;
232
- const xy = style.getPageOffset(blockSvg);
233
- return new Rect(xy.y, xy.y + scaledHeight, xy.x, xy.x + scaledWidth);
234
- }
235
-
236
- /**
237
- * Get the scaled bounding box of a field.
238
- * @param field The field.
239
- * @return The scaled bounding box of the field.
240
- */
241
- function getScaledBboxOfField(field: Field): Rect {
242
- const bBox = field.getScaledBBox();
243
- return new Rect(bBox.top, bBox.bottom, bBox.left, bBox.right);
244
- }
245
-
246
- /**
247
- * Helper method to show and place the drop-down with positioning determined
248
- * by a scaled bounding box. The primary position will be below the rect,
249
- * and the secondary position above the rect. Drop-down will be constrained to
250
- * the block's workspace.
251
- * @param bBox The scaled bounding box.
252
- * @param field The field to position the dropdown against.
253
- * @param opt_onHide Optional callback for when the drop-down is hidden.
254
- * @param opt_secondaryYOffset Optional Y offset for above-block positioning.
255
- * @return True if the menu rendered below block; false if above.
256
- */
257
- function showPositionedByRect(
258
- bBox: Rect, field: Field, opt_onHide?: Function,
259
- opt_secondaryYOffset?: number): boolean {
260
- // If we can fit it, render below the block.
261
- const primaryX = bBox.left + (bBox.right - bBox.left) / 2;
262
- const primaryY = bBox.bottom;
263
- // If we can't fit it, render above the entire parent block.
264
- const secondaryX = primaryX;
265
- let secondaryY = bBox.top;
266
- if (opt_secondaryYOffset) {
267
- secondaryY += opt_secondaryYOffset;
268
- }
269
- const sourceBlock = field.getSourceBlock() as BlockSvg;
270
- // Set bounds to main workspace; show the drop-down.
271
- let workspace = sourceBlock.workspace;
272
- while (workspace.options.parentWorkspace) {
273
- workspace = workspace.options.parentWorkspace;
274
- }
275
- setBoundsElement(workspace.getParentSvg().parentNode as Element | null);
276
- return show(
277
- field, sourceBlock.RTL, primaryX, primaryY, secondaryX, secondaryY,
278
- opt_onHide);
279
- }
280
-
281
- /**
282
- * Show and place the drop-down.
283
- * The drop-down is placed with an absolute "origin point" (x, y) - i.e.,
284
- * the arrow will point at this origin and box will positioned below or above
285
- * it. If we can maintain the container bounds at the primary point, the arrow
286
- * will point there, and the container will be positioned below it.
287
- * If we can't maintain the container bounds at the primary point, fall-back to
288
- * the secondary point and position above.
289
- * @param newOwner The object showing the drop-down
290
- * @param rtl Right-to-left (true) or left-to-right (false).
291
- * @param primaryX Desired origin point x, in absolute px.
292
- * @param primaryY Desired origin point y, in absolute px.
293
- * @param secondaryX Secondary/alternative origin point x, in absolute px.
294
- * @param secondaryY Secondary/alternative origin point y, in absolute px.
295
- * @param opt_onHide Optional callback for when the drop-down is hidden.
296
- * @return True if the menu rendered at the primary origin point.
297
- * @internal
298
- */
299
- export function show(
300
- newOwner: AnyDuringMigration|null, rtl: boolean, primaryX: number,
301
- primaryY: number, secondaryX: number, secondaryY: number,
302
- opt_onHide?: Function): boolean {
303
- owner = newOwner;
304
- onHide = opt_onHide || null;
305
- // Set direction.
306
- div.style.direction = rtl ? 'rtl' : 'ltr';
307
-
308
- const mainWorkspace = common.getMainWorkspace() as WorkspaceSvg;
309
- renderedClassName = mainWorkspace.getRenderer().getClassName();
310
- themeClassName = mainWorkspace.getTheme().getClassName();
311
- dom.addClass(div, renderedClassName);
312
- dom.addClass(div, themeClassName);
313
-
314
- // When we change `translate` multiple times in close succession,
315
- // Chrome may choose to wait and apply them all at once.
316
- // Since we want the translation to initial X, Y to be immediate,
317
- // and the translation to final X, Y to be animated,
318
- // we saw problems where both would be applied after animation was turned on,
319
- // making the dropdown appear to fly in from (0, 0).
320
- // Using both `left`, `top` for the initial translation and then `translate`
321
- // for the animated transition to final X, Y is a workaround.
322
- return positionInternal(primaryX, primaryY, secondaryX, secondaryY);
323
- }
324
-
325
- const internal = {};
326
-
327
- /**
328
- * Get sizing info about the bounding element.
329
- * @return An object containing size information about the bounding element
330
- * (bounding box and width/height).
331
- */
332
- // AnyDuringMigration because: Property 'getBoundsInfo' does not exist on type
333
- // '{}'.
334
- (internal as AnyDuringMigration).getBoundsInfo = function(): BoundsInfo {
335
- const boundPosition = style.getPageOffset(boundsElement as Element);
336
- const boundSize = style.getSize(boundsElement as Element);
337
-
338
- return {
339
- left: boundPosition.x,
340
- right: boundPosition.x + boundSize.width,
341
- top: boundPosition.y,
342
- bottom: boundPosition.y + boundSize.height,
343
- width: boundSize.width,
344
- height: boundSize.height,
345
- };
346
- };
347
-
348
- /**
349
- * Helper to position the drop-down and the arrow, maintaining bounds.
350
- * See explanation of origin points in show.
351
- * @param primaryX Desired origin point x, in absolute px.
352
- * @param primaryY Desired origin point y, in absolute px.
353
- * @param secondaryX Secondary/alternative origin point x, in absolute px.
354
- * @param secondaryY Secondary/alternative origin point y, in absolute px.
355
- * @return Various final metrics, including rendered positions for drop-down and
356
- * arrow.
357
- */
358
- // AnyDuringMigration because: Property 'getPositionMetrics' does not exist on
359
- // type '{}'.
360
- (internal as AnyDuringMigration).getPositionMetrics = function(
361
- primaryX: number, primaryY: number, secondaryX: number,
362
- secondaryY: number): PositionMetrics {
363
- // AnyDuringMigration because: Property 'getBoundsInfo' does not exist on
364
- // type '{}'.
365
- const boundsInfo = (internal as AnyDuringMigration).getBoundsInfo();
366
- const divSize = style.getSize(div as Element);
367
-
368
- // Can we fit in-bounds below the target?
369
- if (primaryY + divSize.height < boundsInfo.bottom) {
370
- return getPositionBelowMetrics(primaryX, primaryY, boundsInfo, divSize);
371
- }
372
- // Can we fit in-bounds above the target?
373
- if (secondaryY - divSize.height > boundsInfo.top) {
374
- return getPositionAboveMetrics(secondaryX, secondaryY, boundsInfo, divSize);
375
- }
376
- // Can we fit outside the workspace bounds (but inside the window) below?
377
- if (primaryY + divSize.height < document.documentElement.clientHeight) {
378
- return getPositionBelowMetrics(primaryX, primaryY, boundsInfo, divSize);
379
- }
380
- // Can we fit outside the workspace bounds (but inside the window) above?
381
- if (secondaryY - divSize.height > document.documentElement.clientTop) {
382
- return getPositionAboveMetrics(secondaryX, secondaryY, boundsInfo, divSize);
383
- }
384
-
385
- // Last resort, render at top of page.
386
- return getPositionTopOfPageMetrics(primaryX, boundsInfo, divSize);
387
- };
388
-
389
- /**
390
- * Get the metrics for positioning the div below the source.
391
- * @param primaryX Desired origin point x, in absolute px.
392
- * @param primaryY Desired origin point y, in absolute px.
393
- * @param boundsInfo An object containing size information about the bounding
394
- * element (bounding box and width/height).
395
- * @param divSize An object containing information about the size of the
396
- * DropDownDiv (width & height).
397
- * @return Various final metrics, including rendered positions for drop-down and
398
- * arrow.
399
- */
400
- function getPositionBelowMetrics(
401
- primaryX: number, primaryY: number, boundsInfo: BoundsInfo,
402
- divSize: Size): PositionMetrics {
403
- const xCoords =
404
- getPositionX(primaryX, boundsInfo.left, boundsInfo.right, divSize.width);
405
-
406
- const arrowY = -(ARROW_SIZE / 2 + BORDER_SIZE);
407
- const finalY = primaryY + PADDING_Y;
408
-
409
- return {
410
- initialX: xCoords.divX,
411
- initialY: primaryY,
412
- finalX: xCoords.divX, // X position remains constant during animation.
413
- finalY,
414
- arrowX: xCoords.arrowX,
415
- arrowY,
416
- arrowAtTop: true,
417
- arrowVisible: true,
418
- };
419
- }
420
-
421
- /**
422
- * Get the metrics for positioning the div above the source.
423
- * @param secondaryX Secondary/alternative origin point x, in absolute px.
424
- * @param secondaryY Secondary/alternative origin point y, in absolute px.
425
- * @param boundsInfo An object containing size information about the bounding
426
- * element (bounding box and width/height).
427
- * @param divSize An object containing information about the size of the
428
- * DropDownDiv (width & height).
429
- * @return Various final metrics, including rendered positions for drop-down and
430
- * arrow.
431
- */
432
- function getPositionAboveMetrics(
433
- secondaryX: number, secondaryY: number, boundsInfo: BoundsInfo,
434
- divSize: Size): PositionMetrics {
435
- const xCoords = getPositionX(
436
- secondaryX, boundsInfo.left, boundsInfo.right, divSize.width);
437
-
438
- const arrowY = divSize.height - BORDER_SIZE * 2 - ARROW_SIZE / 2;
439
- const finalY = secondaryY - divSize.height - PADDING_Y;
440
- const initialY = secondaryY - divSize.height; // No padding on Y.
441
-
442
- return {
443
- initialX: xCoords.divX,
444
- initialY,
445
- finalX: xCoords.divX, // X position remains constant during animation.
446
- finalY,
447
- arrowX: xCoords.arrowX,
448
- arrowY,
449
- arrowAtTop: false,
450
- arrowVisible: true,
451
- };
452
- }
453
-
454
- /**
455
- * Get the metrics for positioning the div at the top of the page.
456
- * @param sourceX Desired origin point x, in absolute px.
457
- * @param boundsInfo An object containing size information about the bounding
458
- * element (bounding box and width/height).
459
- * @param divSize An object containing information about the size of the
460
- * DropDownDiv (width & height).
461
- * @return Various final metrics, including rendered positions for drop-down and
462
- * arrow.
463
- */
464
- function getPositionTopOfPageMetrics(
465
- sourceX: number, boundsInfo: BoundsInfo, divSize: Size): PositionMetrics {
466
- const xCoords =
467
- getPositionX(sourceX, boundsInfo.left, boundsInfo.right, divSize.width);
468
-
469
- // No need to provide arrow-specific information because it won't be visible.
470
- return {
471
- initialX: xCoords.divX,
472
- initialY: 0,
473
- finalX: xCoords.divX, // X position remains constant during animation.
474
- finalY: 0, // Y position remains constant during animation.
475
- arrowAtTop: null,
476
- arrowX: null,
477
- arrowY: null,
478
- arrowVisible: false,
479
- };
480
- }
481
-
482
- /**
483
- * Get the x positions for the left side of the DropDownDiv and the arrow,
484
- * accounting for the bounds of the workspace.
485
- * @param sourceX Desired origin point x, in absolute px.
486
- * @param boundsLeft The left edge of the bounding element, in absolute px.
487
- * @param boundsRight The right edge of the bounding element, in absolute px.
488
- * @param divWidth The width of the div in px.
489
- * @return An object containing metrics for the x positions of the left side of
490
- * the DropDownDiv and the arrow.
491
- * @internal
492
- */
493
- export function getPositionX(
494
- sourceX: number, boundsLeft: number, boundsRight: number,
495
- divWidth: number): {divX: number, arrowX: number} {
496
- let divX = sourceX;
497
- // Offset the topLeft coord so that the dropdowndiv is centered.
498
- divX -= divWidth / 2;
499
- // Fit the dropdowndiv within the bounds of the workspace.
500
- divX = math.clamp(boundsLeft, divX, boundsRight - divWidth);
501
-
502
- let arrowX = sourceX;
503
- // Offset the arrow coord so that the arrow is centered.
504
- arrowX -= ARROW_SIZE / 2;
505
- // Convert the arrow position to be relative to the top left of the div.
506
- let relativeArrowX = arrowX - divX;
507
- const horizPadding = ARROW_HORIZONTAL_PADDING;
508
- // Clamp the arrow position so that it stays attached to the dropdowndiv.
509
- relativeArrowX = math.clamp(
510
- horizPadding, relativeArrowX, divWidth - horizPadding - ARROW_SIZE);
511
-
512
- return {arrowX: relativeArrowX, divX};
513
- }
514
-
515
- /**
516
- * Is the container visible?
517
- * @return True if visible.
518
- */
519
- export function isVisible(): boolean {
520
- return !!owner;
521
- }
522
-
523
- /**
524
- * Hide the menu only if it is owned by the provided object.
525
- * @param divOwner Object which must be owning the drop-down to hide.
526
- * @param opt_withoutAnimation True if we should hide the dropdown without
527
- * animating.
528
- * @return True if hidden.
529
- */
530
- export function hideIfOwner(
531
- divOwner: AnyDuringMigration|null,
532
- opt_withoutAnimation?: boolean): boolean {
533
- if (owner === divOwner) {
534
- if (opt_withoutAnimation) {
535
- hideWithoutAnimation();
536
- } else {
537
- hide();
538
- }
539
- return true;
540
- }
541
- return false;
542
- }
543
-
544
- /** Hide the menu, triggering animation. */
545
- export function hide() {
546
- // Start the animation by setting the translation and fading out.
547
- // Reset to (initialX, initialY) - i.e., no translation.
548
- div.style.transform = 'translate(0, 0)';
549
- // AnyDuringMigration because: Type 'number' is not assignable to type
550
- // 'string'.
551
- div.style.opacity = 0 as AnyDuringMigration;
552
- // Finish animation - reset all values to default.
553
- animateOutTimer = setTimeout(function() {
554
- hideWithoutAnimation();
555
- }, ANIMATION_TIME * 1000);
556
- if (onHide) {
557
- onHide();
558
- onHide = null;
559
- }
560
- }
561
-
562
- /** Hide the menu, without animation. */
563
- export function hideWithoutAnimation() {
564
- if (!isVisible()) {
565
- return;
566
- }
567
- if (animateOutTimer) {
568
- clearTimeout(animateOutTimer);
569
- }
570
-
571
- // Reset style properties in case this gets called directly
572
- // instead of hide() - see discussion on #2551.
573
- div.style.transform = '';
574
- div.style.left = '';
575
- div.style.top = '';
576
- // AnyDuringMigration because: Type 'number' is not assignable to type
577
- // 'string'.
578
- div.style.opacity = 0 as AnyDuringMigration;
579
- div.style.display = 'none';
580
- div.style.backgroundColor = '';
581
- div.style.borderColor = '';
582
-
583
- if (onHide) {
584
- onHide();
585
- onHide = null;
586
- }
587
- clearContent();
588
- owner = null;
589
-
590
- if (renderedClassName) {
591
- dom.removeClass(div, renderedClassName);
592
- renderedClassName = '';
593
- }
594
- if (themeClassName) {
595
- dom.removeClass(div, themeClassName);
596
- themeClassName = '';
597
- }
598
- (common.getMainWorkspace() as WorkspaceSvg).markFocused();
599
- }
600
-
601
- /**
602
- * Set the dropdown div's position.
603
- * @param primaryX Desired origin point x, in absolute px.
604
- * @param primaryY Desired origin point y, in absolute px.
605
- * @param secondaryX Secondary/alternative origin point x, in absolute px.
606
- * @param secondaryY Secondary/alternative origin point y, in absolute px.
607
- * @return True if the menu rendered at the primary origin point.
608
- */
609
- function positionInternal(
610
- primaryX: number, primaryY: number, secondaryX: number,
611
- secondaryY: number): boolean {
612
- // AnyDuringMigration because: Property 'getPositionMetrics' does not exist
613
- // on type '{}'.
614
- const metrics =
615
- (internal as AnyDuringMigration)
616
- .getPositionMetrics(primaryX, primaryY, secondaryX, secondaryY);
617
-
618
- // Update arrow CSS.
619
- if (metrics.arrowVisible) {
620
- arrow.style.display = '';
621
- arrow.style.transform = 'translate(' + metrics.arrowX + 'px,' +
622
- metrics.arrowY + 'px) rotate(45deg)';
623
- arrow.setAttribute(
624
- 'class',
625
- metrics.arrowAtTop ? 'blocklyDropDownArrow blocklyArrowTop' :
626
- 'blocklyDropDownArrow blocklyArrowBottom');
627
- } else {
628
- arrow.style.display = 'none';
629
- }
630
-
631
- const initialX = Math.floor(metrics.initialX);
632
- const initialY = Math.floor(metrics.initialY);
633
- const finalX = Math.floor(metrics.finalX);
634
- const finalY = Math.floor(metrics.finalY);
635
-
636
- // First apply initial translation.
637
- div.style.left = initialX + 'px';
638
- div.style.top = initialY + 'px';
639
-
640
- // Show the div.
641
- div.style.display = 'block';
642
- // AnyDuringMigration because: Type 'number' is not assignable to type
643
- // 'string'.
644
- div.style.opacity = 1 as AnyDuringMigration;
645
- // Add final translate, animated through `transition`.
646
- // Coordinates are relative to (initialX, initialY),
647
- // where the drop-down is absolutely positioned.
648
- const dx = finalX - initialX;
649
- const dy = finalY - initialY;
650
- div.style.transform = 'translate(' + dx + 'px,' + dy + 'px)';
651
-
652
- return !!metrics.arrowAtTop;
653
- }
654
-
655
- /**
656
- * Repositions the dropdownDiv on window resize. If it doesn't know how to
657
- * calculate the new position, it will just hide it instead.
658
- * @internal
659
- */
660
- export function repositionForWindowResize() {
661
- // This condition mainly catches the dropdown div when it is being used as a
662
- // dropdown. It is important not to close it in this case because on Android,
663
- // when a field is focused, the soft keyboard opens triggering a window resize
664
- // event and we want the dropdown div to stick around so users can type into
665
- // it.
666
- if (owner) {
667
- const field = owner as Field;
668
- const block = field.getSourceBlock() as BlockSvg;
669
- const bBox = positionToField ? getScaledBboxOfField(field) :
670
- getScaledBboxOfBlock(block);
671
- // If we can fit it, render below the block.
672
- const primaryX = bBox.left + (bBox.right - bBox.left) / 2;
673
- const primaryY = bBox.bottom;
674
- // If we can't fit it, render above the entire parent block.
675
- const secondaryX = primaryX;
676
- const secondaryY = bBox.top;
677
- positionInternal(primaryX, primaryY, secondaryX, secondaryY);
678
- } else {
679
- hide();
680
- }
681
- }
682
-
683
- export const TEST_ONLY = internal;