blockly 8.0.5 → 9.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (736) hide show
  1. package/blockly.min.js +2002 -2269
  2. package/blockly_compressed.js +1499 -1994
  3. package/blockly_compressed.js.map +1 -1
  4. package/blocks/blocks.js +3 -2
  5. package/blocks/colour.js +3 -1
  6. package/blocks/lists.js +94 -22
  7. package/blocks/logic.js +14 -6
  8. package/blocks/loops.js +5 -3
  9. package/blocks/math.js +3 -1
  10. package/blocks/procedures.js +3 -1
  11. package/blocks/text.js +14 -6
  12. package/blocks/variables.js +3 -1
  13. package/blocks/variables_dynamic.js +3 -1
  14. package/blocks.d.ts +0 -2
  15. package/blocks_compressed.js +189 -171
  16. package/blocks_compressed.js.map +1 -1
  17. package/closure/goog/base.d.ts +1 -0
  18. package/closure/goog/base_minimal.d.ts +18 -0
  19. package/closure/goog/goog.d.ts +25 -0
  20. package/core/any_aliases.d.ts +1 -0
  21. package/core/any_aliases.ts +1 -0
  22. package/core/block.d.ts +779 -0
  23. package/core/{block.js → block.ts} +610 -719
  24. package/core/block_animations.d.ts +33 -0
  25. package/core/{block_animations.js → block_animations.ts} +75 -79
  26. package/core/block_drag_surface.d.ts +111 -0
  27. package/core/{block_drag_surface.js → block_drag_surface.ts} +85 -117
  28. package/core/block_dragger.d.ts +143 -0
  29. package/core/{block_dragger.js → block_dragger.ts} +139 -176
  30. package/core/block_svg.d.ts +588 -0
  31. package/core/{block_svg.js → block_svg.ts} +494 -630
  32. package/core/blockly.d.ts +562 -0
  33. package/core/blockly.js +1 -1
  34. package/core/blockly.ts +749 -0
  35. package/core/blockly_options.d.ts +69 -0
  36. package/core/blockly_options.ts +81 -0
  37. package/core/blocks.d.ts +17 -0
  38. package/core/{blocks.js → blocks.ts} +4 -8
  39. package/core/browser_events.d.ts +85 -0
  40. package/core/{browser_events.js → browser_events.ts} +98 -93
  41. package/core/bubble.d.ts +279 -0
  42. package/core/{bubble.js → bubble.ts} +277 -370
  43. package/core/bubble_dragger.d.ts +73 -0
  44. package/core/bubble_dragger.ts +229 -0
  45. package/core/bump_objects.d.ts +34 -0
  46. package/core/{bump_objects.js → bump_objects.ts} +54 -52
  47. package/core/clipboard.d.ts +42 -0
  48. package/core/clipboard.ts +91 -0
  49. package/core/comment.d.ts +113 -0
  50. package/core/{comment.js → comment.ts} +135 -185
  51. package/core/common.d.ts +129 -0
  52. package/core/{common.js → common.ts} +105 -82
  53. package/core/component_manager.d.ts +91 -0
  54. package/core/component_manager.ts +211 -0
  55. package/core/config.d.ts +23 -0
  56. package/core/{config.js → config.ts} +12 -19
  57. package/core/connection.d.ts +232 -0
  58. package/core/{connection.js → connection.ts} +187 -237
  59. package/core/connection_checker.d.ts +78 -0
  60. package/core/{connection_checker.js → connection_checker.ts} +66 -77
  61. package/core/connection_db.d.ts +91 -0
  62. package/core/{connection_db.js → connection_db.ts} +62 -87
  63. package/core/connection_type.d.ts +15 -0
  64. package/core/{connection_type.js → connection_type.ts} +8 -12
  65. package/core/constants.d.ts +15 -0
  66. package/core/{constants.js → constants.ts} +4 -8
  67. package/core/contextmenu.d.ts +80 -0
  68. package/core/{contextmenu.js → contextmenu.ts} +118 -153
  69. package/core/contextmenu_items.d.ts +77 -0
  70. package/core/contextmenu_items.ts +576 -0
  71. package/core/contextmenu_registry.d.ts +105 -0
  72. package/core/contextmenu_registry.ts +179 -0
  73. package/core/css.d.ts +24 -0
  74. package/core/{css.js → css.ts} +16 -24
  75. package/core/delete_area.d.ts +47 -0
  76. package/core/delete_area.ts +82 -0
  77. package/core/dialog.d.ts +61 -0
  78. package/core/dialog.ts +127 -0
  79. package/core/drag_target.d.ts +63 -0
  80. package/core/drag_target.ts +94 -0
  81. package/core/dropdowndiv.d.ts +155 -0
  82. package/core/{dropdowndiv.js → dropdowndiv.ts} +262 -333
  83. package/core/events/events.d.ts +102 -0
  84. package/core/events/events.ts +123 -0
  85. package/core/events/events_abstract.d.ts +51 -0
  86. package/core/events/events_abstract.ts +112 -0
  87. package/core/events/events_block_base.d.ts +31 -0
  88. package/core/events/events_block_base.ts +65 -0
  89. package/core/events/events_block_change.d.ts +55 -0
  90. package/core/events/{events_block_change.js → events_block_change.ts} +45 -48
  91. package/core/events/events_block_create.d.ts +35 -0
  92. package/core/events/{events_block_create.js → events_block_create.ts} +30 -35
  93. package/core/events/events_block_delete.d.ts +36 -0
  94. package/core/events/{events_block_delete.js → events_block_delete.ts} +34 -39
  95. package/core/events/events_block_drag.d.ts +36 -0
  96. package/core/events/events_block_drag.ts +82 -0
  97. package/core/events/events_block_move.d.ts +51 -0
  98. package/core/events/{events_block_move.js → events_block_move.ts} +54 -50
  99. package/core/events/events_bubble_open.d.ts +35 -0
  100. package/core/events/events_bubble_open.ts +82 -0
  101. package/core/events/events_click.d.ts +36 -0
  102. package/core/events/{events_click.js → events_click.ts} +27 -30
  103. package/core/events/events_comment_base.d.ts +39 -0
  104. package/core/events/events_comment_base.ts +107 -0
  105. package/core/events/events_comment_change.d.ts +43 -0
  106. package/core/events/{events_comment_change.js → events_comment_change.ts} +31 -28
  107. package/core/events/events_comment_create.d.ts +35 -0
  108. package/core/events/{events_comment_create.js → events_comment_create.ts} +24 -26
  109. package/core/events/events_comment_delete.d.ts +35 -0
  110. package/core/events/{events_comment_delete.js → events_comment_delete.ts} +20 -24
  111. package/core/events/events_comment_move.d.ts +55 -0
  112. package/core/events/{events_comment_move.js → events_comment_move.ts} +39 -42
  113. package/core/events/events_marker_move.d.ts +40 -0
  114. package/core/events/events_marker_move.ts +99 -0
  115. package/core/events/events_selected.d.ts +34 -0
  116. package/core/events/events_selected.ts +78 -0
  117. package/core/events/events_theme_change.d.ts +30 -0
  118. package/core/events/{events_theme_change.js → events_theme_change.ts} +19 -24
  119. package/core/events/events_toolbox_item_select.d.ts +34 -0
  120. package/core/events/events_toolbox_item_select.ts +79 -0
  121. package/core/events/events_trashcan_open.d.ts +31 -0
  122. package/core/events/events_trashcan_open.ts +68 -0
  123. package/core/events/events_ui.d.ts +37 -0
  124. package/core/events/{events_ui.js → events_ui.ts} +27 -26
  125. package/core/events/events_ui_base.d.ts +26 -0
  126. package/core/events/{events_ui_base.js → events_ui_base.ts} +17 -26
  127. package/core/events/events_var_base.d.ts +31 -0
  128. package/core/events/events_var_base.ts +65 -0
  129. package/core/events/events_var_create.d.ts +35 -0
  130. package/core/events/{events_var_create.js → events_var_create.ts} +24 -25
  131. package/core/events/events_var_delete.d.ts +35 -0
  132. package/core/events/{events_var_delete.js → events_var_delete.ts} +24 -25
  133. package/core/events/events_var_rename.d.ts +36 -0
  134. package/core/events/{events_var_rename.js → events_var_rename.ts} +25 -26
  135. package/core/events/events_viewport.d.ts +39 -0
  136. package/core/events/events_viewport.ts +100 -0
  137. package/core/events/utils.d.ts +272 -0
  138. package/core/events/{utils.js → utils.ts} +148 -219
  139. package/core/events/workspace_events.d.ts +36 -0
  140. package/core/events/workspace_events.ts +86 -0
  141. package/core/extensions.d.ts +107 -0
  142. package/core/{extensions.js → extensions.ts} +153 -172
  143. package/core/field.d.ts +534 -0
  144. package/core/{field.js → field.ts} +413 -489
  145. package/core/field_angle.d.ts +176 -0
  146. package/core/field_angle.ts +563 -0
  147. package/core/field_checkbox.d.ts +124 -0
  148. package/core/field_checkbox.ts +243 -0
  149. package/core/field_colour.d.ts +200 -0
  150. package/core/field_colour.ts +632 -0
  151. package/core/field_dropdown.d.ts +222 -0
  152. package/core/{field_dropdown.js → field_dropdown.ts} +277 -299
  153. package/core/field_image.d.ts +134 -0
  154. package/core/field_image.ts +282 -0
  155. package/core/field_label.d.ts +71 -0
  156. package/core/field_label.ts +152 -0
  157. package/core/field_label_serializable.d.ts +42 -0
  158. package/core/field_label_serializable.ts +76 -0
  159. package/core/field_multilineinput.d.ts +146 -0
  160. package/core/{field_multilineinput.js → field_multilineinput.ts} +166 -163
  161. package/core/field_number.d.ts +156 -0
  162. package/core/{field_number.js → field_number.ts} +110 -123
  163. package/core/field_registry.d.ts +45 -0
  164. package/core/{field_registry.js → field_registry.ts} +37 -30
  165. package/core/field_textinput.d.ts +219 -0
  166. package/core/field_textinput.ts +591 -0
  167. package/core/field_variable.d.ts +217 -0
  168. package/core/{field_variable.js → field_variable.ts} +174 -187
  169. package/core/flyout_base.d.ts +459 -0
  170. package/core/{flyout_base.js → flyout_base.ts} +429 -518
  171. package/core/flyout_button.d.ts +81 -0
  172. package/core/flyout_button.ts +292 -0
  173. package/core/flyout_horizontal.d.ts +82 -0
  174. package/core/{flyout_horizontal.js → flyout_horizontal.ts} +97 -107
  175. package/core/flyout_metrics_manager.d.ts +40 -0
  176. package/core/{flyout_metrics_manager.js → flyout_metrics_manager.ts} +22 -34
  177. package/core/flyout_vertical.d.ts +83 -0
  178. package/core/{flyout_vertical.js → flyout_vertical.ts} +106 -117
  179. package/core/generator.d.ts +205 -0
  180. package/core/{generator.js → generator.ts} +168 -193
  181. package/core/gesture.d.ts +357 -0
  182. package/core/{gesture.js → gesture.ts} +289 -369
  183. package/core/grid.d.ts +83 -0
  184. package/core/grid.ts +192 -0
  185. package/core/icon.d.ts +78 -0
  186. package/core/icon.ts +189 -0
  187. package/core/inject.d.ts +15 -0
  188. package/core/{inject.js → inject.ts} +101 -100
  189. package/core/input.d.ts +128 -0
  190. package/core/input.ts +309 -0
  191. package/core/input_types.d.ts +14 -0
  192. package/core/{input_types.js → input_types.ts} +8 -12
  193. package/core/insertion_marker_manager.d.ts +212 -0
  194. package/core/{insertion_marker_manager.js → insertion_marker_manager.ts} +234 -236
  195. package/core/interfaces/i_ast_node_location.d.ts +11 -0
  196. package/core/interfaces/{i_ast_node_location.js → i_ast_node_location.ts} +4 -7
  197. package/core/interfaces/i_ast_node_location_svg.d.ts +22 -0
  198. package/core/interfaces/i_ast_node_location_svg.ts +37 -0
  199. package/core/interfaces/i_ast_node_location_with_block.d.ts +18 -0
  200. package/core/interfaces/i_ast_node_location_with_block.ts +38 -0
  201. package/core/interfaces/i_autohideable.d.ts +18 -0
  202. package/core/interfaces/i_autohideable.ts +34 -0
  203. package/core/interfaces/i_block_dragger.d.ts +43 -0
  204. package/core/interfaces/i_block_dragger.ts +67 -0
  205. package/core/interfaces/i_bounded_element.d.ts +24 -0
  206. package/core/interfaces/i_bounded_element.ts +42 -0
  207. package/core/interfaces/i_bubble.d.ts +59 -0
  208. package/core/interfaces/i_bubble.ts +88 -0
  209. package/core/interfaces/i_collapsible_toolbox_item.d.ts +26 -0
  210. package/core/interfaces/i_collapsible_toolbox_item.ts +47 -0
  211. package/core/interfaces/i_component.d.ts +17 -0
  212. package/core/interfaces/{i_component.js → i_component.ts} +9 -14
  213. package/core/interfaces/i_connection_checker.d.ts +69 -0
  214. package/core/interfaces/i_connection_checker.ts +102 -0
  215. package/core/interfaces/i_contextmenu.d.ts +13 -0
  216. package/core/interfaces/i_contextmenu.ts +26 -0
  217. package/core/interfaces/i_copyable.d.ts +24 -0
  218. package/core/interfaces/i_copyable.ts +40 -0
  219. package/core/interfaces/i_deletable.d.ts +16 -0
  220. package/core/interfaces/{i_deletable.js → i_deletable.ts} +9 -13
  221. package/core/interfaces/i_delete_area.d.ts +25 -0
  222. package/core/interfaces/i_delete_area.ts +46 -0
  223. package/core/interfaces/i_drag_target.d.ts +53 -0
  224. package/core/interfaces/i_drag_target.ts +84 -0
  225. package/core/interfaces/i_draggable.d.ts +12 -0
  226. package/core/interfaces/{i_draggable.js → i_draggable.ts} +4 -10
  227. package/core/interfaces/i_flyout.d.ts +134 -0
  228. package/core/interfaces/i_flyout.ts +186 -0
  229. package/core/interfaces/i_keyboard_accessible.d.ts +18 -0
  230. package/core/interfaces/i_keyboard_accessible.ts +35 -0
  231. package/core/interfaces/i_metrics_manager.d.ts +117 -0
  232. package/core/interfaces/i_metrics_manager.ts +151 -0
  233. package/core/interfaces/i_movable.d.ts +16 -0
  234. package/core/interfaces/{i_movable.js → i_movable.ts} +9 -13
  235. package/core/interfaces/i_positionable.d.ts +27 -0
  236. package/core/interfaces/i_positionable.ts +50 -0
  237. package/core/interfaces/i_registrable.d.ts +11 -0
  238. package/core/interfaces/{i_registrable.js → i_registrable.ts} +3 -7
  239. package/core/interfaces/i_registrable_field.d.ts +17 -0
  240. package/core/interfaces/{i_registrable_field.js → i_registrable_field.ts} +8 -16
  241. package/core/interfaces/i_selectable.d.ts +18 -0
  242. package/core/interfaces/i_selectable.ts +34 -0
  243. package/core/interfaces/i_selectable_toolbox_item.d.ts +42 -0
  244. package/core/interfaces/i_selectable_toolbox_item.ts +64 -0
  245. package/core/interfaces/i_serializer.d.ts +42 -0
  246. package/core/interfaces/i_serializer.ts +65 -0
  247. package/core/interfaces/i_styleable.d.ts +21 -0
  248. package/core/interfaces/i_styleable.ts +35 -0
  249. package/core/interfaces/i_toolbox.d.ts +85 -0
  250. package/core/interfaces/i_toolbox.ts +127 -0
  251. package/core/interfaces/i_toolbox_item.d.ts +62 -0
  252. package/core/interfaces/i_toolbox_item.ts +84 -0
  253. package/core/internal_constants.d.ts +40 -0
  254. package/core/{internal_constants.js → internal_constants.ts} +13 -18
  255. package/core/keyboard_nav/ast_node.d.ts +239 -0
  256. package/core/keyboard_nav/{ast_node.js → ast_node.ts} +207 -231
  257. package/core/keyboard_nav/basic_cursor.d.ts +88 -0
  258. package/core/keyboard_nav/{basic_cursor.js → basic_cursor.ts} +55 -66
  259. package/core/keyboard_nav/cursor.d.ts +41 -0
  260. package/core/keyboard_nav/{cursor.js → cursor.ts} +25 -35
  261. package/core/keyboard_nav/marker.d.ts +58 -0
  262. package/core/keyboard_nav/{marker.js → marker.ts} +36 -55
  263. package/core/keyboard_nav/tab_navigate_cursor.d.ts +19 -0
  264. package/core/keyboard_nav/{tab_navigate_cursor.js → tab_navigate_cursor.ts} +11 -15
  265. package/core/main.d.ts +11 -0
  266. package/core/main.js +303 -0
  267. package/core/marker_manager.d.ts +85 -0
  268. package/core/marker_manager.ts +181 -0
  269. package/core/menu.d.ts +149 -0
  270. package/core/{menu.js → menu.ts} +141 -174
  271. package/core/menuitem.d.ts +118 -0
  272. package/core/menuitem.ts +240 -0
  273. package/core/metrics_manager.d.ts +201 -0
  274. package/core/{metrics_manager.js → metrics_manager.ts} +117 -156
  275. package/core/msg.d.ts +9 -0
  276. package/core/{msg.js → msg.ts} +4 -8
  277. package/core/mutator.d.ts +128 -0
  278. package/core/{mutator.js → mutator.ts} +196 -211
  279. package/core/names.d.ts +124 -0
  280. package/core/names.ts +267 -0
  281. package/core/options.d.ts +137 -0
  282. package/core/{options.js → options.ts} +147 -173
  283. package/core/positionable_helpers.d.ts +88 -0
  284. package/core/{positionable_helpers.js → positionable_helpers.ts} +63 -70
  285. package/core/procedures.d.ts +108 -0
  286. package/core/{procedures.js → procedures.ts} +143 -152
  287. package/core/registry.d.ts +137 -0
  288. package/core/registry.ts +339 -0
  289. package/core/rendered_connection.d.ts +191 -0
  290. package/core/{rendered_connection.js → rendered_connection.ts} +164 -184
  291. package/core/renderers/common/block_rendering.d.ts +114 -0
  292. package/core/renderers/common/block_rendering.ts +164 -0
  293. package/core/renderers/common/constants.d.ts +458 -0
  294. package/core/renderers/common/constants.ts +1124 -0
  295. package/core/renderers/common/debug.d.ts +28 -0
  296. package/core/renderers/common/{debug.js → debug.ts} +14 -20
  297. package/core/renderers/common/debugger.d.ts +120 -0
  298. package/core/renderers/common/{debugger.js → debugger.ts} +100 -124
  299. package/core/renderers/common/drawer.d.ts +132 -0
  300. package/core/renderers/common/{drawer.js → drawer.ts} +112 -137
  301. package/core/renderers/common/i_path_object.d.ts +117 -0
  302. package/core/renderers/common/i_path_object.ts +161 -0
  303. package/core/renderers/common/info.d.ts +194 -0
  304. package/core/renderers/common/{info.js → info.ts} +165 -222
  305. package/core/renderers/common/marker_svg.d.ts +220 -0
  306. package/core/renderers/common/marker_svg.ts +680 -0
  307. package/core/renderers/common/path_object.d.ts +146 -0
  308. package/core/renderers/common/path_object.ts +272 -0
  309. package/core/renderers/common/renderer.d.ts +157 -0
  310. package/core/renderers/common/renderer.ts +271 -0
  311. package/core/renderers/geras/constants.d.ts +23 -0
  312. package/core/renderers/geras/constants.ts +61 -0
  313. package/core/renderers/geras/drawer.d.ts +43 -0
  314. package/core/renderers/geras/{drawer.js → drawer.ts} +40 -84
  315. package/core/renderers/geras/geras.d.ts +11 -0
  316. package/core/renderers/geras/geras.ts +37 -0
  317. package/core/renderers/geras/highlight_constants.d.ts +108 -0
  318. package/core/renderers/geras/{highlight_constants.js → highlight_constants.ts} +107 -69
  319. package/core/renderers/geras/highlighter.d.ts +98 -0
  320. package/core/renderers/geras/{highlighter.js → highlighter.ts} +81 -86
  321. package/core/renderers/geras/info.d.ts +45 -0
  322. package/core/renderers/geras/{info.js → info.ts} +61 -99
  323. package/core/renderers/geras/measurables/inline_input.d.ts +23 -0
  324. package/core/renderers/geras/measurables/inline_input.ts +51 -0
  325. package/core/renderers/geras/measurables/statement_input.d.ts +23 -0
  326. package/core/renderers/geras/measurables/statement_input.ts +50 -0
  327. package/core/renderers/geras/path_object.d.ts +47 -0
  328. package/core/renderers/geras/{path_object.js → path_object.ts} +46 -74
  329. package/core/renderers/geras/renderer.d.ts +69 -0
  330. package/core/renderers/geras/renderer.ts +126 -0
  331. package/core/renderers/measurables/base.d.ts +27 -0
  332. package/core/renderers/measurables/base.ts +53 -0
  333. package/core/renderers/measurables/bottom_row.d.ts +61 -0
  334. package/core/renderers/measurables/bottom_row.ts +120 -0
  335. package/core/renderers/measurables/connection.d.ts +25 -0
  336. package/core/renderers/measurables/connection.ts +52 -0
  337. package/core/renderers/measurables/external_value_input.d.ts +27 -0
  338. package/core/renderers/measurables/external_value_input.ts +65 -0
  339. package/core/renderers/measurables/field.d.ts +30 -0
  340. package/core/renderers/measurables/field.ts +63 -0
  341. package/core/renderers/measurables/hat.d.ts +21 -0
  342. package/core/renderers/measurables/{hat.js → hat.ts} +12 -14
  343. package/core/renderers/measurables/icon.d.ts +26 -0
  344. package/core/renderers/measurables/{icon.js → icon.ts} +14 -18
  345. package/core/renderers/measurables/in_row_spacer.d.ts +21 -0
  346. package/core/renderers/measurables/in_row_spacer.ts +44 -0
  347. package/core/renderers/measurables/inline_input.d.ts +24 -0
  348. package/core/renderers/measurables/{inline_input.js → inline_input.ts} +22 -26
  349. package/core/renderers/measurables/input_connection.d.ts +29 -0
  350. package/core/renderers/measurables/input_connection.ts +66 -0
  351. package/core/renderers/measurables/input_row.d.ts +30 -0
  352. package/core/renderers/measurables/{input_row.js → input_row.ts} +24 -31
  353. package/core/renderers/measurables/jagged_edge.d.ts +20 -0
  354. package/core/renderers/measurables/{jagged_edge.js → jagged_edge.ts} +10 -13
  355. package/core/renderers/measurables/next_connection.d.ts +23 -0
  356. package/core/renderers/measurables/next_connection.ts +47 -0
  357. package/core/renderers/measurables/output_connection.d.ts +26 -0
  358. package/core/renderers/measurables/output_connection.ts +56 -0
  359. package/core/renderers/measurables/previous_connection.d.ts +23 -0
  360. package/core/renderers/measurables/previous_connection.ts +47 -0
  361. package/core/renderers/measurables/round_corner.d.ts +21 -0
  362. package/core/renderers/measurables/round_corner.ts +49 -0
  363. package/core/renderers/measurables/row.d.ts +141 -0
  364. package/core/renderers/measurables/row.ts +225 -0
  365. package/core/renderers/measurables/spacer_row.d.ts +29 -0
  366. package/core/renderers/measurables/spacer_row.ts +55 -0
  367. package/core/renderers/measurables/square_corner.d.ts +21 -0
  368. package/core/renderers/measurables/square_corner.ts +47 -0
  369. package/core/renderers/measurables/statement_input.d.ts +22 -0
  370. package/core/renderers/measurables/{statement_input.js → statement_input.ts} +14 -18
  371. package/core/renderers/measurables/top_row.d.ts +56 -0
  372. package/core/renderers/measurables/top_row.ts +122 -0
  373. package/core/renderers/measurables/types.d.ts +235 -0
  374. package/core/renderers/measurables/types.ts +332 -0
  375. package/core/renderers/minimalist/constants.d.ts +14 -0
  376. package/core/renderers/minimalist/{constants.js → constants.ts} +5 -10
  377. package/core/renderers/minimalist/drawer.d.ts +21 -0
  378. package/core/renderers/minimalist/drawer.ts +38 -0
  379. package/core/renderers/minimalist/info.d.ts +30 -0
  380. package/core/renderers/minimalist/info.ts +52 -0
  381. package/core/renderers/minimalist/minimalist.d.ts +6 -0
  382. package/core/renderers/minimalist/minimalist.ts +22 -0
  383. package/core/renderers/minimalist/renderer.d.ts +41 -0
  384. package/core/renderers/minimalist/renderer.ts +71 -0
  385. package/core/renderers/thrasos/info.d.ts +40 -0
  386. package/core/renderers/thrasos/{info.js → info.ts} +66 -67
  387. package/core/renderers/thrasos/renderer.d.ts +25 -0
  388. package/core/renderers/thrasos/renderer.ts +48 -0
  389. package/core/renderers/thrasos/thrasos.d.ts +4 -0
  390. package/core/renderers/thrasos/thrasos.ts +20 -0
  391. package/core/renderers/zelos/constants.d.ts +186 -0
  392. package/core/renderers/zelos/{constants.js → constants.ts} +294 -441
  393. package/core/renderers/zelos/drawer.d.ts +47 -0
  394. package/core/renderers/zelos/{drawer.js → drawer.ts} +73 -95
  395. package/core/renderers/zelos/info.d.ts +88 -0
  396. package/core/renderers/zelos/{info.js → info.ts} +111 -142
  397. package/core/renderers/zelos/marker_svg.d.ts +46 -0
  398. package/core/renderers/zelos/marker_svg.ts +151 -0
  399. package/core/renderers/zelos/measurables/bottom_row.d.ts +27 -0
  400. package/core/renderers/zelos/measurables/bottom_row.ts +53 -0
  401. package/core/renderers/zelos/measurables/inputs.d.ts +23 -0
  402. package/core/renderers/zelos/measurables/{inputs.js → inputs.ts} +14 -15
  403. package/core/renderers/zelos/measurables/row_elements.d.ts +21 -0
  404. package/core/renderers/zelos/measurables/row_elements.ts +45 -0
  405. package/core/renderers/zelos/measurables/top_row.d.ts +29 -0
  406. package/core/renderers/zelos/measurables/{top_row.js → top_row.ts} +14 -27
  407. package/core/renderers/zelos/path_object.d.ts +77 -0
  408. package/core/renderers/zelos/path_object.ts +215 -0
  409. package/core/renderers/zelos/renderer.d.ts +74 -0
  410. package/core/renderers/zelos/renderer.ts +142 -0
  411. package/core/renderers/zelos/zelos.d.ts +12 -0
  412. package/core/renderers/zelos/zelos.ts +39 -0
  413. package/core/scrollbar.d.ts +277 -0
  414. package/core/{scrollbar.js → scrollbar.ts} +307 -328
  415. package/core/scrollbar_pair.d.ts +105 -0
  416. package/core/{scrollbar_pair.js → scrollbar_pair.ts} +71 -79
  417. package/core/serialization/blocks.d.ts +98 -0
  418. package/core/serialization/{blocks.js → blocks.ts} +229 -228
  419. package/core/serialization/exceptions.d.ts +73 -0
  420. package/core/serialization/exceptions.ts +98 -0
  421. package/core/serialization/priorities.d.ts +15 -0
  422. package/core/serialization/{priorities.js → priorities.ts} +4 -10
  423. package/core/serialization/registry.d.ts +20 -0
  424. package/core/serialization/{registry.js → registry.ts} +11 -13
  425. package/core/serialization/variables.d.ts +14 -0
  426. package/core/serialization/{variables.js → variables.ts} +30 -32
  427. package/core/serialization/workspaces.d.ts +28 -0
  428. package/core/serialization/{workspaces.js → workspaces.ts} +30 -27
  429. package/core/shortcut_items.d.ts +61 -0
  430. package/core/{shortcut_items.js → shortcut_items.ts} +121 -157
  431. package/core/shortcut_registry.d.ts +151 -0
  432. package/core/shortcut_registry.ts +355 -0
  433. package/core/sprites.d.ts +19 -0
  434. package/core/{sprites.js → sprites.ts} +4 -6
  435. package/core/theme/classic.d.ts +12 -0
  436. package/core/theme/{classic.js → classic.ts} +5 -7
  437. package/core/theme/themes.d.ts +8 -0
  438. package/core/theme/themes.ts +22 -0
  439. package/core/theme/zelos.d.ts +11 -0
  440. package/core/theme/{zelos.js → zelos.ts} +4 -7
  441. package/core/theme.d.ts +142 -0
  442. package/core/theme.ts +221 -0
  443. package/core/theme_manager.d.ts +81 -0
  444. package/core/theme_manager.ts +186 -0
  445. package/core/toolbox/category.d.ts +239 -0
  446. package/core/toolbox/category.ts +679 -0
  447. package/core/toolbox/collapsible_category.d.ts +91 -0
  448. package/core/toolbox/collapsible_category.ts +273 -0
  449. package/core/toolbox/separator.d.ts +39 -0
  450. package/core/toolbox/separator.ts +105 -0
  451. package/core/toolbox/toolbox.d.ts +352 -0
  452. package/core/toolbox/{toolbox.js → toolbox.ts} +316 -432
  453. package/core/toolbox/toolbox_item.d.ts +85 -0
  454. package/core/toolbox/toolbox_item.ts +147 -0
  455. package/core/tooltip.d.ts +126 -0
  456. package/core/{tooltip.js → tooltip.ts} +136 -214
  457. package/core/touch.d.ts +121 -0
  458. package/core/touch.ts +306 -0
  459. package/core/touch_gesture.d.ts +115 -0
  460. package/core/{touch_gesture.js → touch_gesture.ts} +87 -125
  461. package/core/trashcan.d.ts +195 -0
  462. package/core/{trashcan.js → trashcan.ts} +226 -312
  463. package/core/utils/aria.d.ts +67 -0
  464. package/core/utils/{aria.js → aria.ts} +47 -61
  465. package/core/utils/array.d.ts +14 -0
  466. package/core/utils/{array.js → array.ts} +10 -12
  467. package/core/utils/colour.d.ts +103 -0
  468. package/core/utils/{colour.js → colour.ts} +60 -72
  469. package/core/utils/coordinate.d.ts +72 -0
  470. package/core/utils/coordinate.ts +124 -0
  471. package/core/utils/deprecation.d.ts +17 -0
  472. package/core/utils/{deprecation.js → deprecation.ts} +11 -11
  473. package/core/utils/dom.d.ts +165 -0
  474. package/core/utils/{dom.js → dom.ts} +125 -147
  475. package/core/utils/idgenerator.d.ts +25 -0
  476. package/core/utils/{idgenerator.js → idgenerator.ts} +15 -18
  477. package/core/utils/keycodes.d.ts +137 -0
  478. package/core/utils/keycodes.ts +169 -0
  479. package/core/utils/math.d.ts +30 -0
  480. package/core/utils/{math.js → math.ts} +17 -19
  481. package/core/utils/metrics.d.ts +64 -0
  482. package/core/utils/metrics.ts +97 -0
  483. package/core/utils/object.d.ts +35 -0
  484. package/core/utils/{object.js → object.ts} +30 -26
  485. package/core/utils/parsing.d.ts +50 -0
  486. package/core/utils/{parsing.js → parsing.ts} +50 -50
  487. package/core/utils/rect.d.ts +38 -0
  488. package/core/utils/{rect.js → rect.ts} +18 -31
  489. package/core/utils/sentinel.d.ts +11 -0
  490. package/core/utils/{sentinel.js → sentinel.ts} +3 -5
  491. package/core/utils/size.d.ts +27 -0
  492. package/core/utils/{size.js → size.ts} +12 -26
  493. package/core/utils/string.d.ts +55 -0
  494. package/core/utils/{string.js → string.ts} +64 -61
  495. package/core/utils/style.d.ts +127 -0
  496. package/core/utils/{style.js → style.ts} +102 -92
  497. package/core/utils/svg.d.ts +68 -0
  498. package/core/utils/svg.ts +88 -0
  499. package/core/utils/svg_math.d.ts +70 -0
  500. package/core/utils/{svg_math.js → svg_math.ts} +72 -71
  501. package/core/utils/svg_paths.d.ts +101 -0
  502. package/core/utils/{svg_paths.js → svg_paths.ts} +56 -65
  503. package/core/utils/toolbox.d.ts +193 -0
  504. package/core/utils/toolbox.ts +433 -0
  505. package/core/utils/useragent.d.ts +33 -0
  506. package/core/utils/useragent.ts +135 -0
  507. package/core/utils/xml.d.ts +52 -0
  508. package/core/utils/{xml.js → xml.ts} +26 -36
  509. package/core/utils.d.ts +217 -0
  510. package/core/utils.ts +428 -0
  511. package/core/variable_map.d.ts +141 -0
  512. package/core/{variable_map.js → variable_map.ts} +131 -149
  513. package/core/variable_model.d.ts +40 -0
  514. package/core/variable_model.ts +82 -0
  515. package/core/variables.d.ts +181 -0
  516. package/core/{variables.js → variables.ts} +206 -188
  517. package/core/variables_dynamic.d.ts +38 -0
  518. package/core/{variables_dynamic.js → variables_dynamic.ts} +47 -43
  519. package/core/warning.d.ts +50 -0
  520. package/core/{warning.js → warning.ts} +52 -66
  521. package/core/widgetdiv.d.ts +69 -0
  522. package/core/widgetdiv.ts +257 -0
  523. package/core/workspace.d.ts +386 -0
  524. package/core/workspace.ts +801 -0
  525. package/core/workspace_audio.d.ts +47 -0
  526. package/core/{workspace_audio.js → workspace_audio.ts} +47 -60
  527. package/core/workspace_comment.d.ts +170 -0
  528. package/core/workspace_comment.ts +398 -0
  529. package/core/workspace_comment_svg.d.ts +329 -0
  530. package/core/{workspace_comment_svg.js → workspace_comment_svg.ts} +347 -444
  531. package/core/workspace_drag_surface_svg.d.ts +68 -0
  532. package/core/{workspace_drag_surface_svg.js → workspace_drag_surface_svg.ts} +75 -82
  533. package/core/workspace_dragger.d.ts +48 -0
  534. package/core/workspace_dragger.ts +104 -0
  535. package/core/workspace_svg.d.ts +920 -0
  536. package/core/{workspace_svg.js → workspace_svg.ts} +855 -935
  537. package/core/xml.d.ts +117 -0
  538. package/core/{xml.js → xml.ts} +306 -326
  539. package/core/zoom_controls.d.ts +130 -0
  540. package/core/{zoom_controls.js → zoom_controls.ts} +185 -251
  541. package/core.d.ts +1 -3
  542. package/core.js +1 -2
  543. package/dart.d.ts +0 -3
  544. package/dart_compressed.js +387 -99
  545. package/dart_compressed.js.map +1 -1
  546. package/generators/dart/all.js +2 -0
  547. package/generators/dart/colour.js +1 -1
  548. package/generators/dart/lists.js +1 -1
  549. package/generators/dart/logic.js +1 -1
  550. package/generators/dart/loops.js +1 -1
  551. package/generators/dart/math.js +1 -1
  552. package/generators/dart/procedures.js +1 -1
  553. package/generators/dart/text.js +1 -1
  554. package/generators/dart/variables.js +1 -1
  555. package/generators/dart/variables_dynamic.js +1 -1
  556. package/generators/dart.js +1 -2
  557. package/generators/javascript/all.js +2 -0
  558. package/generators/javascript/colour.js +1 -1
  559. package/generators/javascript/lists.js +1 -1
  560. package/generators/javascript/logic.js +1 -1
  561. package/generators/javascript/loops.js +1 -1
  562. package/generators/javascript/math.js +4 -4
  563. package/generators/javascript/procedures.js +1 -1
  564. package/generators/javascript/text.js +2 -2
  565. package/generators/javascript/variables.js +1 -1
  566. package/generators/javascript/variables_dynamic.js +1 -1
  567. package/generators/javascript.js +1 -3
  568. package/generators/lua/all.js +2 -0
  569. package/generators/lua/colour.js +1 -1
  570. package/generators/lua/lists.js +1 -1
  571. package/generators/lua/logic.js +1 -1
  572. package/generators/lua/loops.js +1 -1
  573. package/generators/lua/math.js +1 -1
  574. package/generators/lua/procedures.js +1 -1
  575. package/generators/lua/text.js +1 -1
  576. package/generators/lua/variables.js +1 -1
  577. package/generators/lua/variables_dynamic.js +1 -1
  578. package/generators/lua.js +1 -2
  579. package/generators/php/all.js +2 -0
  580. package/generators/php/colour.js +1 -1
  581. package/generators/php/lists.js +1 -2
  582. package/generators/php/logic.js +1 -1
  583. package/generators/php/loops.js +1 -1
  584. package/generators/php/math.js +1 -1
  585. package/generators/php/procedures.js +1 -1
  586. package/generators/php/text.js +1 -1
  587. package/generators/php/variables.js +1 -1
  588. package/generators/php/variables_dynamic.js +1 -1
  589. package/generators/php.js +1 -2
  590. package/generators/python/all.js +2 -0
  591. package/generators/python/colour.js +3 -3
  592. package/generators/python/lists.js +1 -1
  593. package/generators/python/logic.js +1 -1
  594. package/generators/python/loops.js +4 -7
  595. package/generators/python/math.js +1 -1
  596. package/generators/python/procedures.js +1 -1
  597. package/generators/python/text.js +1 -1
  598. package/generators/python/variables.js +1 -1
  599. package/generators/python/variables_dynamic.js +1 -1
  600. package/generators/python.js +1 -2
  601. package/index.d.ts +2 -8
  602. package/javascript.d.ts +0 -3
  603. package/javascript_compressed.js +314 -104
  604. package/javascript_compressed.js.map +1 -1
  605. package/lua.d.ts +0 -3
  606. package/lua_compressed.js +399 -81
  607. package/lua_compressed.js.map +1 -1
  608. package/package.json +5 -5
  609. package/php.d.ts +0 -3
  610. package/php_compressed.js +322 -93
  611. package/php_compressed.js.map +1 -1
  612. package/python.d.ts +0 -3
  613. package/python_compressed.js +237 -90
  614. package/python_compressed.js.map +1 -1
  615. package/blockly.d.ts +0 -26127
  616. package/core/blockly_options.js +0 -28
  617. package/core/bubble_dragger.js +0 -298
  618. package/core/clipboard.js +0 -80
  619. package/core/component_manager.js +0 -263
  620. package/core/contextmenu_items.js +0 -651
  621. package/core/contextmenu_registry.js +0 -178
  622. package/core/delete_area.js +0 -87
  623. package/core/dialog.js +0 -107
  624. package/core/drag_target.js +0 -98
  625. package/core/events/events.js +0 -147
  626. package/core/events/events_abstract.js +0 -133
  627. package/core/events/events_block_base.js +0 -70
  628. package/core/events/events_block_drag.js +0 -89
  629. package/core/events/events_bubble_open.js +0 -90
  630. package/core/events/events_comment_base.js +0 -121
  631. package/core/events/events_marker_move.js +0 -110
  632. package/core/events/events_selected.js +0 -83
  633. package/core/events/events_toolbox_item_select.js +0 -84
  634. package/core/events/events_trashcan_open.js +0 -73
  635. package/core/events/events_var_base.js +0 -70
  636. package/core/events/events_viewport.js +0 -107
  637. package/core/events/workspace_events.js +0 -93
  638. package/core/field_angle.js +0 -591
  639. package/core/field_checkbox.js +0 -255
  640. package/core/field_colour.js +0 -717
  641. package/core/field_image.js +0 -304
  642. package/core/field_label.js +0 -149
  643. package/core/field_label_serializable.js +0 -80
  644. package/core/field_textinput.js +0 -619
  645. package/core/flyout_button.js +0 -356
  646. package/core/grid.js +0 -226
  647. package/core/icon.js +0 -225
  648. package/core/input.js +0 -335
  649. package/core/interfaces/i_ast_node_location_svg.js +0 -45
  650. package/core/interfaces/i_ast_node_location_with_block.js +0 -41
  651. package/core/interfaces/i_autohideable.js +0 -40
  652. package/core/interfaces/i_block_dragger.js +0 -66
  653. package/core/interfaces/i_bounded_element.js +0 -45
  654. package/core/interfaces/i_bubble.js +0 -95
  655. package/core/interfaces/i_collapsible_toolbox_item.js +0 -53
  656. package/core/interfaces/i_connection_checker.js +0 -104
  657. package/core/interfaces/i_contextmenu.js +0 -32
  658. package/core/interfaces/i_copyable.js +0 -49
  659. package/core/interfaces/i_delete_area.js +0 -50
  660. package/core/interfaces/i_drag_target.js +0 -88
  661. package/core/interfaces/i_flyout.js +0 -201
  662. package/core/interfaces/i_keyboard_accessible.js +0 -38
  663. package/core/interfaces/i_metrics_manager.js +0 -154
  664. package/core/interfaces/i_positionable.js +0 -51
  665. package/core/interfaces/i_selectable.js +0 -51
  666. package/core/interfaces/i_selectable_toolbox_item.js +0 -73
  667. package/core/interfaces/i_serializer.js +0 -77
  668. package/core/interfaces/i_styleable.js +0 -39
  669. package/core/interfaces/i_toolbox.js +0 -142
  670. package/core/interfaces/i_toolbox_item.js +0 -85
  671. package/core/marker_manager.js +0 -213
  672. package/core/menuitem.js +0 -292
  673. package/core/names.js +0 -293
  674. package/core/registry.js +0 -384
  675. package/core/renderers/common/block_rendering.js +0 -170
  676. package/core/renderers/common/constants.js +0 -1250
  677. package/core/renderers/common/i_path_object.js +0 -162
  678. package/core/renderers/common/marker_svg.js +0 -721
  679. package/core/renderers/common/path_object.js +0 -283
  680. package/core/renderers/common/renderer.js +0 -305
  681. package/core/renderers/geras/constants.js +0 -73
  682. package/core/renderers/geras/geras.js +0 -36
  683. package/core/renderers/geras/measurables/inline_input.js +0 -58
  684. package/core/renderers/geras/measurables/statement_input.js +0 -57
  685. package/core/renderers/geras/renderer.js +0 -149
  686. package/core/renderers/measurables/base.js +0 -64
  687. package/core/renderers/measurables/bottom_row.js +0 -138
  688. package/core/renderers/measurables/connection.js +0 -56
  689. package/core/renderers/measurables/external_value_input.js +0 -70
  690. package/core/renderers/measurables/field.js +0 -71
  691. package/core/renderers/measurables/in_row_spacer.js +0 -47
  692. package/core/renderers/measurables/input_connection.js +0 -75
  693. package/core/renderers/measurables/next_connection.js +0 -50
  694. package/core/renderers/measurables/output_connection.js +0 -61
  695. package/core/renderers/measurables/previous_connection.js +0 -50
  696. package/core/renderers/measurables/round_corner.js +0 -52
  697. package/core/renderers/measurables/row.js +0 -247
  698. package/core/renderers/measurables/spacer_row.js +0 -69
  699. package/core/renderers/measurables/square_corner.js +0 -50
  700. package/core/renderers/measurables/top_row.js +0 -143
  701. package/core/renderers/measurables/types.js +0 -353
  702. package/core/renderers/minimalist/drawer.js +0 -42
  703. package/core/renderers/minimalist/info.js +0 -54
  704. package/core/renderers/minimalist/minimalist.js +0 -26
  705. package/core/renderers/minimalist/renderer.js +0 -80
  706. package/core/renderers/thrasos/renderer.js +0 -53
  707. package/core/renderers/thrasos/thrasos.js +0 -22
  708. package/core/renderers/zelos/marker_svg.js +0 -179
  709. package/core/renderers/zelos/measurables/bottom_row.js +0 -66
  710. package/core/renderers/zelos/measurables/row_elements.js +0 -46
  711. package/core/renderers/zelos/path_object.js +0 -247
  712. package/core/renderers/zelos/renderer.js +0 -147
  713. package/core/renderers/zelos/zelos.js +0 -38
  714. package/core/serialization/exceptions.js +0 -144
  715. package/core/shortcut_registry.js +0 -366
  716. package/core/theme/themes.js +0 -23
  717. package/core/theme.js +0 -228
  718. package/core/theme_manager.js +0 -211
  719. package/core/toolbox/category.js +0 -751
  720. package/core/toolbox/collapsible_category.js +0 -311
  721. package/core/toolbox/separator.js +0 -133
  722. package/core/toolbox/toolbox_item.js +0 -173
  723. package/core/touch.js +0 -285
  724. package/core/utils/coordinate.js +0 -138
  725. package/core/utils/global.js +0 -41
  726. package/core/utils/keycodes.js +0 -172
  727. package/core/utils/metrics.js +0 -154
  728. package/core/utils/svg.js +0 -186
  729. package/core/utils/toolbox.js +0 -459
  730. package/core/utils/useragent.js +0 -197
  731. package/core/utils.js +0 -383
  732. package/core/variable_model.js +0 -96
  733. package/core/widgetdiv.js +0 -290
  734. package/core/workspace.js +0 -836
  735. package/core/workspace_comment.js +0 -400
  736. package/core/workspace_dragger.js +0 -115
