blockly 9.0.0-beta.0 → 9.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (736) hide show
  1. package/blockly.min.js +830 -810
  2. package/blockly_compressed.js +821 -801
  3. package/blockly_compressed.js.map +1 -1
  4. package/blocks.d.ts +0 -5
  5. package/blocks_compressed.js +9 -9
  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 +156 -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 +92 -24
  16. package/core/blockly.d.ts +31 -10
  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 +51 -24
  42. package/core/events/events_abstract.d.ts +18 -7
  43. package/core/events/events_block_base.d.ts +13 -7
  44. package/core/events/events_block_change.d.ts +24 -11
  45. package/core/events/events_block_create.d.ts +18 -7
  46. package/core/events/events_block_delete.d.ts +20 -8
  47. package/core/events/events_block_drag.d.ts +14 -4
  48. package/core/events/events_block_move.d.ts +25 -12
  49. package/core/events/events_bubble_open.d.ts +21 -6
  50. package/core/events/events_click.d.ts +20 -6
  51. package/core/events/events_comment_base.d.ts +13 -6
  52. package/core/events/events_comment_change.d.ts +17 -7
  53. package/core/events/events_comment_create.d.ts +13 -5
  54. package/core/events/events_comment_delete.d.ts +4 -11
  55. package/core/events/events_comment_move.d.ts +19 -8
  56. package/core/events/events_marker_move.d.ts +16 -5
  57. package/core/events/events_selected.d.ts +14 -5
  58. package/core/events/events_theme_change.d.ts +11 -3
  59. package/core/events/events_toolbox_item_select.d.ts +14 -5
  60. package/core/events/events_trashcan_open.d.ts +11 -3
  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 +13 -7
  64. package/core/events/events_var_create.d.ts +15 -6
  65. package/core/events/events_var_delete.d.ts +15 -6
  66. package/core/events/events_var_rename.d.ts +15 -6
  67. package/core/events/events_viewport.d.ts +14 -3
  68. package/core/events/utils.d.ts +50 -7
  69. package/core/events/workspace_events.d.ts +11 -6
  70. package/core/extensions.d.ts +14 -4
  71. package/core/field.d.ts +93 -36
  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 +56 -22
  91. package/core/grid.d.ts +20 -16
  92. package/core/icon.d.ts +18 -5
  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 +3 -1
  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 +25 -6
  135. package/core/menuitem.d.ts +22 -7
  136. package/core/metrics_manager.d.ts +30 -15
  137. package/core/msg.d.ts +15 -0
  138. package/core/mutator.d.ts +20 -8
  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 +29 -7
  145. package/core/renderers/common/block_rendering.d.ts +9 -2
  146. package/core/renderers/common/constants.d.ts +57 -18
  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 +16 -3
  150. package/core/renderers/common/i_path_object.d.ts +37 -16
  151. package/core/renderers/common/info.d.ts +28 -11
  152. package/core/renderers/common/marker_svg.d.ts +42 -11
  153. package/core/renderers/common/path_object.d.ts +23 -3
  154. package/core/renderers/common/renderer.d.ts +33 -12
  155. package/core/renderers/geras/constants.d.ts +6 -2
  156. package/core/renderers/geras/drawer.d.ts +4 -1
  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 -1
  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 +4 -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 +30 -8
  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 -4
  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 +5 -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 +5 -4
  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 +31 -44
  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 -1
  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 +9 -2
  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 +41 -30
  221. package/core/theme_manager.d.ts +10 -1
  222. package/core/toolbox/category.d.ts +60 -32
  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 +71 -23
  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 +19 -4
  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 +19 -9
  235. package/core/utils/deprecation.d.ts +6 -4
  236. package/core/utils/dom.d.ts +37 -18
  237. package/core/utils/idgenerator.d.ts +14 -4
  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 +17 -7
  270. package/core-browser.js +0 -6
  271. package/core.d.ts +0 -5
  272. package/core.js +0 -6
  273. package/dart.d.ts +1 -7
  274. package/dart_compressed.js.map +1 -1
  275. package/index.d.ts +2 -6
  276. package/javascript.d.ts +1 -7
  277. package/javascript_compressed.js.map +1 -1
  278. package/lua.d.ts +1 -7
  279. package/lua_compressed.js.map +1 -1
  280. package/msg/ab.d.ts +8 -0
  281. package/msg/ace.d.ts +8 -0
  282. package/msg/af.d.ts +8 -0
  283. package/msg/am.d.ts +8 -0
  284. package/msg/ar.d.ts +8 -0
  285. package/msg/ast.d.ts +8 -0
  286. package/msg/az.d.ts +8 -0
  287. package/msg/ba.d.ts +8 -0
  288. package/msg/bcc.d.ts +8 -0
  289. package/msg/be-tarask.d.ts +8 -0
  290. package/msg/be.d.ts +8 -0
  291. package/msg/bg.d.ts +8 -0
  292. package/msg/bn.d.ts +8 -0
  293. package/msg/br.d.ts +8 -0
  294. package/msg/bs.d.ts +8 -0
  295. package/msg/ca.d.ts +8 -0
  296. package/msg/cdo.d.ts +8 -0
  297. package/msg/constants.d.ts +16 -0
  298. package/msg/cs.d.ts +8 -0
  299. package/msg/da.d.ts +8 -0
  300. package/msg/de.d.ts +8 -0
  301. package/msg/diq.d.ts +8 -0
  302. package/msg/dty.d.ts +8 -0
  303. package/msg/ee.d.ts +8 -0
  304. package/msg/el.d.ts +8 -0
  305. package/msg/en-gb.d.ts +8 -0
  306. package/msg/en.d.ts +8 -0
  307. package/msg/eo.d.ts +8 -0
  308. package/msg/es.d.ts +8 -0
  309. package/msg/et.d.ts +8 -0
  310. package/msg/eu.d.ts +8 -0
  311. package/msg/fa.d.ts +8 -0
  312. package/msg/fi.d.ts +8 -0
  313. package/msg/fo.d.ts +8 -0
  314. package/msg/fr.d.ts +8 -0
  315. package/msg/frr.d.ts +8 -0
  316. package/msg/gl.d.ts +8 -0
  317. package/msg/gn.d.ts +8 -0
  318. package/msg/gor.d.ts +8 -0
  319. package/msg/ha.d.ts +8 -0
  320. package/msg/hak.d.ts +8 -0
  321. package/msg/he.d.ts +8 -0
  322. package/msg/hi.d.ts +8 -0
  323. package/msg/hr.d.ts +8 -0
  324. package/msg/hrx.d.ts +8 -0
  325. package/msg/hu.d.ts +8 -0
  326. package/msg/hy.d.ts +8 -0
  327. package/msg/ia.d.ts +8 -0
  328. package/msg/id.d.ts +8 -0
  329. package/msg/ig.d.ts +8 -0
  330. package/msg/inh.d.ts +8 -0
  331. package/msg/is.d.ts +8 -0
  332. package/msg/it.d.ts +8 -0
  333. package/msg/ja.d.ts +8 -0
  334. package/msg/ka.d.ts +8 -0
  335. package/msg/kab.d.ts +8 -0
  336. package/msg/kbd-cyrl.d.ts +8 -0
  337. package/msg/km.d.ts +8 -0
  338. package/msg/kn.d.ts +8 -0
  339. package/msg/ko.d.ts +8 -0
  340. package/msg/ksh.d.ts +8 -0
  341. package/msg/ku-latn.d.ts +8 -0
  342. package/msg/ky.d.ts +8 -0
  343. package/msg/la.d.ts +8 -0
  344. package/msg/lb.d.ts +8 -0
  345. package/msg/lki.d.ts +8 -0
  346. package/msg/lo.d.ts +8 -0
  347. package/msg/lrc.d.ts +8 -0
  348. package/msg/lt.d.ts +8 -0
  349. package/msg/lv.d.ts +8 -0
  350. package/msg/mg.d.ts +8 -0
  351. package/msg/mk.d.ts +8 -0
  352. package/msg/ml.d.ts +8 -0
  353. package/msg/mnw.d.ts +8 -0
  354. package/msg/ms.d.ts +8 -0
  355. package/msg/msg.d.ts +429 -432
  356. package/msg/my.d.ts +8 -0
  357. package/msg/mzn.d.ts +8 -0
  358. package/msg/nb.d.ts +8 -0
  359. package/msg/ne.d.ts +8 -0
  360. package/msg/nl.d.ts +8 -0
  361. package/msg/oc.d.ts +8 -0
  362. package/msg/olo.d.ts +8 -0
  363. package/msg/pa.d.ts +8 -0
  364. package/msg/pl.d.ts +8 -0
  365. package/msg/pms.d.ts +8 -0
  366. package/msg/ps.d.ts +8 -0
  367. package/msg/pt-br.d.ts +8 -0
  368. package/msg/pt.d.ts +8 -0
  369. package/msg/qqq.d.ts +16 -0
  370. package/msg/ro.d.ts +8 -0
  371. package/msg/ru.d.ts +8 -0
  372. package/msg/sc.d.ts +8 -0
  373. package/msg/sco.d.ts +8 -0
  374. package/msg/sd.d.ts +8 -0
  375. package/msg/shn.d.ts +8 -0
  376. package/msg/si.d.ts +8 -0
  377. package/msg/sk.d.ts +8 -0
  378. package/msg/skr-arab.d.ts +8 -0
  379. package/msg/sl.d.ts +8 -0
  380. package/msg/smn.d.ts +8 -0
  381. package/msg/sq.d.ts +8 -0
  382. package/msg/sr-latn.d.ts +8 -0
  383. package/msg/sr.d.ts +8 -0
  384. package/msg/sv.d.ts +8 -0
  385. package/msg/sw.d.ts +8 -0
  386. package/msg/synonyms.d.ts +16 -0
  387. package/msg/ta.d.ts +8 -0
  388. package/msg/tcy.d.ts +8 -0
  389. package/msg/te.d.ts +8 -0
  390. package/msg/th.d.ts +8 -0
  391. package/msg/ti.d.ts +8 -0
  392. package/msg/tl.d.ts +8 -0
  393. package/msg/tlh.d.ts +8 -0
  394. package/msg/tr.d.ts +8 -0
  395. package/msg/ug-arab.d.ts +8 -0
  396. package/msg/uk.d.ts +8 -0
  397. package/msg/ur.d.ts +8 -0
  398. package/msg/uz.d.ts +8 -0
  399. package/msg/vi.d.ts +8 -0
  400. package/msg/xmf.d.ts +8 -0
  401. package/msg/yo.d.ts +8 -0
  402. package/msg/yue.d.ts +8 -0
  403. package/msg/zgh.d.ts +8 -0
  404. package/msg/zh-hans.d.ts +8 -0
  405. package/msg/zh-hant.d.ts +8 -0
  406. package/package.json +6 -3
  407. package/php.d.ts +1 -7
  408. package/php_compressed.js.map +1 -1
  409. package/python.d.ts +1 -7
  410. package/python_compressed.js.map +1 -1
  411. package/blocks/blocks.js +0 -48
  412. package/blocks/colour.js +0 -121
  413. package/blocks/lists.js +0 -996
  414. package/blocks/logic.js +0 -665
  415. package/blocks/loops.js +0 -375
  416. package/blocks/math.js +0 -594
  417. package/blocks/procedures.js +0 -1196
  418. package/blocks/text.js +0 -1000
  419. package/blocks/variables.js +0 -176
  420. package/blocks/variables_dynamic.js +0 -192
  421. package/core/any_aliases.ts +0 -1
  422. package/core/block.ts +0 -2102
  423. package/core/block_animations.ts +0 -202
  424. package/core/block_drag_surface.ts +0 -237
  425. package/core/block_dragger.ts +0 -447
  426. package/core/block_svg.ts +0 -1758
  427. package/core/blockly.js +0 -890
  428. package/core/blockly.ts +0 -749
  429. package/core/blockly_options.ts +0 -81
  430. package/core/blocks.ts +0 -29
  431. package/core/browser_events.ts +0 -289
  432. package/core/bubble.ts +0 -892
  433. package/core/bubble_dragger.ts +0 -229
  434. package/core/bump_objects.ts +0 -182
  435. package/core/clipboard.ts +0 -91
  436. package/core/comment.ts +0 -398
  437. package/core/common.ts +0 -288
  438. package/core/component_manager.ts +0 -211
  439. package/core/config.ts +0 -80
  440. package/core/connection.ts +0 -692
  441. package/core/connection_checker.ts +0 -301
  442. package/core/connection_db.ts +0 -289
  443. package/core/connection_type.ts +0 -32
  444. package/core/constants.ts +0 -29
  445. package/core/contextmenu.ts +0 -363
  446. package/core/contextmenu_items.ts +0 -576
  447. package/core/contextmenu_registry.ts +0 -179
  448. package/core/css.ts +0 -560
  449. package/core/delete_area.ts +0 -82
  450. package/core/dialog.ts +0 -127
  451. package/core/drag_target.ts +0 -94
  452. package/core/dropdowndiv.ts +0 -683
  453. package/core/events/events.ts +0 -123
  454. package/core/events/events_abstract.ts +0 -112
  455. package/core/events/events_block_base.ts +0 -65
  456. package/core/events/events_block_change.ts +0 -176
  457. package/core/events/events_block_create.ts +0 -114
  458. package/core/events/events_block_delete.ts +0 -126
  459. package/core/events/events_block_drag.ts +0 -82
  460. package/core/events/events_block_move.ts +0 -206
  461. package/core/events/events_bubble_open.ts +0 -82
  462. package/core/events/events_click.ts +0 -84
  463. package/core/events/events_comment_base.ts +0 -107
  464. package/core/events/events_comment_change.ts +0 -108
  465. package/core/events/events_comment_create.ts +0 -82
  466. package/core/events/events_comment_delete.ts +0 -77
  467. package/core/events/events_comment_move.ts +0 -154
  468. package/core/events/events_marker_move.ts +0 -99
  469. package/core/events/events_selected.ts +0 -78
  470. package/core/events/events_theme_change.ts +0 -67
  471. package/core/events/events_toolbox_item_select.ts +0 -79
  472. package/core/events/events_trashcan_open.ts +0 -68
  473. package/core/events/events_ui.ts +0 -89
  474. package/core/events/events_ui_base.ts +0 -54
  475. package/core/events/events_var_base.ts +0 -65
  476. package/core/events/events_var_create.ts +0 -88
  477. package/core/events/events_var_delete.ts +0 -88
  478. package/core/events/events_var_rename.ts +0 -89
  479. package/core/events/events_viewport.ts +0 -100
  480. package/core/events/utils.ts +0 -529
  481. package/core/events/workspace_events.ts +0 -86
  482. package/core/extensions.ts +0 -504
  483. package/core/field.ts +0 -1206
  484. package/core/field_angle.ts +0 -563
  485. package/core/field_checkbox.ts +0 -243
  486. package/core/field_colour.ts +0 -632
  487. package/core/field_dropdown.ts +0 -773
  488. package/core/field_image.ts +0 -282
  489. package/core/field_label.ts +0 -152
  490. package/core/field_label_serializable.ts +0 -76
  491. package/core/field_multilineinput.ts +0 -466
  492. package/core/field_number.ts +0 -327
  493. package/core/field_registry.ts +0 -87
  494. package/core/field_textinput.ts +0 -591
  495. package/core/field_variable.ts +0 -545
  496. package/core/flyout_base.ts +0 -1165
  497. package/core/flyout_button.ts +0 -292
  498. package/core/flyout_horizontal.ts +0 -381
  499. package/core/flyout_metrics_manager.ts +0 -94
  500. package/core/flyout_vertical.ts +0 -384
  501. package/core/generator.ts +0 -539
  502. package/core/gesture.ts +0 -946
  503. package/core/grid.ts +0 -192
  504. package/core/icon.ts +0 -189
  505. package/core/inject.ts +0 -390
  506. package/core/input.ts +0 -309
  507. package/core/input_types.ts +0 -32
  508. package/core/insertion_marker_manager.ts +0 -788
  509. package/core/interfaces/i_ast_node_location.ts +0 -23
  510. package/core/interfaces/i_ast_node_location_svg.ts +0 -37
  511. package/core/interfaces/i_ast_node_location_with_block.ts +0 -38
  512. package/core/interfaces/i_autohideable.ts +0 -34
  513. package/core/interfaces/i_block_dragger.ts +0 -67
  514. package/core/interfaces/i_bounded_element.ts +0 -42
  515. package/core/interfaces/i_bubble.ts +0 -88
  516. package/core/interfaces/i_collapsible_toolbox_item.ts +0 -47
  517. package/core/interfaces/i_component.ts +0 -32
  518. package/core/interfaces/i_connection_checker.ts +0 -102
  519. package/core/interfaces/i_contextmenu.ts +0 -26
  520. package/core/interfaces/i_copyable.ts +0 -40
  521. package/core/interfaces/i_deletable.ts +0 -29
  522. package/core/interfaces/i_delete_area.ts +0 -46
  523. package/core/interfaces/i_drag_target.ts +0 -84
  524. package/core/interfaces/i_draggable.ts +0 -25
  525. package/core/interfaces/i_flyout.ts +0 -186
  526. package/core/interfaces/i_keyboard_accessible.ts +0 -35
  527. package/core/interfaces/i_metrics_manager.ts +0 -151
  528. package/core/interfaces/i_movable.ts +0 -29
  529. package/core/interfaces/i_positionable.ts +0 -50
  530. package/core/interfaces/i_registrable.ts +0 -25
  531. package/core/interfaces/i_registrable_field.ts +0 -31
  532. package/core/interfaces/i_selectable.ts +0 -34
  533. package/core/interfaces/i_selectable_toolbox_item.ts +0 -64
  534. package/core/interfaces/i_serializer.ts +0 -65
  535. package/core/interfaces/i_styleable.ts +0 -35
  536. package/core/interfaces/i_toolbox.ts +0 -127
  537. package/core/interfaces/i_toolbox_item.ts +0 -84
  538. package/core/internal_constants.ts +0 -67
  539. package/core/keyboard_nav/ast_node.ts +0 -717
  540. package/core/keyboard_nav/basic_cursor.ts +0 -214
  541. package/core/keyboard_nav/cursor.ts +0 -134
  542. package/core/keyboard_nav/marker.ts +0 -115
  543. package/core/keyboard_nav/tab_navigate_cursor.ts +0 -48
  544. package/core/main.js +0 -303
  545. package/core/marker_manager.ts +0 -181
  546. package/core/menu.ts +0 -449
  547. package/core/menuitem.ts +0 -240
  548. package/core/metrics_manager.ts +0 -456
  549. package/core/msg.ts +0 -20
  550. package/core/mutator.ts +0 -560
  551. package/core/names.ts +0 -267
  552. package/core/options.ts +0 -365
  553. package/core/positionable_helpers.ts +0 -181
  554. package/core/procedures.ts +0 -443
  555. package/core/registry.ts +0 -339
  556. package/core/rendered_connection.ts +0 -568
  557. package/core/renderers/common/block_rendering.ts +0 -164
  558. package/core/renderers/common/constants.ts +0 -1124
  559. package/core/renderers/common/debug.ts +0 -61
  560. package/core/renderers/common/debugger.ts +0 -433
  561. package/core/renderers/common/drawer.ts +0 -450
  562. package/core/renderers/common/i_path_object.ts +0 -161
  563. package/core/renderers/common/info.ts +0 -718
  564. package/core/renderers/common/marker_svg.ts +0 -680
  565. package/core/renderers/common/path_object.ts +0 -272
  566. package/core/renderers/common/renderer.ts +0 -271
  567. package/core/renderers/geras/constants.ts +0 -61
  568. package/core/renderers/geras/drawer.ts +0 -176
  569. package/core/renderers/geras/geras.ts +0 -37
  570. package/core/renderers/geras/highlight_constants.ts +0 -337
  571. package/core/renderers/geras/highlighter.ts +0 -306
  572. package/core/renderers/geras/info.ts +0 -450
  573. package/core/renderers/geras/measurables/inline_input.ts +0 -51
  574. package/core/renderers/geras/measurables/statement_input.ts +0 -50
  575. package/core/renderers/geras/path_object.ts +0 -138
  576. package/core/renderers/geras/renderer.ts +0 -126
  577. package/core/renderers/measurables/base.ts +0 -53
  578. package/core/renderers/measurables/bottom_row.ts +0 -120
  579. package/core/renderers/measurables/connection.ts +0 -52
  580. package/core/renderers/measurables/external_value_input.ts +0 -65
  581. package/core/renderers/measurables/field.ts +0 -63
  582. package/core/renderers/measurables/hat.ts +0 -48
  583. package/core/renderers/measurables/icon.ts +0 -54
  584. package/core/renderers/measurables/in_row_spacer.ts +0 -44
  585. package/core/renderers/measurables/inline_input.ts +0 -76
  586. package/core/renderers/measurables/input_connection.ts +0 -66
  587. package/core/renderers/measurables/input_row.ts +0 -82
  588. package/core/renderers/measurables/jagged_edge.ts +0 -43
  589. package/core/renderers/measurables/next_connection.ts +0 -47
  590. package/core/renderers/measurables/output_connection.ts +0 -56
  591. package/core/renderers/measurables/previous_connection.ts +0 -47
  592. package/core/renderers/measurables/round_corner.ts +0 -49
  593. package/core/renderers/measurables/row.ts +0 -225
  594. package/core/renderers/measurables/spacer_row.ts +0 -55
  595. package/core/renderers/measurables/square_corner.ts +0 -47
  596. package/core/renderers/measurables/statement_input.ts +0 -55
  597. package/core/renderers/measurables/top_row.ts +0 -122
  598. package/core/renderers/measurables/types.ts +0 -332
  599. package/core/renderers/minimalist/constants.ts +0 -32
  600. package/core/renderers/minimalist/drawer.ts +0 -38
  601. package/core/renderers/minimalist/info.ts +0 -52
  602. package/core/renderers/minimalist/minimalist.ts +0 -22
  603. package/core/renderers/minimalist/renderer.ts +0 -71
  604. package/core/renderers/thrasos/info.ts +0 -338
  605. package/core/renderers/thrasos/renderer.ts +0 -48
  606. package/core/renderers/thrasos/thrasos.ts +0 -20
  607. package/core/renderers/zelos/constants.ts +0 -858
  608. package/core/renderers/zelos/drawer.ts +0 -228
  609. package/core/renderers/zelos/info.ts +0 -593
  610. package/core/renderers/zelos/marker_svg.ts +0 -151
  611. package/core/renderers/zelos/measurables/bottom_row.ts +0 -53
  612. package/core/renderers/zelos/measurables/inputs.ts +0 -56
  613. package/core/renderers/zelos/measurables/row_elements.ts +0 -45
  614. package/core/renderers/zelos/measurables/top_row.ts +0 -58
  615. package/core/renderers/zelos/path_object.ts +0 -215
  616. package/core/renderers/zelos/renderer.ts +0 -142
  617. package/core/renderers/zelos/zelos.ts +0 -39
  618. package/core/scrollbar.ts +0 -870
  619. package/core/scrollbar_pair.ts +0 -321
  620. package/core/serialization/blocks.ts +0 -706
  621. package/core/serialization/exceptions.ts +0 -98
  622. package/core/serialization/priorities.ts +0 -32
  623. package/core/serialization/registry.ts +0 -43
  624. package/core/serialization/variables.ts +0 -96
  625. package/core/serialization/workspaces.ts +0 -106
  626. package/core/shortcut_items.ts +0 -266
  627. package/core/shortcut_registry.ts +0 -355
  628. package/core/sprites.ts +0 -29
  629. package/core/theme/classic.ts +0 -54
  630. package/core/theme/themes.ts +0 -22
  631. package/core/theme/zelos.ts +0 -91
  632. package/core/theme.ts +0 -221
  633. package/core/theme_manager.ts +0 -186
  634. package/core/toolbox/category.ts +0 -679
  635. package/core/toolbox/collapsible_category.ts +0 -273
  636. package/core/toolbox/separator.ts +0 -105
  637. package/core/toolbox/toolbox.ts +0 -1044
  638. package/core/toolbox/toolbox_item.ts +0 -147
  639. package/core/tooltip.ts +0 -463
  640. package/core/touch.ts +0 -306
  641. package/core/touch_gesture.ts +0 -295
  642. package/core/trashcan.ts +0 -671
  643. package/core/utils/aria.ts +0 -160
  644. package/core/utils/array.ts +0 -32
  645. package/core/utils/colour.ts +0 -276
  646. package/core/utils/coordinate.ts +0 -124
  647. package/core/utils/deprecation.ts +0 -41
  648. package/core/utils/dom.ts +0 -408
  649. package/core/utils/idgenerator.ts +0 -80
  650. package/core/utils/keycodes.ts +0 -169
  651. package/core/utils/math.ts +0 -61
  652. package/core/utils/metrics.ts +0 -97
  653. package/core/utils/object.ts +0 -95
  654. package/core/utils/parsing.ts +0 -261
  655. package/core/utils/rect.ts +0 -62
  656. package/core/utils/sentinel.ts +0 -23
  657. package/core/utils/size.ts +0 -51
  658. package/core/utils/string.ts +0 -308
  659. package/core/utils/style.ts +0 -306
  660. package/core/utils/svg.ts +0 -88
  661. package/core/utils/svg_math.ts +0 -269
  662. package/core/utils/svg_paths.ts +0 -140
  663. package/core/utils/toolbox.ts +0 -433
  664. package/core/utils/useragent.ts +0 -135
  665. package/core/utils/xml.ts +0 -97
  666. package/core/utils.ts +0 -428
  667. package/core/variable_map.ts +0 -392
  668. package/core/variable_model.ts +0 -82
  669. package/core/variables.ts +0 -596
  670. package/core/variables_dynamic.ts +0 -133
  671. package/core/warning.ts +0 -161
  672. package/core/widgetdiv.ts +0 -257
  673. package/core/workspace.ts +0 -801
  674. package/core/workspace_audio.ts +0 -156
  675. package/core/workspace_comment.ts +0 -398
  676. package/core/workspace_comment_svg.ts +0 -1127
  677. package/core/workspace_drag_surface_svg.ts +0 -187
  678. package/core/workspace_dragger.ts +0 -104
  679. package/core/workspace_svg.ts +0 -2655
  680. package/core/xml.ts +0 -1023
  681. package/core/zoom_controls.ts +0 -441
  682. package/generators/dart/all.js +0 -27
  683. package/generators/dart/colour.js +0 -105
  684. package/generators/dart/lists.js +0 -431
  685. package/generators/dart/logic.js +0 -123
  686. package/generators/dart/loops.js +0 -161
  687. package/generators/dart/math.js +0 -446
  688. package/generators/dart/procedures.js +0 -105
  689. package/generators/dart/text.js +0 -338
  690. package/generators/dart/variables.js +0 -32
  691. package/generators/dart/variables_dynamic.js +0 -21
  692. package/generators/dart.js +0 -303
  693. package/generators/javascript/all.js +0 -27
  694. package/generators/javascript/colour.js +0 -85
  695. package/generators/javascript/lists.js +0 -405
  696. package/generators/javascript/logic.js +0 -127
  697. package/generators/javascript/loops.js +0 -180
  698. package/generators/javascript/math.js +0 -401
  699. package/generators/javascript/procedures.js +0 -110
  700. package/generators/javascript/text.js +0 -371
  701. package/generators/javascript/variables.js +0 -32
  702. package/generators/javascript/variables_dynamic.js +0 -21
  703. package/generators/javascript.js +0 -322
  704. package/generators/lua/all.js +0 -27
  705. package/generators/lua/colour.js +0 -71
  706. package/generators/lua/lists.js +0 -348
  707. package/generators/lua/logic.js +0 -112
  708. package/generators/lua/loops.js +0 -168
  709. package/generators/lua/math.js +0 -406
  710. package/generators/lua/procedures.js +0 -106
  711. package/generators/lua/text.js +0 -327
  712. package/generators/lua/variables.js +0 -31
  713. package/generators/lua/variables_dynamic.js +0 -21
  714. package/generators/lua.js +0 -206
  715. package/generators/php/all.js +0 -27
  716. package/generators/php/colour.js +0 -81
  717. package/generators/php/lists.js +0 -481
  718. package/generators/php/logic.js +0 -119
  719. package/generators/php/loops.js +0 -161
  720. package/generators/php/math.js +0 -349
  721. package/generators/php/procedures.js +0 -125
  722. package/generators/php/text.js +0 -255
  723. package/generators/php/variables.js +0 -32
  724. package/generators/php/variables_dynamic.js +0 -21
  725. package/generators/php.js +0 -303
  726. package/generators/python/all.js +0 -27
  727. package/generators/python/colour.js +0 -67
  728. package/generators/python/lists.js +0 -346
  729. package/generators/python/logic.js +0 -120
  730. package/generators/python/loops.js +0 -206
  731. package/generators/python/math.js +0 -373
  732. package/generators/python/procedures.js +0 -129
  733. package/generators/python/text.js +0 -291
  734. package/generators/python/variables.js +0 -32
  735. package/generators/python/variables_dynamic.js +0 -21
  736. package/generators/python.js +0 -333