@@ -7,24 +7,22 @@
7
7
  /**
8
8
  * @fileoverview Object representing a scrollbar.
9
9
  */
10
- 'use strict';
11
10
 
12
11
  /**
13
12
  * Object representing a scrollbar.
14
13
  * @class
15
14
  */
16
- goog.module('Blockly.Scrollbar');
15
+ import * as goog from '../closure/goog/goog.js';
16
+ goog.declareModuleId('Blockly.Scrollbar');
17
17
 
18
- const Touch = goog.require('Blockly.Touch');
19
- const browserEvents = goog.require('Blockly.browserEvents');
20
- const dom = goog.require('Blockly.utils.dom');
21
- const svgMath = goog.require('Blockly.utils.svgMath');
22
- const {Coordinate} = goog.require('Blockly.utils.Coordinate');
23
- /* eslint-disable-next-line no-unused-vars */
24
- const {Metrics} = goog.requireType('Blockly.utils.Metrics');
25
- const {Svg} = goog.require('Blockly.utils.Svg');
26
- /* eslint-disable-next-line no-unused-vars */
27
- const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
18
+ import * as browserEvents from './browser_events.js';
19
+ import * as Touch from './touch.js';
20
+ import {Coordinate} from './utils/coordinate.js';
21
+ import * as dom from './utils/dom.js';
22
+ import type {Metrics} from './utils/metrics.js';
23
+ import {Svg} from './utils/svg.js';
24
+ import * as svgMath from './utils/svg_math.js';
25
+ import type {WorkspaceSvg} from './workspace_svg.js';
28
26
 