@@ -1,1044 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2020 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- /**
8
- * @fileoverview Toolbox from whence to create blocks.
9
- */
10
-
11
- /**
12
- * Toolbox from whence to create blocks.
13
- * @class
14
- */
15
- import * as goog from '../../closure/goog/goog.js';
16
- goog.declareModuleId('Blockly.Toolbox');
17
-
18
- /* eslint-disable-next-line no-unused-vars */
19
- // Unused import preserved for side-effects. Remove if unneeded.
20
- // import '../shortcut_registry.js';
21
- // Unused import preserved for side-effects. Remove if unneeded.
22
- import '../events/events_toolbox_item_select.js';
23
-
24
- import {BlockSvg} from '../block_svg.js';
25
- import type {BlocklyOptions} from '../blockly_options.js';
26
- import * as browserEvents from '../browser_events.js';
27
- import * as common from '../common.js';
28
- import {ComponentManager} from '../component_manager.js';
29
- import * as Css from '../css.js';
30
- import {DeleteArea} from '../delete_area.js';
31
- import * as eventUtils from '../events/utils.js';
32
- import type {IAutoHideable} from '../interfaces/i_autohideable.js';
33
- import type {ICollapsibleToolboxItem} from '../interfaces/i_collapsible_toolbox_item.js';
34
- import type {IDraggable} from '../interfaces/i_draggable.js';
35
- import type {IFlyout} from '../interfaces/i_flyout.js';
36
- import type {IKeyboardAccessible} from '../interfaces/i_keyboard_accessible.js';
37
- import type {ISelectableToolboxItem} from '../interfaces/i_selectable_toolbox_item.js';
38
- import type {IStyleable} from '../interfaces/i_styleable.js';
39
- import type {IToolbox} from '../interfaces/i_toolbox.js';
40
- import type {IToolboxItem} from '../interfaces/i_toolbox_item.js';
41
- import {Options} from '../options.js';
42
- import * as registry from '../registry.js';
43
- import type {KeyboardShortcut} from '../shortcut_registry.js';
44
- import * as Touch from '../touch.js';
45
- import * as aria from '../utils/aria.js';
46
- import * as dom from '../utils/dom.js';
47
- import {KeyCodes} from '../utils/keycodes.js';
48
- import {Rect} from '../utils/rect.js';
49
- import * as toolbox from '../utils/toolbox.js';
50
- import type {WorkspaceSvg} from '../workspace_svg.js';
51
-
52
- import type {ToolboxCategory} from './category.js';
53
- import {CollapsibleToolboxCategory} from './collapsible_category.js';
54
-
55
-
56
- /**
57
- * Class for a Toolbox.
58
- * Creates the toolbox's DOM.
59
- * @alias Blockly.Toolbox
60
- */
61
- export class Toolbox extends DeleteArea implements IAutoHideable,
62
- IKeyboardAccessible,
63
- IStyleable, IToolbox {
64
- /**
65
- * The unique id for this component that is used to register with the
66
- * ComponentManager.
67
- */
68
- override id = 'toolbox';
69
- protected toolboxDef_: toolbox.ToolboxInfo;
70
- private readonly horizontalLayout_: boolean;
71
-
72
- /** The html container for the toolbox. */
73
- HtmlDiv: HTMLDivElement|null = null;
74
-
75
- /** The html container for the contents of a toolbox. */
76
- protected contentsDiv_: HTMLDivElement|null = null;
77
-
78
- /** Whether the Toolbox is visible. */
79
- protected isVisible_ = false;
80
-
81
- /** The list of items in the toolbox. */
82
- protected contents_: IToolboxItem[] = [];
83
-
84
- /** The width of the toolbox. */
85
- protected width_ = 0;
86
-
87
- /** The height of the toolbox. */
88
- protected height_ = 0;
89
- RTL: boolean;
90
-
91
- /** The flyout for the toolbox. */
92
- private flyout_: IFlyout|null = null;
93
- protected contentMap_: {[key: string]: IToolboxItem};
94
- toolboxPosition: toolbox.Position;
95
-
96
- /** The currently selected item. */
97
- protected selectedItem_: ISelectableToolboxItem|null = null;
98
-
99
- /** The previously selected item. */
100
- protected previouslySelectedItem_: ISelectableToolboxItem|null = null;
101
-
102
- /**
103
- * Array holding info needed to unbind event handlers.
104
- * Used for disposing.
105
- * Ex: [[node, name, func], [node, name, func]].
106
- */
107
- protected boundEvents_: browserEvents.Data[] = [];
108
- override wouldDelete_: AnyDuringMigration;
109
-
110
- /** The workspace this toolbox is on. */
111
- protected readonly workspace_: WorkspaceSvg;
112
-
113
- /** @param workspace The workspace in which to create new blocks. */
114
- constructor(workspace: WorkspaceSvg) {
115
- super();
116
-
117
- this.workspace_ = workspace;
118
-
119
- /** The JSON describing the contents of this toolbox. */
120
- // AnyDuringMigration because: Type 'ToolboxInfo | { contents: never[]; }'
121
- // is not assignable to type 'ToolboxInfo'.
122
- this.toolboxDef_ = (workspace.options.languageTree || {'contents': []}) as
123
- AnyDuringMigration;
124
-
125
- /** Whether the toolbox should be laid out horizontally. */
126
- this.horizontalLayout_ = workspace.options.horizontalLayout;
127
-
128
- /** Is RTL vs LTR. */
129
- this.RTL = workspace.options.RTL;
130
-
131
- /** A map from toolbox item IDs to toolbox items. */
132
- this.contentMap_ = Object.create(null);
133
-
134
- /** Position of the toolbox and flyout relative to the workspace. */
135
- this.toolboxPosition = workspace.options.toolboxPosition;
136
- }
137
-
138
- /**
139
- * Handles the given keyboard shortcut.
140
- * @param _shortcut The shortcut to be handled.
141
- * @return True if the shortcut has been handled, false otherwise.
142
- */
143
- onShortcut(_shortcut: KeyboardShortcut): boolean {
144
- return false;
145
- }
146
-
147
- /** Initializes the toolbox */
148
- init() {
149
- const workspace = this.workspace_;
150
- const svg = workspace.getParentSvg();
151
-
152
- this.flyout_ = this.createFlyout_();
153
-
154
- this.HtmlDiv = this.createDom_(this.workspace_);
155
- dom.insertAfter(this.flyout_.createDom('svg'), svg);
156
- this.setVisible(true);
157
- this.flyout_.init(workspace);
158
-
159
- this.render(this.toolboxDef_);
160
- const themeManager = workspace.getThemeManager();
161
- themeManager.subscribe(
162
- this.HtmlDiv, 'toolboxBackgroundColour', 'background-color');
163
- themeManager.subscribe(this.HtmlDiv, 'toolboxForegroundColour', 'color');
164
- this.workspace_.getComponentManager().addComponent({
165
- component: this,
166
- weight: 1,
167
- capabilities: [
168
- ComponentManager.Capability.AUTOHIDEABLE,
169
- ComponentManager.Capability.DELETE_AREA,
170
- ComponentManager.Capability.DRAG_TARGET,
171
- ],
172
- });
173
- }
174
-
175
- /**
176
- * Creates the DOM for the toolbox.
177
- * @param workspace The workspace this toolbox is on.
178
- * @return The HTML container for the toolbox.
179
- */
180
- protected createDom_(workspace: WorkspaceSvg): HTMLDivElement {
181
- const svg = workspace.getParentSvg();
182
-
183
- const container = this.createContainer_();
184
-
185
- this.contentsDiv_ = this.createContentsContainer_();
186
- this.contentsDiv_.tabIndex = 0;
187
- aria.setRole(this.contentsDiv_, aria.Role.TREE);
188
- container.appendChild(this.contentsDiv_);
189
-
190
- svg.parentNode!.insertBefore(container, svg);
191
-
192
- this.attachEvents_(container, this.contentsDiv_);
193
- return container;
194
- }
195
-
196
- /**
197
- * Creates the container div for the toolbox.
198
- * @return The HTML container for the toolbox.
199
- */
200
- protected createContainer_(): HTMLDivElement {
201
- const toolboxContainer = (document.createElement('div'));
202
- toolboxContainer.setAttribute('layout', this.isHorizontal() ? 'h' : 'v');
203
- dom.addClass(toolboxContainer, 'blocklyToolboxDiv');
204
- dom.addClass(toolboxContainer, 'blocklyNonSelectable');
205
- toolboxContainer.setAttribute('dir', this.RTL ? 'RTL' : 'LTR');
206
- return toolboxContainer;
207
- }
208
-
209
- /**
210
- * Creates the container for all the contents in the toolbox.
211
- * @return The HTML container for the toolbox contents.
212
- */
213
- protected createContentsContainer_(): HTMLDivElement {
214
- const contentsContainer = (document.createElement('div'));
215
- dom.addClass(contentsContainer, 'blocklyToolboxContents');
216
- if (this.isHorizontal()) {
217
- contentsContainer.style.flexDirection = 'row';
218
- }
219
- return contentsContainer;
220
- }
221
-
222
- /**
223
- * Adds event listeners to the toolbox container div.
224
- * @param container The HTML container for the toolbox.
225
- * @param contentsContainer The HTML container for the contents of the
226
- * toolbox.
227
- */
228
- protected attachEvents_(
229
- container: HTMLDivElement, contentsContainer: HTMLDivElement) {
230
- // Clicking on toolbox closes popups.
231
- const clickEvent = browserEvents.conditionalBind(
232
- container, 'click', this, this.onClick_,
233
- /* opt_noCaptureIdentifier */ false, /* opt_noPreventDefault */ true);
234
- this.boundEvents_.push(clickEvent);
235
-
236
- const keyDownEvent = browserEvents.conditionalBind(
237
- contentsContainer, 'keydown', this, this.onKeyDown_,
238
- /* opt_noCaptureIdentifier */ false, /* opt_noPreventDefault */ true);
239
- this.boundEvents_.push(keyDownEvent);
240
- }
241
-
242
- /**
243
- * Handles on click events for when the toolbox or toolbox items are clicked.
244
- * @param e Click event to handle.
245
- */
246
- protected onClick_(e: MouseEvent) {
247
- if (browserEvents.isRightButton(e) || e.target === this.HtmlDiv) {
248
- // Close flyout.
249
- (common.getMainWorkspace() as WorkspaceSvg).hideChaff(false);
250
- } else {
251
- const targetElement = e.target;
252
- const itemId = (targetElement as Element).getAttribute('id');
253
- if (itemId) {
254
- const item = this.getToolboxItemById(itemId);
255
- if (item!.isSelectable()) {
256
- this.setSelectedItem(item);
257
- (item as ISelectableToolboxItem).onClick(e);
258
- }
259
- }
260
- // Just close popups.
261
- (common.getMainWorkspace() as WorkspaceSvg).hideChaff(true);
262
- }
263
- Touch.clearTouchIdentifier();
264
- }
265
-
266
- /**
267
- * Handles key down events for the toolbox.
268
- * @param e The key down event.
269
- */
270
- protected onKeyDown_(e: KeyboardEvent) {
271
- let handled = false;
272
- switch (e.keyCode) {
273
- case KeyCodes.DOWN:
274
- handled = this.selectNext_();
275
- break;
276
- case KeyCodes.UP:
277
- handled = this.selectPrevious_();
278
- break;
279
- case KeyCodes.LEFT:
280
- handled = this.selectParent_();
281
- break;
282
- case KeyCodes.RIGHT:
283
- handled = this.selectChild_();
284
- break;
285
- case KeyCodes.ENTER:
286
- case KeyCodes.SPACE:
287
- if (this.selectedItem_ && this.selectedItem_.isCollapsible()) {
288
- const collapsibleItem = this.selectedItem_ as ICollapsibleToolboxItem;
289
- collapsibleItem.toggleExpanded();
290
- handled = true;
291
- }
292
- break;
293
- default:
294
- handled = false;
295
- break;
296
- }
297
- if (!handled && this.selectedItem_) {
298
- // TODO(#6097): Figure out who implements onKeyDown and which interface it
299
- // should be part of.
300
- const untypedItem = this.selectedItem_ as AnyDuringMigration;
301
- if (untypedItem.onKeyDown) {
302
- handled = untypedItem.onKeyDown(e);
303
- }
304
- }
305
-
306
- if (handled) {
307
- e.preventDefault();
308
- }
309
- }
310
-
311
- /**
312
- * Creates the flyout based on the toolbox layout.
313
- * @return The flyout for the toolbox.
314
- * @throws {Error} If missing a require for `Blockly.HorizontalFlyout`,
315
- * `Blockly.VerticalFlyout`, and no flyout plugin is specified.
316
- */
317
- protected createFlyout_(): IFlyout {
318
- const workspace = this.workspace_;
319
- // TODO (#4247): Look into adding a makeFlyout method to Blockly Options.
320
- const workspaceOptions = new Options(({
321
- 'parentWorkspace': workspace,
322
- 'rtl': workspace.RTL,
323
- 'oneBasedIndex': workspace.options.oneBasedIndex,
324
- 'horizontalLayout': workspace.horizontalLayout,
325
- 'renderer': workspace.options.renderer,
326
- 'rendererOverrides': workspace.options.rendererOverrides,
327
- 'move': {
328
- 'scrollbars': true,
329
- },
330
- } as BlocklyOptions));
331
- // Options takes in either 'end' or 'start'. This has already been parsed to
332
- // be either 0 or 1, so set it after.
333
- workspaceOptions.toolboxPosition = workspace.options.toolboxPosition;
334
- let FlyoutClass = null;
335
- if (workspace.horizontalLayout) {
336
- FlyoutClass = registry.getClassFromOptions(
337
- registry.Type.FLYOUTS_HORIZONTAL_TOOLBOX, workspace.options, true);
338
- } else {
339
- FlyoutClass = registry.getClassFromOptions(
340
- registry.Type.FLYOUTS_VERTICAL_TOOLBOX, workspace.options, true);
341
- }
342
- return new FlyoutClass!(workspaceOptions);
343
- }
344
-
345
- /**
346
- * Fills the toolbox with new toolbox items and removes any old contents.
347
- * @param toolboxDef Object holding information for creating a toolbox.
348
- * @internal
349
- */
350
- render(toolboxDef: toolbox.ToolboxInfo) {
351
- this.toolboxDef_ = toolboxDef;
352
- for (let i = 0; i < this.contents_.length; i++) {
353
- const toolboxItem = this.contents_[i];
354
- if (toolboxItem) {
355
- toolboxItem.dispose();
356
- }
357
- }
358
- this.contents_ = [];
359
- this.contentMap_ = Object.create(null);
360
- this.renderContents_(toolboxDef['contents']);
361
- this.position();
362
- this.handleToolboxItemResize();
363
- }
364
-
365
- /**
366
- * Adds all the toolbox items to the toolbox.
367
- * @param toolboxDef Array holding objects containing information on the
368
- * contents of the toolbox.
369
- */
370
- protected renderContents_(toolboxDef: toolbox.ToolboxItemInfo[]) {
371
- // This is for performance reasons. By using document fragment we only have
372
- // to add to the DOM once.
373
- const fragment = document.createDocumentFragment();
374
- for (let i = 0; i < toolboxDef.length; i++) {
375
- const toolboxItemDef = toolboxDef[i];
376
- this.createToolboxItem_(toolboxItemDef, fragment);
377
- }
378
- this.contentsDiv_!.appendChild(fragment);
379
- }
380
-
381
- /**
382
- * Creates and renders the toolbox item.
383
- * @param toolboxItemDef Any information that can be used to create an item in
384
- * the toolbox.
385
- * @param fragment The document fragment to add the child toolbox elements to.
386
- */
387
- private createToolboxItem_(
388
- toolboxItemDef: toolbox.ToolboxItemInfo, fragment: DocumentFragment) {
389
- let registryName = toolboxItemDef['kind'];
390
-
391
- // Categories that are collapsible are created using a class registered
392
- // under a different name.
393
- if (registryName.toUpperCase() === 'CATEGORY' &&
394
- toolbox.isCategoryCollapsible(toolboxItemDef as toolbox.CategoryInfo)) {
395
- registryName = CollapsibleToolboxCategory.registrationName;
396
- }
397
-
398
- const ToolboxItemClass = registry.getClass(
399
- registry.Type.TOOLBOX_ITEM, registryName.toLowerCase());
400
- if (ToolboxItemClass) {
401
- const toolboxItem = new ToolboxItemClass(toolboxItemDef, this);
402
- toolboxItem.init();
403
- this.addToolboxItem_(toolboxItem);
404
- const toolboxItemDom = toolboxItem.getDiv();
405
- if (toolboxItemDom) {
406
- fragment.appendChild(toolboxItemDom);
407
- }
408
- // Adds the ID to the HTML element that can receive a click.
409
- // This is used in onClick_ to find the toolboxItem that was clicked.
410
- if (toolboxItem.getClickTarget()) {
411
- toolboxItem.getClickTarget()!.setAttribute('id', toolboxItem.getId());
412
- }
413
- }
414
- }
415
-
416
- /**
417
- * Adds an item to the toolbox.
418
- * @param toolboxItem The item in the toolbox.
419
- */
420
- protected addToolboxItem_(toolboxItem: IToolboxItem) {
421
- this.contents_.push(toolboxItem);
422
- this.contentMap_[toolboxItem.getId()] = toolboxItem;
423
- if (toolboxItem.isCollapsible()) {
424
- const collapsibleItem = toolboxItem as ICollapsibleToolboxItem;
425
- const childToolboxItems = collapsibleItem.getChildToolboxItems();
426
- for (let i = 0; i < childToolboxItems.length; i++) {
427
- const child = childToolboxItems[i];
428
- this.addToolboxItem_(child);
429
- }
430
- }
431
- }
432
-
433
- /**
434
- * Gets the items in the toolbox.
435
- * @return The list of items in the toolbox.
436
- */
437
- getToolboxItems(): IToolboxItem[] {
438
- return this.contents_;
439
- }
440
-
441
- /**
442
- * Adds a style on the toolbox. Usually used to change the cursor.
443
- * @param style The name of the class to add.
444
- * @internal
445
- */
446
- addStyle(style: string) {
447
- dom.addClass(this.HtmlDiv as Element, style);
448
- }
449
-
450
- /**
451
- * Removes a style from the toolbox. Usually used to change the cursor.
452
- * @param style The name of the class to remove.
453
- * @internal
454
- */
455
- removeStyle(style: string) {
456
- dom.removeClass(this.HtmlDiv as Element, style);
457
- }
458
-
459
- /**
460
- * Returns the bounding rectangle of the drag target area in pixel units
461
- * relative to viewport.
462
- * @return The component's bounding box. Null if drag target area should be
463
- * ignored.
464
- */
465
- override getClientRect(): Rect|null {
466
- if (!this.HtmlDiv || !this.isVisible_) {
467
- return null;
468
- }
469
- // BIG_NUM is offscreen padding so that blocks dragged beyond the toolbox
470
- // area are still deleted. Must be smaller than Infinity, but larger than
471
- // the largest screen size.
472
- const BIG_NUM = 10000000;
473
- const toolboxRect = this.HtmlDiv.getBoundingClientRect();
474
-
475
- const top = toolboxRect.top;
476
- const bottom = top + toolboxRect.height;
477
- const left = toolboxRect.left;
478
- const right = left + toolboxRect.width;
479
-
480
- // Assumes that the toolbox is on the SVG edge. If this changes
481
- // (e.g. toolboxes in mutators) then this code will need to be more complex.
482
- if (this.toolboxPosition === toolbox.Position.TOP) {
483
- return new Rect(-BIG_NUM, bottom, -BIG_NUM, BIG_NUM);
484
- } else if (this.toolboxPosition === toolbox.Position.BOTTOM) {
485
- return new Rect(top, BIG_NUM, -BIG_NUM, BIG_NUM);
486
- } else if (this.toolboxPosition === toolbox.Position.LEFT) {
487
- return new Rect(-BIG_NUM, BIG_NUM, -BIG_NUM, right);
488
- } else { // Right
489
- return new Rect(-BIG_NUM, BIG_NUM, left, BIG_NUM);
490
- }
491
- }
492
-
493
- /**
494
- * Returns whether the provided block or bubble would be deleted if dropped on
495
- * this area.
496
- * This method should check if the element is deletable and is always called
497
- * before onDragEnter/onDragOver/onDragExit.
498
- * @param element The block or bubble currently being dragged.
499
- * @param _couldConnect Whether the element could could connect to another.
500
- * @return Whether the element provided would be deleted if dropped on this
501
- * area.
502
- */
503
- override wouldDelete(element: IDraggable, _couldConnect: boolean): boolean {
504
- if (element instanceof BlockSvg) {
505
- const block = (element);
506
- // Prefer dragging to the toolbox over connecting to other blocks.
507
- this.updateWouldDelete_(!block.getParent() && block.isDeletable());
508
- } else {
509
- this.updateWouldDelete_(element.isDeletable());
510
- }
511
- return this.wouldDelete_;
512
- }
513
-
514
- /**
515
- * Handles when a cursor with a block or bubble enters this drag target.
516
- * @param _dragElement The block or bubble currently being dragged.
517
- */
518
- override onDragEnter(_dragElement: IDraggable) {
519
- this.updateCursorDeleteStyle_(true);
520
- }
521
-
522
- /**
523
- * Handles when a cursor with a block or bubble exits this drag target.
524
- * @param _dragElement The block or bubble currently being dragged.
525
- */
526
- override onDragExit(_dragElement: IDraggable) {
527
- this.updateCursorDeleteStyle_(false);
528
- }
529
-
530
- /**
531
- * Handles when a block or bubble is dropped on this component.
532
- * Should not handle delete here.
533
- * @param _dragElement The block or bubble currently being dragged.
534
- */
535
- override onDrop(_dragElement: IDraggable) {
536
- this.updateCursorDeleteStyle_(false);
537
- }
538
-
539
- /**
540
- * Updates the internal wouldDelete_ state.
541
- * @param wouldDelete The new value for the wouldDelete state.
542
- */
543
- protected override updateWouldDelete_(wouldDelete: boolean) {
544
- if (wouldDelete === this.wouldDelete_) {
545
- return;
546
- }
547
- // This logic handles updating the deleteStyle properly if the delete state
548
- // changes while the block is over the Toolbox. This could happen if the
549
- // implementation of wouldDeleteBlock depends on the couldConnect parameter
550
- // or if the isDeletable property of the block currently being dragged
551
- // changes during the drag.
552
- this.updateCursorDeleteStyle_(false);
553
- this.wouldDelete_ = wouldDelete;
554
- this.updateCursorDeleteStyle_(true);
555
- }
556
-
557
- /**
558
- * Adds or removes the CSS style of the cursor over the toolbox based whether
559
- * the block or bubble over it is expected to be deleted if dropped (using the
560
- * internal this.wouldDelete_ property).
561
- * @param addStyle Whether the style should be added or removed.
562
- */
563
- protected updateCursorDeleteStyle_(addStyle: boolean) {
564
- const style =
565
- this.wouldDelete_ ? 'blocklyToolboxDelete' : 'blocklyToolboxGrab';
566
- if (addStyle) {
567
- this.addStyle(style);
568
- } else {
569
- this.removeStyle(style);
570
- }
571
- }
572
-
573
- /**
574
- * Gets the toolbox item with the given ID.
575
- * @param id The ID of the toolbox item.
576
- * @return The toolbox item with the given ID, or null if no item exists.
577
- */
578
- getToolboxItemById(id: string): IToolboxItem|null {
579
- return this.contentMap_[id] || null;
580
- }
581
-
582
- /**
583
- * Gets the width of the toolbox.
584
- * @return The width of the toolbox.
585
- */
586
- getWidth(): number {
587
- return this.width_;
588
- }
589
-
590
- /**
591
- * Gets the height of the toolbox.
592
- * @return The width of the toolbox.
593
- */
594
- getHeight(): number {
595
- return this.height_;
596
- }
597
-
598
- /**
599
- * Gets the toolbox flyout.
600
- * @return The toolbox flyout.
601
- */
602
- getFlyout(): IFlyout|null {
603
- return this.flyout_;
604
- }
605
-
606
- /**
607
- * Gets the workspace for the toolbox.
608
- * @return The parent workspace for the toolbox.
609
- */
610
- getWorkspace(): WorkspaceSvg {
611
- return this.workspace_;
612
- }
613
-
614
- /**
615
- * Gets the selected item.
616
- * @return The selected item, or null if no item is currently selected.
617
- */
618
- getSelectedItem(): ISelectableToolboxItem|null {
619
- return this.selectedItem_;
620
- }
621
-
622
- /**
623
- * Gets the previously selected item.
624
- * @return The previously selected item, or null if no item was previously
625
- * selected.
626
- */
627
- getPreviouslySelectedItem(): ISelectableToolboxItem|null {
628
- return this.previouslySelectedItem_;
629
- }
630
-
631
- /**
632
- * Gets whether or not the toolbox is horizontal.
633
- * @return True if the toolbox is horizontal, false if the toolbox is
634
- * vertical.
635
- */
636
- isHorizontal(): boolean {
637
- return this.horizontalLayout_;
638
- }
639
-
640
- /**
641
- * Positions the toolbox based on whether it is a horizontal toolbox and
642
- * whether the workspace is in rtl.
643
- */
644
- position() {
645
- const workspaceMetrics = this.workspace_.getMetrics();
646
- const toolboxDiv = this.HtmlDiv;
647
- if (!toolboxDiv) {
648
- // Not initialized yet.
649
- return;
650
- }
651
-
652
- if (this.horizontalLayout_) {
653
- toolboxDiv.style.left = '0';
654
- toolboxDiv.style.height = 'auto';
655
- toolboxDiv.style.width = '100%';
656
- this.height_ = toolboxDiv.offsetHeight;
657
- this.width_ = workspaceMetrics.viewWidth;
658
- if (this.toolboxPosition === toolbox.Position.TOP) {
659
- toolboxDiv.style.top = '0';
660
- } else { // Bottom
661
- toolboxDiv.style.bottom = '0';
662
- }
663
- } else {
664
- if (this.toolboxPosition === toolbox.Position.RIGHT) {
665
- toolboxDiv.style.right = '0';
666
- } else { // Left
667
- toolboxDiv.style.left = '0';
668
- }
669
- toolboxDiv.style.height = '100%';
670
- this.width_ = toolboxDiv.offsetWidth;
671
- this.height_ = workspaceMetrics.viewHeight;
672
- }
673
- this.flyout_!.position();
674
- }
675
-
676
- /**
677
- * Handles resizing the toolbox when a toolbox item resizes.
678
- * @internal
679
- */
680
- handleToolboxItemResize() {
681
- // Reposition the workspace so that (0,0) is in the correct position
682
- // relative to the new absolute edge (ie toolbox edge).
683
- const workspace = this.workspace_;
684
- const rect = this.HtmlDiv!.getBoundingClientRect();
685
- const newX = this.toolboxPosition === toolbox.Position.LEFT ?
686
- workspace.scrollX + rect.width :
687
- workspace.scrollX;
688
- const newY = this.toolboxPosition === toolbox.Position.TOP ?
689
- workspace.scrollY + rect.height :
690
- workspace.scrollY;
691
- workspace.translate(newX, newY);
692
-
693
- // Even though the div hasn't changed size, the visible workspace
694
- // surface of the workspace has, so we may need to reposition everything.
695
- common.svgResize(workspace);
696
- }
697
-
698
- /** Unhighlights any previously selected item. */
699
- clearSelection() {
700
- this.setSelectedItem(null);
701
- }
702
-
703
- /**
704
- * Updates the category colours and background colour of selected categories.
705
- * @internal
706
- */
707
- refreshTheme() {
708
- for (let i = 0; i < this.contents_.length; i++) {
709
- const child = this.contents_[i];
710
- // TODO(#6097): Fix types or add refreshTheme to IToolboxItem.
711
- const childAsCategory = child as ToolboxCategory;
712
- if (childAsCategory.refreshTheme) {
713
- childAsCategory.refreshTheme();
714
- }
715
- }
716
- }
717
-
718
- /**
719
- * Updates the flyout's content without closing it. Should be used in
720
- * response to a change in one of the dynamic categories, such as variables or
721
- * procedures.
722
- */
723
- refreshSelection() {
724
- if (this.selectedItem_ && this.selectedItem_.isSelectable() &&
725
- this.selectedItem_.getContents().length) {
726
- this.flyout_!.show(this.selectedItem_.getContents());
727
- }
728
- }
729
-
730
- /**
731
- * Shows or hides the toolbox.
732
- * @param isVisible True if toolbox should be visible.
733
- */
734
- setVisible(isVisible: boolean) {
735
- if (this.isVisible_ === isVisible) {
736
- return;
737
- }
738
-
739
- this.HtmlDiv!.style.display = isVisible ? 'block' : 'none';
740
- this.isVisible_ = isVisible;
741
- // Invisible toolbox is ignored as drag targets and must have the drag
742
- // target updated.
743
- this.workspace_.recordDragTargets();
744
- }
745
-
746
- /**
747
- * Hides the component. Called in WorkspaceSvg.hideChaff.
748
- * @param onlyClosePopups Whether only popups should be closed.
749
- * Flyouts should not be closed if this is true.
750
- */
751
- autoHide(onlyClosePopups: boolean) {
752
- if (!onlyClosePopups && this.flyout_ && this.flyout_.autoClose) {
753
- this.clearSelection();
754
- }
755
- }
756
-
757
- /**
758
- * Sets the given item as selected.
759
- * No-op if the item is not selectable.
760
- * @param newItem The toolbox item to select.
761
- */
762
- setSelectedItem(newItem: IToolboxItem|null) {
763
- const oldItem = this.selectedItem_;
764
-
765
- if (!newItem && !oldItem || newItem && !newItem.isSelectable()) {
766
- return;
767
- }
768
- newItem = newItem as ISelectableToolboxItem;
769
-
770
- // AnyDuringMigration because: Argument of type 'IToolboxItem' is not
771
- // assignable to parameter of type 'ISelectableToolboxItem'.
772
- if (this.shouldDeselectItem_(oldItem, newItem as AnyDuringMigration) &&
773
- oldItem !== null) {
774
- this.deselectItem_(oldItem);
775
- }
776
-
777
- // AnyDuringMigration because: Argument of type 'IToolboxItem' is not
778
- // assignable to parameter of type 'ISelectableToolboxItem'.
779
- if (this.shouldSelectItem_(oldItem, newItem as AnyDuringMigration) &&
780
- newItem !== null) {
781
- // AnyDuringMigration because: Argument of type 'IToolboxItem' is not
782
- // assignable to parameter of type 'ISelectableToolboxItem'.
783
- this.selectItem_(oldItem, newItem as AnyDuringMigration);
784
- }
785
-
786
- // AnyDuringMigration because: Argument of type 'IToolboxItem' is not
787
- // assignable to parameter of type 'ISelectableToolboxItem'.
788
- this.updateFlyout_(oldItem, newItem as AnyDuringMigration);
789
- // AnyDuringMigration because: Argument of type 'IToolboxItem' is not
790
- // assignable to parameter of type 'ISelectableToolboxItem'.
791
- this.fireSelectEvent_(oldItem, newItem as AnyDuringMigration);
792
- }
793
-
794
- /**
795
- * Decides whether the old item should be deselected.
796
- * @param oldItem The previously selected toolbox item.
797
- * @param newItem The newly selected toolbox item.
798
- * @return True if the old item should be deselected, false otherwise.
799
- */
800
- protected shouldDeselectItem_(
801
- oldItem: ISelectableToolboxItem|null,
802
- newItem: ISelectableToolboxItem|null): boolean {
803
- // Deselect the old item unless the old item is collapsible and has been
804
- // previously clicked on.
805
- return oldItem !== null &&
806
- (!oldItem.isCollapsible() || oldItem !== newItem);
807
- }
808
-
809
- /**
810
- * Decides whether the new item should be selected.
811
- * @param oldItem The previously selected toolbox item.
812
- * @param newItem The newly selected toolbox item.
813
- * @return True if the new item should be selected, false otherwise.
814
- */
815
- protected shouldSelectItem_(
816
- oldItem: ISelectableToolboxItem|null,
817
- newItem: ISelectableToolboxItem|null): boolean {
818
- // Select the new item unless the old item equals the new item.
819
- return newItem !== null && newItem !== oldItem;
820
- }
821
-
822
- /**
823
- * Deselects the given item, marks it as unselected, and updates aria state.
824
- * @param item The previously selected toolbox item which should be
825
- * deselected.
826
- */
827
- protected deselectItem_(item: ISelectableToolboxItem) {
828
- this.selectedItem_ = null;
829
- this.previouslySelectedItem_ = item;
830
- item.setSelected(false);
831
- aria.setState(
832
- this.contentsDiv_ as Element, aria.State.ACTIVEDESCENDANT, '');
833
- }
834
-
835
- /**
836
- * Selects the given item, marks it selected, and updates aria state.
837
- * @param oldItem The previously selected toolbox item.
838
- * @param newItem The newly selected toolbox item.
839
- */
840
- protected selectItem_(
841
- oldItem: ISelectableToolboxItem|null, newItem: ISelectableToolboxItem) {
842
- this.selectedItem_ = newItem;
843
- this.previouslySelectedItem_ = oldItem;
844
- newItem.setSelected(true);
845
- aria.setState(
846
- this.contentsDiv_ as Element, aria.State.ACTIVEDESCENDANT,
847
- newItem.getId());
848
- }
849
-
850
- /**
851
- * Selects the toolbox item by its position in the list of toolbox items.
852
- * @param position The position of the item to select.
853
- */
854
- selectItemByPosition(position: number) {
855
- if (position > -1 && position < this.contents_.length) {
856
- const item = this.contents_[position];
857
- if (item.isSelectable()) {
858
- this.setSelectedItem(item);
859
- }
860
- }
861
- }
862
-
863
- /**
864
- * Decides whether to hide or show the flyout depending on the selected item.
865
- * @param oldItem The previously selected toolbox item.
866
- * @param newItem The newly selected toolbox item.
867
- */
868
- protected updateFlyout_(
869
- oldItem: ISelectableToolboxItem|null,
870
- newItem: ISelectableToolboxItem|null) {
871
- if (!newItem || oldItem === newItem && !newItem.isCollapsible() ||
872
- !newItem.getContents().length) {
873
- this.flyout_!.hide();
874
- } else {
875
- this.flyout_!.show(newItem.getContents());
876
- this.flyout_!.scrollToStart();
877
- }
878
- }
879
-
880
- /**
881
- * Emits an event when a new toolbox item is selected.
882
- * @param oldItem The previously selected toolbox item.
883
- * @param newItem The newly selected toolbox item.
884
- */
885
- private fireSelectEvent_(
886
- oldItem: ISelectableToolboxItem|null,
887
- newItem: ISelectableToolboxItem|null) {
888
- const oldElement = oldItem && oldItem.getName();
889
- let newElement = newItem && newItem.getName();
890
- // In this case the toolbox closes, so the newElement should be null.
891
- if (oldItem === newItem) {
892
- newElement = null;
893
- }
894
- const event = new (eventUtils.get(eventUtils.TOOLBOX_ITEM_SELECT))!
895
- (oldElement, newElement, this.workspace_.id);
896
- eventUtils.fire(event);
897
- }
898
-
899
- /**
900
- * Closes the current item if it is expanded, or selects the parent.
901
- * @return True if a parent category was selected, false otherwise.
902
- */
903
- private selectParent_(): boolean {
904
- if (!this.selectedItem_) {
905
- return false;
906
- }
907
-
908
- if (this.selectedItem_.isCollapsible() &&
909
- (this.selectedItem_ as ICollapsibleToolboxItem).isExpanded()) {
910
- const collapsibleItem = this.selectedItem_ as ICollapsibleToolboxItem;
911
- collapsibleItem.toggleExpanded();
912
- return true;
913
- } else if (
914
- this.selectedItem_.getParent() &&
915
- this.selectedItem_.getParent()!.isSelectable()) {
916
- this.setSelectedItem(this.selectedItem_.getParent());
917
- return true;
918
- }
919
- return false;
920
- }
921
-
922
- /**
923
- * Selects the first child of the currently selected item, or nothing if the
924
- * toolbox item has no children.
925
- * @return True if a child category was selected, false otherwise.
926
- */
927
- private selectChild_(): boolean {
928
- if (!this.selectedItem_ || !this.selectedItem_.isCollapsible()) {
929
- return false;
930
- }
931
- const collapsibleItem = this.selectedItem_ as ICollapsibleToolboxItem;
932
- if (!collapsibleItem.isExpanded()) {
933
- collapsibleItem.toggleExpanded();
934
- return true;
935
- } else {
936
- this.selectNext_();
937
- return true;
938
- }
939
- }
940
-
941
- /**
942
- * Selects the next visible toolbox item.
943
- * @return True if a next category was selected, false otherwise.
944
- */
945
- private selectNext_(): boolean {
946
- if (!this.selectedItem_) {
947
- return false;
948
- }
949
-
950
- let nextItemIdx = this.contents_.indexOf(this.selectedItem_) + 1;
951
- if (nextItemIdx > -1 && nextItemIdx < this.contents_.length) {
952
- let nextItem = this.contents_[nextItemIdx];
953
- while (nextItem && !nextItem.isSelectable()) {
954
- nextItem = this.contents_[++nextItemIdx];
955
- }
956
- if (nextItem && nextItem.isSelectable()) {
957
- this.setSelectedItem(nextItem);
958
- return true;
959
- }
960
- }
961
- return false;
962
- }
963
-
964
- /**
965
- * Selects the previous visible toolbox item.
966
- * @return True if a previous category was selected, false otherwise.
967
- */
968
- private selectPrevious_(): boolean {
969
- if (!this.selectedItem_) {
970
- return false;
971
- }
972
-
973
- let prevItemIdx = this.contents_.indexOf(this.selectedItem_) - 1;
974
- if (prevItemIdx > -1 && prevItemIdx < this.contents_.length) {
975
- let prevItem = this.contents_[prevItemIdx];
976
- while (prevItem && !prevItem.isSelectable()) {
977
- prevItem = this.contents_[--prevItemIdx];
978
- }
979
- if (prevItem && prevItem.isSelectable()) {
980
- this.setSelectedItem(prevItem);
981
- return true;
982
- }
983
- }
984
- return false;
985
- }
986
-
987
- /** Disposes of this toolbox. */
988
- dispose() {
989
- this.workspace_.getComponentManager().removeComponent('toolbox');
990
- this.flyout_!.dispose();
991
- for (let i = 0; i < this.contents_.length; i++) {
992
- const toolboxItem = this.contents_[i];
993
- toolboxItem.dispose();
994
- }
995
-
996
- for (let j = 0; j < this.boundEvents_.length; j++) {
997
- browserEvents.unbind(this.boundEvents_[j]);
998
- }
999
- this.boundEvents_ = [];
1000
- this.contents_ = [];
1001
-
1002
- // AnyDuringMigration because: Argument of type 'HTMLDivElement | null' is
1003
- // not assignable to parameter of type 'Element'.
1004
- this.workspace_.getThemeManager().unsubscribe(
1005
- this.HtmlDiv as AnyDuringMigration);
1006
- dom.removeNode(this.HtmlDiv);
1007
- }
1008
- }
1009
-
1010
- /** CSS for Toolbox. See css.js for use. */
1011
- Css.register(`
1012
- .blocklyToolboxDelete {
1013
- cursor: url("<<<PATH>>>/handdelete.cur"), auto;
1014
- }
1015
-
1016
- .blocklyToolboxGrab {
1017
- cursor: url("<<<PATH>>>/handclosed.cur"), auto;
1018
- cursor: grabbing;
1019
- cursor: -webkit-grabbing;
1020
- }
1021
-
1022
- /* Category tree in Toolbox. */
1023
- .blocklyToolboxDiv {
1024
- background-color: #ddd;
1025
- overflow-x: visible;
1026
- overflow-y: auto;
1027
- padding: 4px 0 4px 0;
1028
- position: absolute;
1029
- z-index: 70; /* so blocks go under toolbox when dragging */
1030
- -webkit-tap-highlight-color: transparent; /* issue #1345 */
1031
- }
1032
-
1033
- .blocklyToolboxContents {
1034
- display: flex;
1035
- flex-wrap: wrap;
1036
- flex-direction: column;
1037
- }
1038
-
1039
- .blocklyToolboxContents:focus {
1040
- outline: none;
1041
- }
1042
- `);
1043
-
1044
- registry.register(registry.Type.TOOLBOX, registry.DEFAULT, Toolbox);