29
27
 
30
28
  /**
@@ -38,144 +36,105 @@ const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
38
36
  * look or behave like the system's scrollbars.
39
37
  * @alias Blockly.Scrollbar
40
38
  */
41
- class Scrollbar {
39
+ export class Scrollbar {
42
40
  /**
43
- * @param {!WorkspaceSvg} workspace Workspace to bind the scrollbar to.
44
- * @param {boolean} horizontal True if horizontal, false if vertical.
45
- * @param {boolean=} opt_pair True if scrollbar is part of a horiz/vert pair.
46
- * @param {string=} opt_class A class to be applied to this scrollbar.
47
- * @param {number=} opt_margin The margin to apply to this scrollbar.
41
+ * Width of vertical scrollbar or height of horizontal scrollbar in CSS
42
+ * pixels. Scrollbars should be larger on touch devices.
48
43
  */
49
- constructor(workspace, horizontal, opt_pair, opt_class, opt_margin) {
50
- /**
51
- * The workspace this scrollbar is bound to.
52
- * @type {!WorkspaceSvg}
53
- * @private
54
- */
55
- this.workspace_ = workspace;
56
- /**
57
- * Whether this scrollbar is part of a pair.
58
- * @type {boolean}
59
- * @private
60
- */
61
- this.pair_ = opt_pair || false;
62
- /**
63
- * Whether this is a horizontal scrollbar.
64
- * @type {boolean}
65
- * @private
66
- */
67
- this.horizontal_ = horizontal;
68
- /**
69
- * Margin around the scrollbar (between the scrollbar and the edge of the
70
- * viewport in pixels).
71
- * @type {number}
72
- * @const
73
- * @private
74
- */
75
- this.margin_ = (opt_margin !== undefined) ?
76
- opt_margin :
77
- Scrollbar.DEFAULT_SCROLLBAR_MARGIN;
78
- /**
79
- * Previously recorded metrics from the workspace.
80
- * @type {?Metrics}
81
- * @private
82
- */
83
- this.oldHostMetrics_ = null;
84
- /**
85
- * The ratio of handle position offset to workspace content displacement.
86
- * @type {?number}
87
- * @package
88
- */
89
- this.ratio = null;
44
+ static scrollbarThickness = Touch.TOUCH_ENABLED ? 25 : 15;
90
45
 
91
- /**
92
- * The location of the origin of the workspace that the scrollbar is in,
93
- * measured in CSS pixels relative to the injection div origin. This is
94
- * usually (0, 0). When the scrollbar is in a flyout it may have a
95
- * different origin.
96
- * @type {Coordinate}
97
- * @private
98
- */
99
- this.origin_ = new Coordinate(0, 0);
46
+ /**
47
+ * Default margin around the scrollbar (between the scrollbar and the edge of
48
+ * the viewport in pixels).
49
+ * @internal
50
+ */
51
+ static readonly DEFAULT_SCROLLBAR_MARGIN = 0.5;
52
+ private readonly pair_: boolean;
53
+ private readonly margin_: number;
100
54
 
101
- /**
102
- * The position of the mouse along this scrollbar's major axis at the start
103
- * of the most recent drag. Units are CSS pixels, with (0, 0) at the top
104
- * left of the browser window. For a horizontal scrollbar this is the x
105
- * coordinate of the mouse down event; for a vertical scrollbar it's the y
106
- * coordinate of the mouse down event.
107
- * @type {number}
108
- * @private
109
- */
110
- this.startDragMouse_ = 0;
55
+ /** Previously recorded metrics from the workspace. */
56
+ private oldHostMetrics_: Metrics|null = null;
111
57
 
112
- /**
113
- * The length of the scrollbars (including the handle and the background),
114
- * in CSS pixels. This is equivalent to scrollbar background length and the
115
- * area within which the scrollbar handle can move.
116
- * @type {number}
117
- * @private
118
- */
119
- this.scrollbarLength_ = 0;
58
+ /**
59
+ * The ratio of handle position offset to workspace content displacement.
60
+ * @internal
61
+ */
62
+ ratio = 1;
63
+ private origin_: Coordinate;
120
64
 
121
- /**
122
- * The length of the scrollbar handle in CSS pixels.
123
- * @type {number}
124
- * @private
125
- */
126
- this.handleLength_ = 0;
65
+ /**
66
+ * The position of the mouse along this scrollbar's major axis at the start
67
+ * of the most recent drag. Units are CSS pixels, with (0, 0) at the top
68
+ * left of the browser window. For a horizontal scrollbar this is the x
69
+ * coordinate of the mouse down event; for a vertical scrollbar it's the y
70
+ * coordinate of the mouse down event.
71
+ */
72
+ private startDragMouse_ = 0;
127
73
 
128
- /**
129
- * The offset of the start of the handle from the scrollbar position, in CSS
130
- * pixels.
131
- * @type {number}
132
- * @private
133
- */
134
- this.handlePosition_ = 0;
74
+ /**
75
+ * The length of the scrollbars (including the handle and the background),
76
+ * in CSS pixels. This is equivalent to scrollbar background length and the
77
+ * area within which the scrollbar handle can move.
78
+ */
79
+ private scrollbarLength_ = 0;
135
80
 
136
- /**
137
- * @type {number}
138
- * @private
139
- */
140
- this.startDragHandle = 0;
81
+ /** The length of the scrollbar handle in CSS pixels. */
82
+ private handleLength_ = 0;
141
83
 
142
- /**
143
- * Whether the scrollbar handle is visible.
144
- * @type {boolean}
145
- * @private
146
- */
147
- this.isVisible_ = true;
84
+ /**
85
+ * The offset of the start of the handle from the scrollbar position, in CSS
86
+ * pixels.
87
+ */
88
+ private handlePosition_ = 0;
148
89
 
149
- /**
150
- * Whether the workspace containing this scrollbar is visible.
151
- * @type {boolean}
152
- * @private
153
- */
154
- this.containerVisible_ = true;
90
+ private startDragHandle = 0;
155
91
 
156
- /**
157
- * @type {?SVGRectElement}
158
- * @private
159
- */
160
- this.svgBackground_ = null;
92
+ /** Whether the scrollbar handle is visible. */
93
+ private isVisible_ = true;
161
94
 
162
- /**
163
- * @type {?SVGRectElement}
164
- * @private
165
- */
166
- this.svgHandle_ = null;
95
+ /** Whether the workspace containing this scrollbar is visible. */
96
+ private containerVisible_ = true;
97
+ private svgBackground_: SVGRectElement|null = null;
167
98
 
99
+ private svgHandle_: SVGRectElement|null = null;
100
+
101
+ private outerSvg_: SVGSVGElement|null = null;
102
+
103
+ private svgGroup_: SVGGElement|null = null;
104
+ position: Coordinate;
105
+
106
+ lengthAttribute_ = 'width';
107
+ positionAttribute_ = 'x';
108
+ onMouseDownBarWrapper_: AnyDuringMigration;
109
+ onMouseDownHandleWrapper_: AnyDuringMigration;
110
+
111
+ /**
112
+ * @param workspace Workspace to bind the scrollbar to.
113
+ * @param horizontal True if horizontal, false if vertical.
114
+ * @param opt_pair True if scrollbar is part of a horiz/vert pair.
115
+ * @param opt_class A class to be applied to this scrollbar.
116
+ * @param opt_margin The margin to apply to this scrollbar.
117
+ */
118
+ constructor(
119
+ private workspace: WorkspaceSvg, private readonly horizontal: boolean,
120
+ opt_pair?: boolean, opt_class?: string, opt_margin?: number) {
121
+ /** Whether this scrollbar is part of a pair. */
122
+ this.pair_ = opt_pair || false;
168
123
  /**
169
- * @type {?SVGSVGElement}
170
- * @private
124
+ * Margin around the scrollbar (between the scrollbar and the edge of the
125
+ * viewport in pixels).
171
126
  */
172
- this.outerSvg_ = null;
127
+ this.margin_ = opt_margin !== undefined ?
128
+ opt_margin :
129
+ Scrollbar.DEFAULT_SCROLLBAR_MARGIN;
173
130
 
174
131
  /**
175
- * @type {?SVGGElement}
176
- * @private
132
+ * The location of the origin of the workspace that the scrollbar is in,
133
+ * measured in CSS pixels relative to the injection div origin. This is
134
+ * usually (0, 0). When the scrollbar is in a flyout it may have a
135
+ * different origin.
177
136
  */
178
- this.svgGroup_ = null;
137
+ this.origin_ = new Coordinate(0, 0);
179
138
 
180
139
  this.createDom_(opt_class);
181
140
 
@@ -183,35 +142,42 @@ class Scrollbar {
183
142
  * The upper left corner of the scrollbar's SVG group in CSS pixels relative
184
143
  * to the scrollbar's origin. This is usually relative to the injection div
185
144
  * origin.
186
- * @type {Coordinate}
187
- * @package
145
+ * @internal
188
146
  */
189
147
  this.position = new Coordinate(0, 0);
190
148
 
191
149
  // Store the thickness in a temp variable for readability.
192
150
  const scrollbarThickness = Scrollbar.scrollbarThickness;
193
151
  if (horizontal) {
194
- this.svgBackground_.setAttribute('height', scrollbarThickness);
195
- this.outerSvg_.setAttribute('height', scrollbarThickness);
196
- this.svgHandle_.setAttribute('height', scrollbarThickness - 5);
197
- this.svgHandle_.setAttribute('y', 2.5);
198
-
199
- this.lengthAttribute_ = 'width';
200
- this.positionAttribute_ = 'x';
152
+ this.svgBackground_!.setAttribute(
153
+ 'height', scrollbarThickness.toString());
154
+ this.outerSvg_!.setAttribute('height', scrollbarThickness.toString());
155
+ this.svgHandle_!.setAttribute(
156
+ 'height', (scrollbarThickness - 5).toString());
157
+ this.svgHandle_!.setAttribute('y', (2.5).toString());
201
158
  } else {
202
- this.svgBackground_.setAttribute('width', scrollbarThickness);
203
- this.outerSvg_.setAttribute('width', scrollbarThickness);
204
- this.svgHandle_.setAttribute('width', scrollbarThickness - 5);
205
- this.svgHandle_.setAttribute('x', 2.5);
159
+ this.svgBackground_!.setAttribute('width', scrollbarThickness.toString());
160
+ this.outerSvg_!.setAttribute('width', scrollbarThickness.toString());
161
+ this.svgHandle_!.setAttribute(
162
+ 'width', (scrollbarThickness - 5).toString());
163
+ // AnyDuringMigration because: Argument of type 'number' is not
164
+ // assignable to parameter of type 'string'.
165
+ this.svgHandle_!.setAttribute('x', (2.5).toString());
206
166
 
207
167
  this.lengthAttribute_ = 'height';
208
168
  this.positionAttribute_ = 'y';
209
169
  }
210
170
  const scrollbar = this;
171
+ // AnyDuringMigration because: Argument of type 'SVGRectElement | null' is
172
+ // not assignable to parameter of type 'EventTarget'.
211
173
  this.onMouseDownBarWrapper_ = browserEvents.conditionalBind(
212
- this.svgBackground_, 'mousedown', scrollbar, scrollbar.onMouseDownBar_);
174
+ this.svgBackground_ as AnyDuringMigration, 'mousedown', scrollbar,
175
+ scrollbar.onMouseDownBar_);
176
+ // AnyDuringMigration because: Argument of type 'SVGRectElement | null' is
177
+ // not assignable to parameter of type 'EventTarget'.
213
178
  this.onMouseDownHandleWrapper_ = browserEvents.conditionalBind(
214
- this.svgHandle_, 'mousedown', scrollbar, scrollbar.onMouseDownHandle_);
179
+ this.svgHandle_ as AnyDuringMigration, 'mousedown', scrollbar,
180
+ scrollbar.onMouseDownHandle_);
215
181
  }
216
182
 
217
183
  /**
@@ -231,21 +197,21 @@ class Scrollbar {
231
197
  this.svgGroup_ = null;
232
198
  this.svgBackground_ = null;
233
199
  if (this.svgHandle_) {
234
- this.workspace_.getThemeManager().unsubscribe(this.svgHandle_);
200
+ this.workspace.getThemeManager().unsubscribe(this.svgHandle_);
235
201
  this.svgHandle_ = null;
236
202
  }
237
- this.workspace_ = null;
203
+ // AnyDuringMigration because: Type 'null' is not assignable to type
204
+ // 'WorkspaceSvg'.
205
+ this.workspace = null as AnyDuringMigration;
238
206
  }
239
207
 
240
208
  /**
241
209
  * Constrain the handle's length within the minimum (0) and maximum
242
210
  * (scrollbar background) values allowed for the scrollbar.
243
- * @param {number} value Value that is potentially out of bounds, in CSS
244
- * pixels.
245
- * @return {number} Constrained value, in CSS pixels.
246
- * @private
211
+ * @param value Value that is potentially out of bounds, in CSS pixels.
212
+ * @return Constrained value, in CSS pixels.
247
213
  */
248
- constrainHandleLength_(value) {
214
+ private constrainHandleLength_(value: number): number {
249
215
  if (value <= 0 || isNaN(value)) {
250
216
  value = 0;
251
217
  } else {
@@ -257,23 +223,23 @@ class Scrollbar {
257
223
  /**
258
224
  * Set the length of the scrollbar's handle and change the SVG attribute
259
225
  * accordingly.
260
- * @param {number} newLength The new scrollbar handle length in CSS pixels.
261
- * @private
226
+ * @param newLength The new scrollbar handle length in CSS pixels.
262
227
  */
263
- setHandleLength_(newLength) {
228
+ private setHandleLength_(newLength: number) {
264
229
  this.handleLength_ = newLength;
265
- this.svgHandle_.setAttribute(this.lengthAttribute_, this.handleLength_);
230
+ // AnyDuringMigration because: Argument of type 'number' is not assignable
231
+ // to parameter of type 'string'.
232
+ this.svgHandle_!.setAttribute(
233
+ this.lengthAttribute_, this.handleLength_ as AnyDuringMigration);
266
234
  }
267
235
 
268
236
  /**
269
237
  * Constrain the handle's position within the minimum (0) and maximum values
270
238
  * allowed for the scrollbar.
271
- * @param {number} value Value that is potentially out of bounds, in CSS
272
- * pixels.
273
- * @return {number} Constrained value, in CSS pixels.
274
- * @private
239
+ * @param value Value that is potentially out of bounds, in CSS pixels.
240
+ * @return Constrained value, in CSS pixels.
275
241
  */
276
- constrainHandlePosition_(value) {
242
+ private constrainHandlePosition_(value: number): number {
277
243
  if (value <= 0 || isNaN(value)) {
278
244
  value = 0;
279
245
  } else {
@@ -288,55 +254,61 @@ class Scrollbar {
288
254
  /**
289
255
  * Set the offset of the scrollbar's handle from the scrollbar's position, and
290
256
  * change the SVG attribute accordingly.
291
- * @param {number} newPosition The new scrollbar handle offset in CSS pixels.
257
+ * @param newPosition The new scrollbar handle offset in CSS pixels.
292
258
  */
293
- setHandlePosition(newPosition) {
259
+ setHandlePosition(newPosition: number) {
294
260
  this.handlePosition_ = newPosition;
295
- this.svgHandle_.setAttribute(this.positionAttribute_, this.handlePosition_);
261
+ // AnyDuringMigration because: Argument of type 'number' is not assignable
262
+ // to parameter of type 'string'.
263
+ this.svgHandle_!.setAttribute(
264
+ this.positionAttribute_, this.handlePosition_ as AnyDuringMigration);
296
265
  }
297
266
 
298
267
  /**
299
268
  * Set the size of the scrollbar's background and change the SVG attribute
300
269
  * accordingly.
301
- * @param {number} newSize The new scrollbar background length in CSS pixels.
302
- * @private
270
+ * @param newSize The new scrollbar background length in CSS pixels.
303
271
  */
304
- setScrollbarLength_(newSize) {
272
+ private setScrollbarLength_(newSize: number) {
305
273
  this.scrollbarLength_ = newSize;
306
- this.outerSvg_.setAttribute(this.lengthAttribute_, this.scrollbarLength_);
307
- this.svgBackground_.setAttribute(
308
- this.lengthAttribute_, this.scrollbarLength_);
274
+ // AnyDuringMigration because: Argument of type 'number' is not assignable
275
+ // to parameter of type 'string'.
276
+ this.outerSvg_!.setAttribute(
277
+ this.lengthAttribute_, this.scrollbarLength_ as AnyDuringMigration);
278
+ // AnyDuringMigration because: Argument of type 'number' is not assignable
279
+ // to parameter of type 'string'.
280
+ this.svgBackground_!.setAttribute(
281
+ this.lengthAttribute_, this.scrollbarLength_ as AnyDuringMigration);
309
282
  }
310
283
 
311
284
  /**
312
285
  * Set the position of the scrollbar's SVG group in CSS pixels relative to the
313
286
  * scrollbar's origin. This sets the scrollbar's location within the
314
287
  * workspace.
315
- * @param {number} x The new x coordinate.
316
- * @param {number} y The new y coordinate.
317
- * @package
288
+ * @param x The new x coordinate.
289
+ * @param y The new y coordinate.
290
+ * @internal
318
291
  */
319
- setPosition(x, y) {
292
+ setPosition(x: number, y: number) {
320
293
  this.position.x = x;
321
294
  this.position.y = y;
322
295
 
323
296
  const tempX = this.position.x + this.origin_.x;
324
297
  const tempY = this.position.y + this.origin_.y;
325
298
  const transform = 'translate(' + tempX + 'px,' + tempY + 'px)';
326
- dom.setCssTransform(/** @type {!Element} */ (this.outerSvg_), transform);
299
+ dom.setCssTransform(this.outerSvg_ as Element, transform);
327
300
  }
328
301
 
329
302
  /**
330
303
  * Recalculate the scrollbar's location and its length.
331
- * @param {Metrics=} opt_metrics A data structure of from the
332
- * describing all the required dimensions. If not provided, it will be
333
- * fetched from the host object.
304
+ * @param opt_metrics A data structure of from the describing all the required
305
+ * dimensions. If not provided, it will be fetched from the host object.
334
306
  */
335
- resize(opt_metrics) {
307
+ resize(opt_metrics?: Metrics) {
336
308
  // Determine the location, height and width of the host element.
337
309
  let hostMetrics = opt_metrics;
338
310
  if (!hostMetrics) {
339
- hostMetrics = this.workspace_.getMetrics();
311
+ hostMetrics = this.workspace.getMetrics();
340
312
  if (!hostMetrics) {
341
313
  // Host element is likely not visible.
342
314
  return;
@@ -348,7 +320,7 @@ class Scrollbar {
348
320
  return;
349
321
  }
350
322
 
351
- if (this.horizontal_) {
323
+ if (this.horizontal) {
352
324
  this.resizeHorizontal_(hostMetrics);
353
325
  } else {
354
326
  this.resizeVertical_(hostMetrics);
@@ -363,12 +335,11 @@ class Scrollbar {
363
335
  /**
364
336
  * Returns whether the a resizeView is necessary by comparing the passed
365
337
  * hostMetrics with cached old host metrics.
366
- * @param {!Metrics} hostMetrics A data structure describing all
367
- * the required dimensions, possibly fetched from the host object.
368
- * @return {boolean} Whether a resizeView is necessary.
369
- * @private
338
+ * @param hostMetrics A data structure describing all the required dimensions,
339
+ * possibly fetched from the host object.
340
+ * @return Whether a resizeView is necessary.
370
341
  */
371
- requiresViewResize_(hostMetrics) {
342
+ private requiresViewResize_(hostMetrics: Metrics): boolean {
372
343
  if (!this.oldHostMetrics_) {
373
344
  return true;
374
345
  }
@@ -380,11 +351,10 @@ class Scrollbar {
380
351
 
381
352
  /**
382
353
  * Recalculate a horizontal scrollbar's location and length.
383
- * @param {!Metrics} hostMetrics A data structure describing all
384
- * the required dimensions, possibly fetched from the host object.
385
- * @private
354
+ * @param hostMetrics A data structure describing all the required dimensions,
355
+ * possibly fetched from the host object.
386
356
  */
387
- resizeHorizontal_(hostMetrics) {
357
+ private resizeHorizontal_(hostMetrics: Metrics) {
388
358
  if (this.requiresViewResize_(hostMetrics)) {
389
359
  this.resizeViewHorizontal(hostMetrics);
390
360
  } else {
@@ -396,10 +366,10 @@ class Scrollbar {
396
366
  * Recalculate a horizontal scrollbar's location on the screen and path
397
367
  * length. This should be called when the layout or size of the window has
398
368
  * changed.
399
- * @param {!Metrics} hostMetrics A data structure describing all
400
- * the required dimensions, possibly fetched from the host object.
369
+ * @param hostMetrics A data structure describing all the required dimensions,
370
+ * possibly fetched from the host object.
401
371
  */
402
- resizeViewHorizontal(hostMetrics) {
372
+ resizeViewHorizontal(hostMetrics: Metrics) {
403
373
  let viewSize = hostMetrics.viewWidth - this.margin_ * 2;
404
374
  if (this.pair_) {
405
375
  // Shorten the scrollbar to make room for the corner square.
@@ -408,7 +378,7 @@ class Scrollbar {
408
378
  this.setScrollbarLength_(Math.max(0, viewSize));
409
379
 
410
380
  let xCoordinate = hostMetrics.absoluteLeft + this.margin_;
411
- if (this.pair_ && this.workspace_.RTL) {
381
+ if (this.pair_ && this.workspace.RTL) {
412
382
  xCoordinate += Scrollbar.scrollbarThickness;
413
383
  }
414
384
 
@@ -426,10 +396,10 @@ class Scrollbar {
426
396
  /**
427
397
  * Recalculate a horizontal scrollbar's location within its path and length.
428
398
  * This should be called when the contents of the workspace have changed.
429
- * @param {!Metrics} hostMetrics A data structure describing all
430
- * the required dimensions, possibly fetched from the host object.
399
+ * @param hostMetrics A data structure describing all the required dimensions,
400
+ * possibly fetched from the host object.
431
401
  */
432
- resizeContentHorizontal(hostMetrics) {
402
+ resizeContentHorizontal(hostMetrics: Metrics) {
433
403
  if (hostMetrics.viewWidth >= hostMetrics.scrollWidth) {
434
404
  // viewWidth is often greater than scrollWidth in flyouts and
435
405
  // non-scrollable workspaces.
@@ -479,11 +449,10 @@ class Scrollbar {
479
449
 
480
450
  /**
481
451
  * Recalculate a vertical scrollbar's location and length.
482
- * @param {!Metrics} hostMetrics A data structure describing all
483
- * the required dimensions, possibly fetched from the host object.
484
- * @private
452
+ * @param hostMetrics A data structure describing all the required dimensions,
453
+ * possibly fetched from the host object.
485
454
  */
486
- resizeVertical_(hostMetrics) {
455
+ private resizeVertical_(hostMetrics: Metrics) {
487
456
  if (this.requiresViewResize_(hostMetrics)) {
488
457
  this.resizeViewVertical(hostMetrics);
489
458
  } else {
@@ -494,10 +463,10 @@ class Scrollbar {
494
463
  /**
495
464
  * Recalculate a vertical scrollbar's location on the screen and path length.
496
465
  * This should be called when the layout or size of the window has changed.
497
- * @param {!Metrics} hostMetrics A data structure describing all
498
- * the required dimensions, possibly fetched from the host object.
466
+ * @param hostMetrics A data structure describing all the required dimensions,
467
+ * possibly fetched from the host object.
499
468
  */
500
- resizeViewVertical(hostMetrics) {
469
+ resizeViewVertical(hostMetrics: Metrics) {
501
470
  let viewSize = hostMetrics.viewHeight - this.margin_ * 2;
502
471
  if (this.pair_) {
503
472
  // Shorten the scrollbar to make room for the corner square.
@@ -505,7 +474,7 @@ class Scrollbar {
505
474
  }
506
475
  this.setScrollbarLength_(Math.max(0, viewSize));
507
476
 
508
- const xCoordinate = this.workspace_.RTL ?
477
+ const xCoordinate = this.workspace.RTL ?
509
478
  hostMetrics.absoluteLeft + this.margin_ :
510
479
  hostMetrics.absoluteLeft + hostMetrics.viewWidth -
511
480
  Scrollbar.scrollbarThickness - this.margin_;
@@ -521,10 +490,10 @@ class Scrollbar {
521
490
  /**
522
491
  * Recalculate a vertical scrollbar's location within its path and length.
523
492
  * This should be called when the contents of the workspace have changed.
524
- * @param {!Metrics} hostMetrics A data structure describing all
525
- * the required dimensions, possibly fetched from the host object.
493
+ * @param hostMetrics A data structure describing all the required dimensions,
494
+ * possibly fetched from the host object.
526
495
  */
527
- resizeContentVertical(hostMetrics) {
496
+ resizeContentVertical(hostMetrics: Metrics) {
528
497
  if (hostMetrics.viewHeight >= hostMetrics.scrollHeight) {
529
498
  // viewHeight is often greater than scrollHeight in flyouts and
530
499
  // non-scrollable workspaces.
@@ -575,55 +544,70 @@ class Scrollbar {
575
544
  /**
576
545
  * Create all the DOM elements required for a scrollbar.
577
546
  * The resulting widget is not sized.
578
- * @param {string=} opt_class A class to be applied to this scrollbar.
579
- * @private
547
+ * @param opt_class A class to be applied to this scrollbar.
580
548
  */
581
- createDom_(opt_class) {
549
+ private createDom_(opt_class?: string) {
582
550
  /* Create the following DOM:
583
- <svg class="blocklyScrollbarHorizontal optionalClass">
584
- <g>
585
- <rect class="blocklyScrollbarBackground" />
586
- <rect class="blocklyScrollbarHandle" rx="8" ry="8" />
587
- </g>
588
- </svg>
589
- */
551
+ <svg class="blocklyScrollbarHorizontal optionalClass">
552
+ <g>
553
+ <rect class="blocklyScrollbarBackground" />
554
+ <rect class="blocklyScrollbarHandle" rx="8" ry="8" />
555
+ </g>
556
+ </svg>
557
+ */
590
558
  let className =
591
- 'blocklyScrollbar' + (this.horizontal_ ? 'Horizontal' : 'Vertical');
559
+ 'blocklyScrollbar' + (this.horizontal ? 'Horizontal' : 'Vertical');
592
560
  if (opt_class) {
593
561
  className += ' ' + opt_class;
594
562
  }
595
- this.outerSvg_ = dom.createSvgElement(Svg.SVG, {'class': className}, null);
596
- this.svgGroup_ = dom.createSvgElement(Svg.G, {}, this.outerSvg_);
563
+ this.outerSvg_ = dom.createSvgElement(Svg.SVG, {'class': className});
564
+ // AnyDuringMigration because: Argument of type 'SVGSVGElement | null' is
565
+ // not assignable to parameter of type 'Element | undefined'.
566
+ this.svgGroup_ =
567
+ dom.createSvgElement(Svg.G, {}, this.outerSvg_ as AnyDuringMigration);
568
+ // AnyDuringMigration because: Argument of type 'SVGGElement | null' is not
569
+ // assignable to parameter of type 'Element | undefined'.
597
570
  this.svgBackground_ = dom.createSvgElement(
598
- Svg.RECT, {'class': 'blocklyScrollbarBackground'}, this.svgGroup_);
571
+ Svg.RECT, {'class': 'blocklyScrollbarBackground'},
572
+ this.svgGroup_ as AnyDuringMigration);
599
573
  const radius = Math.floor((Scrollbar.scrollbarThickness - 5) / 2);
574
+ // AnyDuringMigration because: Argument of type 'SVGGElement | null' is not
575
+ // assignable to parameter of type 'Element | undefined'.
600
576
  this.svgHandle_ = dom.createSvgElement(
601
577
  Svg.RECT,
602
578
  {'class': 'blocklyScrollbarHandle', 'rx': radius, 'ry': radius},
603
- this.svgGroup_);
604
- this.workspace_.getThemeManager().subscribe(
605
- this.svgHandle_, 'scrollbarColour', 'fill');
606
- this.workspace_.getThemeManager().subscribe(
607
- this.svgHandle_, 'scrollbarOpacity', 'fill-opacity');
608
- dom.insertAfter(this.outerSvg_, this.workspace_.getParentSvg());
579
+ this.svgGroup_ as AnyDuringMigration);
580
+ // AnyDuringMigration because: Argument of type 'SVGRectElement | null' is
581
+ // not assignable to parameter of type 'Element'.
582
+ this.workspace.getThemeManager().subscribe(
583
+ this.svgHandle_ as AnyDuringMigration, 'scrollbarColour', 'fill');
584
+ // AnyDuringMigration because: Argument of type 'SVGRectElement | null' is
585
+ // not assignable to parameter of type 'Element'.
586
+ this.workspace.getThemeManager().subscribe(
587
+ this.svgHandle_ as AnyDuringMigration, 'scrollbarOpacity',
588
+ 'fill-opacity');
589
+ // AnyDuringMigration because: Argument of type 'SVGSVGElement | null' is
590
+ // not assignable to parameter of type 'Element'.
591
+ dom.insertAfter(
592
+ this.outerSvg_ as AnyDuringMigration, this.workspace.getParentSvg());
609
593
  }
610
594
 
611
595
  /**
612
596
  * Is the scrollbar visible. Non-paired scrollbars disappear when they aren't
613
597
  * needed.
614
- * @return {boolean} True if visible.
598
+ * @return True if visible.
615
599
  */
616
- isVisible() {
600
+ isVisible(): boolean {
617
601
  return this.isVisible_;
618
602
  }
619
603
 
620
604
  /**
621
605
  * Set whether the scrollbar's container is visible and update
622
606
  * display accordingly if visibility has changed.
623
- * @param {boolean} visible Whether the container is visible
607
+ * @param visible Whether the container is visible
624
608
  */
625
- setContainerVisible(visible) {
626
- const visibilityChanged = (visible !== this.containerVisible_);
609
+ setContainerVisible(visible: boolean) {
610
+ const visibilityChanged = visible !== this.containerVisible_;
627
611
 
628
612
  this.containerVisible_ = visible;
629
613
  if (visibilityChanged) {
@@ -634,10 +618,10 @@ class Scrollbar {
634
618
  /**
635
619
  * Set whether the scrollbar is visible.
636
620
  * Only applies to non-paired scrollbars.
637
- * @param {boolean} visible True if visible.
621
+ * @param visible True if visible.
638
622
  */
639
- setVisible(visible) {
640
- const visibilityChanged = (visible !== this.isVisible());
623
+ setVisible(visible: boolean) {
624
+ const visibilityChanged = visible !== this.isVisible();
641
625
 
642
626
  // Ideally this would also apply to scrollbar pairs, but that's a bigger
643
627
  // headache (due to interactions with the corner square).
@@ -665,20 +649,19 @@ class Scrollbar {
665
649
  show = this.isVisible();
666
650
  }
667
651
  if (show) {
668
- this.outerSvg_.setAttribute('display', 'block');
652
+ this.outerSvg_!.setAttribute('display', 'block');
669
653
  } else {
670
- this.outerSvg_.setAttribute('display', 'none');
654
+ this.outerSvg_!.setAttribute('display', 'none');
671
655
  }
672
656
  }
673
657
 
674
658
  /**
675
659
  * Scroll by one pageful.
676
660
  * Called when scrollbar background is clicked.
677
- * @param {!Event} e Mouse down event.
678
- * @private
661
+ * @param e Mouse down event.
679
662
  */
680
- onMouseDownBar_(e) {
681
- this.workspace_.markFocused();
663
+ private onMouseDownBar_(e: MouseEvent) {
664
+ this.workspace.markFocused();
682
665
  Touch.clearTouchIdentifier(); // This is really a click.
683
666
  this.cleanUp_();
684
667
  if (browserEvents.isRightButton(e)) {
@@ -688,13 +671,11 @@ class Scrollbar {
688
671
  return;
689
672
  }
690
673
  const mouseXY = browserEvents.mouseToSvg(
691
- e, this.workspace_.getParentSvg(),
692
- this.workspace_.getInverseScreenCTM());
693
- const mouseLocation = this.horizontal_ ? mouseXY.x : mouseXY.y;
674
+ e, this.workspace.getParentSvg(), this.workspace.getInverseScreenCTM());
675
+ const mouseLocation = this.horizontal ? mouseXY.x : mouseXY.y;
694
676
 
695
- const handleXY =
696
- svgMath.getInjectionDivXY(/** @type {!Element} */ (this.svgHandle_));
697
- const handleStart = this.horizontal_ ? handleXY.x : handleXY.y;
677
+ const handleXY = svgMath.getInjectionDivXY(this.svgHandle_ as Element);
678
+ const handleStart = this.horizontal ? handleXY.x : handleXY.y;
698
679
  let handlePosition = this.handlePosition_;
699
680
 
700
681
  const pageLength = this.handleLength_ * 0.95;
@@ -716,11 +697,10 @@ class Scrollbar {
716
697
  /**
717
698
  * Start a dragging operation.
718
699
  * Called when scrollbar handle is clicked.
719
- * @param {!Event} e Mouse down event.
720
- * @private
700
+ * @param e Mouse down event.
721
701
  */
722
- onMouseDownHandle_(e) {
723
- this.workspace_.markFocused();
702
+ private onMouseDownHandle_(e: MouseEvent) {
703
+ this.workspace.markFocused();
724
704
  this.cleanUp_();
725
705
  if (browserEvents.isRightButton(e)) {
726
706
  // Right-click.
@@ -734,25 +714,38 @@ class Scrollbar {
734
714
  // Tell the workspace to setup its drag surface since it is about to move.
735
715
  // onMouseMoveHandle will call onScroll which actually tells the workspace
736
716
  // to move.
737
- this.workspace_.setupDragSurface();
717
+ this.workspace.setupDragSurface();
738
718
 
739
719
  // Record the current mouse position.
740
- this.startDragMouse_ = this.horizontal_ ? e.clientX : e.clientY;
741
- Scrollbar.onMouseUpWrapper_ = browserEvents.conditionalBind(
742
- document, 'mouseup', this, this.onMouseUpHandle_);
743
- Scrollbar.onMouseMoveWrapper_ = browserEvents.conditionalBind(
744
- document, 'mousemove', this, this.onMouseMoveHandle_);
720
+ // AnyDuringMigration because: Property 'clientY' does not exist on type
721
+ // 'Event'. AnyDuringMigration because: Property 'clientX' does not exist
722
+ // on type 'Event'.
723
+ this.startDragMouse_ = this.horizontal ? (e as AnyDuringMigration).clientX :
724
+ (e as AnyDuringMigration).clientY;
725
+ // AnyDuringMigration because: Property 'onMouseUpWrapper_' does not exist
726
+ // on type 'typeof Scrollbar'.
727
+ (Scrollbar as AnyDuringMigration).onMouseUpWrapper_ =
728
+ browserEvents.conditionalBind(
729
+ document, 'mouseup', this, this.onMouseUpHandle_);
730
+ // AnyDuringMigration because: Property 'onMouseMoveWrapper_' does not
731
+ // exist on type 'typeof Scrollbar'.
732
+ (Scrollbar as AnyDuringMigration).onMouseMoveWrapper_ =
733
+ browserEvents.conditionalBind(
734
+ document, 'mousemove', this, this.onMouseMoveHandle_);
745
735
  e.stopPropagation();
746
736
  e.preventDefault();
747
737
  }
748
738
 
749
739
  /**
750
740
  * Drag the scrollbar's handle.
751
- * @param {!Event} e Mouse up event.
752
- * @private
741
+ * @param e Mouse up event.
753
742
  */
754
- onMouseMoveHandle_(e) {
755
- const currentMouse = this.horizontal_ ? e.clientX : e.clientY;
743
+ private onMouseMoveHandle_(e: Event) {
744
+ // AnyDuringMigration because: Property 'clientY' does not exist on type
745
+ // 'Event'. AnyDuringMigration because: Property 'clientX' does not exist
746
+ // on type 'Event'.
747
+ const currentMouse = this.horizontal ? (e as AnyDuringMigration).clientX :
748
+ (e as AnyDuringMigration).clientY;
756
749
  const mouseDelta = currentMouse - this.startDragMouse_;
757
750
  const handlePosition = this.startDragHandle + mouseDelta;
758
751
  // Position the bar.
@@ -760,13 +753,10 @@ class Scrollbar {
760
753
  this.updateMetrics_();
761
754
  }
762
755
 
763
- /**
764
- * Release the scrollbar handle and reset state accordingly.
765
- * @private
766
- */
767
- onMouseUpHandle_() {
756
+ /** Release the scrollbar handle and reset state accordingly. */
757
+ private onMouseUpHandle_() {
768
758
  // Tell the workspace to clean up now that the workspace is done moving.
769
- this.workspace_.resetDragSurface();
759
+ this.workspace.resetDragSurface();
770
760
  Touch.clearTouchIdentifier();
771
761
  this.cleanUp_();
772
762
  }
@@ -774,26 +764,38 @@ class Scrollbar {
774
764
  /**
775
765
  * Hide chaff and stop binding to mouseup and mousemove events. Call this to
776
766
  * wrap up loose ends associated with the scrollbar.
777
- * @private
778
767
  */
779
- cleanUp_() {
780
- this.workspace_.hideChaff(true);
781
- if (Scrollbar.onMouseUpWrapper_) {
782
- browserEvents.unbind(Scrollbar.onMouseUpWrapper_);
783
- Scrollbar.onMouseUpWrapper_ = null;
768
+ private cleanUp_() {
769
+ this.workspace.hideChaff(true);
770
+ // AnyDuringMigration because: Property 'onMouseUpWrapper_' does not exist
771
+ // on type 'typeof Scrollbar'.
772
+ if ((Scrollbar as AnyDuringMigration).onMouseUpWrapper_) {
773
+ // AnyDuringMigration because: Property 'onMouseUpWrapper_' does not
774
+ // exist on type 'typeof Scrollbar'.
775
+ browserEvents.unbind((Scrollbar as AnyDuringMigration).onMouseUpWrapper_);
776
+ // AnyDuringMigration because: Property 'onMouseUpWrapper_' does not
777
+ // exist on type 'typeof Scrollbar'.
778
+ (Scrollbar as AnyDuringMigration).onMouseUpWrapper_ = null;
784
779
  }
785
- if (Scrollbar.onMouseMoveWrapper_) {
786
- browserEvents.unbind(Scrollbar.onMouseMoveWrapper_);
787
- Scrollbar.onMouseMoveWrapper_ = null;
780
+ // AnyDuringMigration because: Property 'onMouseMoveWrapper_' does not
781
+ // exist on type 'typeof Scrollbar'.
782
+ if ((Scrollbar as AnyDuringMigration).onMouseMoveWrapper_) {
783
+ // AnyDuringMigration because: Property 'onMouseMoveWrapper_' does not
784
+ // exist on type 'typeof Scrollbar'.
785
+ browserEvents.unbind(
786
+ (Scrollbar as AnyDuringMigration).onMouseMoveWrapper_);
787
+ // AnyDuringMigration because: Property 'onMouseMoveWrapper_' does not
788
+ // exist on type 'typeof Scrollbar'.
789
+ (Scrollbar as AnyDuringMigration).onMouseMoveWrapper_ = null;
788
790
  }
789
791
  }
790
792
 
791
793
  /**
792
794
  * Helper to calculate the ratio of handle position to scrollbar view size.
793
- * @return {number} Ratio.
794
- * @package
795
+ * @return Ratio.
796
+ * @internal
795
797
  */
796
- getRatio_() {
798
+ getRatio_(): number {
797
799
  const scrollHandleRange = this.scrollbarLength_ - this.handleLength_;
798
800
  let ratio = this.handlePosition_ / scrollHandleRange;
799
801
  if (isNaN(ratio)) {
@@ -805,27 +807,29 @@ class Scrollbar {
805
807
  /**
806
808
  * Updates workspace metrics based on new scroll ratio. Called when scrollbar
807
809
  * is moved.
808
- * @private
809
810
  */
810
- updateMetrics_() {
811
+ private updateMetrics_() {
811
812
  const ratio = this.getRatio_();
812
813
  const xyRatio = {};
813
- if (this.horizontal_) {
814
- xyRatio.x = ratio;
814
+ if (this.horizontal) {
815
+ // AnyDuringMigration because: Property 'x' does not exist on type '{}'.
816
+ (xyRatio as AnyDuringMigration).x = ratio;
815
817
  } else {
816
- xyRatio.y = ratio;
818
+ // AnyDuringMigration because: Property 'y' does not exist on type '{}'.
819
+ (xyRatio as AnyDuringMigration).y = ratio;
817
820
  }
818
- this.workspace_.setMetrics(xyRatio);
821
+ // AnyDuringMigration because: Argument of type '{}' is not assignable to
822
+ // parameter of type '{ x: number; y: number; }'.
823
+ this.workspace.setMetrics(xyRatio as AnyDuringMigration);
819
824
  }
820
825
 
821
826
  /**
822
827
  * Set the scrollbar handle's position.
823
- * @param {number} value The content displacement, relative to the view in
824
- * pixels.
825
- * @param {boolean=} updateMetrics Whether to update metrics on this set call.
828
+ * @param value The content displacement, relative to the view in pixels.
829
+ * @param updateMetrics Whether to update metrics on this set call.
826
830
  * Defaults to true.
827
831
  */
828
- set(value, updateMetrics) {
832
+ set(value: number, updateMetrics?: boolean) {
829
833
  this.setHandlePosition(this.constrainHandlePosition_(value * this.ratio));
830
834
  if (updateMetrics || updateMetrics === undefined) {
831
835
  this.updateMetrics_();
@@ -837,26 +841,22 @@ class Scrollbar {
837
841
  * relative to the injection div origin. This is for times when the scrollbar
838
842
  * is used in an object whose origin isn't the same as the main workspace
839
843
  * (e.g. in a flyout.)
840
- * @param {number} x The x coordinate of the scrollbar's origin, in CSS
841
- * pixels.
842
- * @param {number} y The y coordinate of the scrollbar's origin, in CSS
843
- * pixels.
844
+ * @param x The x coordinate of the scrollbar's origin, in CSS pixels.
845
+ * @param y The y coordinate of the scrollbar's origin, in CSS pixels.
844
846
  */
845
- setOrigin(x, y) {
847
+ setOrigin(x: number, y: number) {
846
848
  this.origin_ = new Coordinate(x, y);
847
849
  }
848
850
 
849
851
  /**
850
- * @param {!Metrics} first An object containing computed
851
- * measurements of a workspace.
852
- * @param {!Metrics} second Another object containing computed
853
- * measurements of a workspace.
854
- * @return {boolean} Whether the two sets of metrics are equivalent.
855
- * @private
852
+ * @param first An object containing computed measurements of a workspace.
853
+ * @param second Another object containing computed measurements of a
854
+ * workspace.
855
+ * @return Whether the two sets of metrics are equivalent.
856
856
  */
857
- static metricsAreEquivalent_(first, second) {
858
- return (
859
- first.viewWidth === second.viewWidth &&
857
+ private static metricsAreEquivalent_(first: Metrics, second: Metrics):
858
+ boolean {
859
+ return first.viewWidth === second.viewWidth &&
860
860
  first.viewHeight === second.viewHeight &&
861
861
  first.viewLeft === second.viewLeft &&
862
862
  first.viewTop === second.viewTop &&
@@ -865,27 +865,6 @@ class Scrollbar {
865
865
  first.scrollWidth === second.scrollWidth &&
866
866
  first.scrollHeight === second.scrollHeight &&
867
867
  first.scrollLeft === second.scrollLeft &&
868
- first.scrollTop === second.scrollTop);
868
+ first.scrollTop === second.scrollTop;
869
869
  }
870
870
  }
871
-
872
- /**
873
- * Width of vertical scrollbar or height of horizontal scrollbar in CSS pixels.
874
- * Scrollbars should be larger on touch devices.
875
- */
876
- Scrollbar.scrollbarThickness = 15;
877
-
878
- if (Touch.TOUCH_ENABLED) {
879
- Scrollbar.scrollbarThickness = 25;
880
- }
881
-
882
- /**
883
- * Default margin around the scrollbar (between the scrollbar and the edge of
884
- * the viewport in pixels).
885
- * @type {number}
886
- * @const
887
- * @package
888
- */
889
- Scrollbar.DEFAULT_SCROLLBAR_MARGIN = 0.5;
890
-
891
- exports.Scrollbar = Scrollbar;