blockly 12.0.0-beta.4 → 12.0.0-beta.6

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 (336) hide show
  1. package/blockly.min.js +715 -664
  2. package/blockly.mjs +11 -1
  3. package/blockly_compressed.js +679 -661
  4. package/blockly_compressed.js.map +1 -1
  5. package/blocks_compressed.js +3 -3
  6. package/blocks_compressed.js.map +1 -1
  7. package/core/block.d.ts +1 -16
  8. package/core/block_svg.d.ts +19 -31
  9. package/core/blockly.d.ts +15 -7
  10. package/core/bubbles/bubble.d.ts +22 -3
  11. package/core/bubbles/textinput_bubble.d.ts +3 -5
  12. package/core/comments/rendered_workspace_comment.d.ts +11 -0
  13. package/core/common.d.ts +19 -7
  14. package/core/connection.d.ts +3 -2
  15. package/core/contextmenu_registry.d.ts +11 -9
  16. package/core/dialog.d.ts +36 -16
  17. package/core/events/events.d.ts +0 -2
  18. package/core/events/predicates.d.ts +0 -3
  19. package/core/events/utils.d.ts +1 -5
  20. package/core/field.d.ts +28 -30
  21. package/core/field_dropdown.d.ts +17 -3
  22. package/core/field_image.d.ts +0 -2
  23. package/core/field_input.d.ts +9 -0
  24. package/core/field_variable.d.ts +0 -2
  25. package/core/flyout_base.d.ts +25 -1
  26. package/core/flyout_button.d.ts +15 -13
  27. package/core/flyout_item.d.ts +3 -9
  28. package/core/flyout_navigator.d.ts +11 -0
  29. package/core/flyout_separator.d.ts +20 -1
  30. package/core/focus_manager.d.ts +86 -14
  31. package/core/icons/comment_icon.d.ts +3 -0
  32. package/core/icons/icon.d.ts +13 -0
  33. package/core/icons/mutator_icon.d.ts +3 -0
  34. package/core/icons/warning_icon.d.ts +3 -0
  35. package/core/interfaces/i_autohideable.d.ts +2 -0
  36. package/core/interfaces/i_bubble.d.ts +2 -1
  37. package/core/interfaces/i_flyout.d.ts +2 -1
  38. package/core/interfaces/i_focusable_node.d.ts +71 -8
  39. package/core/interfaces/i_focusable_tree.d.ts +67 -0
  40. package/core/interfaces/i_has_bubble.d.ts +13 -0
  41. package/core/interfaces/i_icon.d.ts +2 -1
  42. package/core/interfaces/i_navigation_policy.d.ts +63 -0
  43. package/core/interfaces/i_selectable.d.ts +7 -1
  44. package/core/interfaces/i_toolbox.d.ts +2 -1
  45. package/core/interfaces/i_toolbox_item.d.ts +2 -1
  46. package/core/keyboard_nav/block_navigation_policy.d.ts +59 -0
  47. package/core/keyboard_nav/connection_navigation_policy.d.ts +67 -0
  48. package/core/keyboard_nav/field_navigation_policy.d.ts +56 -0
  49. package/core/keyboard_nav/flyout_button_navigation_policy.d.ts +56 -0
  50. package/core/keyboard_nav/flyout_navigation_policy.d.ts +65 -0
  51. package/core/keyboard_nav/flyout_separator_navigation_policy.d.ts +33 -0
  52. package/core/keyboard_nav/line_cursor.d.ts +24 -185
  53. package/core/keyboard_nav/marker.d.ts +17 -29
  54. package/core/keyboard_nav/workspace_navigation_policy.d.ts +56 -0
  55. package/core/layer_manager.d.ts +3 -2
  56. package/core/marker_manager.d.ts +0 -26
  57. package/core/navigator.d.ts +65 -0
  58. package/core/rendered_connection.d.ts +24 -1
  59. package/core/renderers/common/block_rendering.d.ts +1 -2
  60. package/core/renderers/common/drawer.d.ts +1 -1
  61. package/core/renderers/common/i_path_object.d.ts +1 -25
  62. package/core/renderers/common/path_object.d.ts +1 -26
  63. package/core/renderers/common/renderer.d.ts +0 -11
  64. package/core/renderers/zelos/drawer.d.ts +1 -1
  65. package/core/renderers/zelos/renderer.d.ts +0 -11
  66. package/core/renderers/zelos/zelos.d.ts +1 -2
  67. package/core/shortcut_registry.d.ts +7 -2
  68. package/core/toast.d.ts +74 -0
  69. package/core/toolbox/toolbox.d.ts +25 -1
  70. package/core/toolbox/toolbox_item.d.ts +11 -0
  71. package/core/utils/aria.d.ts +5 -2
  72. package/core/utils/object.d.ts +3 -0
  73. package/core/variable_map.d.ts +11 -6
  74. package/core/variables.d.ts +3 -1
  75. package/core/workspace.d.ts +11 -11
  76. package/core/workspace_dragger.d.ts +5 -0
  77. package/core/workspace_svg.d.ts +99 -48
  78. package/index.mjs +11 -1
  79. package/msg/ab.js +33 -0
  80. package/msg/ab.mjs +33 -0
  81. package/msg/ace.js +33 -0
  82. package/msg/ace.mjs +33 -0
  83. package/msg/af.js +33 -0
  84. package/msg/af.mjs +33 -0
  85. package/msg/am.js +33 -0
  86. package/msg/am.mjs +33 -0
  87. package/msg/ar.js +33 -0
  88. package/msg/ar.mjs +33 -0
  89. package/msg/ast.js +33 -0
  90. package/msg/ast.mjs +33 -0
  91. package/msg/az.js +33 -0
  92. package/msg/az.mjs +33 -0
  93. package/msg/ba.js +33 -0
  94. package/msg/ba.mjs +33 -0
  95. package/msg/bcc.js +33 -0
  96. package/msg/bcc.mjs +33 -0
  97. package/msg/be-tarask.js +33 -0
  98. package/msg/be-tarask.mjs +33 -0
  99. package/msg/be.js +33 -0
  100. package/msg/be.mjs +33 -0
  101. package/msg/bg.js +33 -0
  102. package/msg/bg.mjs +33 -0
  103. package/msg/bn.js +33 -0
  104. package/msg/bn.mjs +33 -0
  105. package/msg/br.js +33 -0
  106. package/msg/br.mjs +33 -0
  107. package/msg/bs.js +33 -0
  108. package/msg/bs.mjs +33 -0
  109. package/msg/ca.js +33 -0
  110. package/msg/ca.mjs +33 -0
  111. package/msg/cdo.js +33 -0
  112. package/msg/cdo.mjs +33 -0
  113. package/msg/ce.js +33 -0
  114. package/msg/ce.mjs +33 -0
  115. package/msg/cs.js +33 -0
  116. package/msg/cs.mjs +33 -0
  117. package/msg/da.js +33 -0
  118. package/msg/da.mjs +33 -0
  119. package/msg/de.js +33 -0
  120. package/msg/de.mjs +33 -0
  121. package/msg/diq.js +33 -0
  122. package/msg/diq.mjs +33 -0
  123. package/msg/dtp.js +33 -0
  124. package/msg/dtp.mjs +33 -0
  125. package/msg/dty.js +33 -0
  126. package/msg/dty.mjs +33 -0
  127. package/msg/ee.js +33 -0
  128. package/msg/ee.mjs +33 -0
  129. package/msg/el.js +33 -0
  130. package/msg/el.mjs +33 -0
  131. package/msg/en-gb.js +33 -0
  132. package/msg/en-gb.mjs +33 -0
  133. package/msg/en.js +33 -0
  134. package/msg/en.mjs +33 -0
  135. package/msg/eo.js +33 -0
  136. package/msg/eo.mjs +33 -0
  137. package/msg/es.js +33 -0
  138. package/msg/es.mjs +33 -0
  139. package/msg/et.js +33 -0
  140. package/msg/et.mjs +33 -0
  141. package/msg/eu.js +33 -0
  142. package/msg/eu.mjs +33 -0
  143. package/msg/fa.js +33 -0
  144. package/msg/fa.mjs +33 -0
  145. package/msg/fi.js +33 -0
  146. package/msg/fi.mjs +33 -0
  147. package/msg/fo.js +33 -0
  148. package/msg/fo.mjs +33 -0
  149. package/msg/fr.js +33 -0
  150. package/msg/fr.mjs +33 -0
  151. package/msg/frr.js +33 -0
  152. package/msg/frr.mjs +33 -0
  153. package/msg/gl.js +33 -0
  154. package/msg/gl.mjs +33 -0
  155. package/msg/gn.js +33 -0
  156. package/msg/gn.mjs +33 -0
  157. package/msg/gor.js +33 -0
  158. package/msg/gor.mjs +33 -0
  159. package/msg/ha.js +33 -0
  160. package/msg/ha.mjs +33 -0
  161. package/msg/hak.js +33 -0
  162. package/msg/hak.mjs +33 -0
  163. package/msg/he.js +33 -0
  164. package/msg/he.mjs +33 -0
  165. package/msg/hi.js +33 -0
  166. package/msg/hi.mjs +33 -0
  167. package/msg/hr.js +33 -0
  168. package/msg/hr.mjs +33 -0
  169. package/msg/hrx.js +33 -0
  170. package/msg/hrx.mjs +33 -0
  171. package/msg/hsb.js +33 -0
  172. package/msg/hsb.mjs +33 -0
  173. package/msg/hu.js +33 -0
  174. package/msg/hu.mjs +33 -0
  175. package/msg/hy.js +33 -0
  176. package/msg/hy.mjs +33 -0
  177. package/msg/ia.js +33 -0
  178. package/msg/ia.mjs +33 -0
  179. package/msg/id.js +33 -0
  180. package/msg/id.mjs +33 -0
  181. package/msg/ig.js +33 -0
  182. package/msg/ig.mjs +33 -0
  183. package/msg/inh.js +33 -0
  184. package/msg/inh.mjs +33 -0
  185. package/msg/is.js +33 -0
  186. package/msg/is.mjs +33 -0
  187. package/msg/it.js +33 -0
  188. package/msg/it.mjs +33 -0
  189. package/msg/ja.js +33 -0
  190. package/msg/ja.mjs +33 -0
  191. package/msg/ka.js +33 -0
  192. package/msg/ka.mjs +33 -0
  193. package/msg/kab.js +33 -0
  194. package/msg/kab.mjs +33 -0
  195. package/msg/kbd-cyrl.js +33 -0
  196. package/msg/kbd-cyrl.mjs +33 -0
  197. package/msg/km.js +33 -0
  198. package/msg/km.mjs +33 -0
  199. package/msg/kn.js +33 -0
  200. package/msg/kn.mjs +33 -0
  201. package/msg/ko.js +33 -0
  202. package/msg/ko.mjs +33 -0
  203. package/msg/ksh.js +33 -0
  204. package/msg/ksh.mjs +33 -0
  205. package/msg/ku-latn.js +33 -0
  206. package/msg/ku-latn.mjs +33 -0
  207. package/msg/ky.js +33 -0
  208. package/msg/ky.mjs +33 -0
  209. package/msg/la.js +33 -0
  210. package/msg/la.mjs +33 -0
  211. package/msg/lb.js +33 -0
  212. package/msg/lb.mjs +33 -0
  213. package/msg/lki.js +33 -0
  214. package/msg/lki.mjs +33 -0
  215. package/msg/lo.js +33 -0
  216. package/msg/lo.mjs +33 -0
  217. package/msg/lrc.js +33 -0
  218. package/msg/lrc.mjs +33 -0
  219. package/msg/lt.js +33 -0
  220. package/msg/lt.mjs +33 -0
  221. package/msg/lv.js +33 -0
  222. package/msg/lv.mjs +33 -0
  223. package/msg/mg.js +33 -0
  224. package/msg/mg.mjs +33 -0
  225. package/msg/mk.js +33 -0
  226. package/msg/mk.mjs +33 -0
  227. package/msg/ml.js +33 -0
  228. package/msg/ml.mjs +33 -0
  229. package/msg/mnw.js +33 -0
  230. package/msg/mnw.mjs +33 -0
  231. package/msg/ms.js +33 -0
  232. package/msg/ms.mjs +33 -0
  233. package/msg/my.js +33 -0
  234. package/msg/my.mjs +33 -0
  235. package/msg/mzn.js +33 -0
  236. package/msg/mzn.mjs +33 -0
  237. package/msg/nb.js +33 -0
  238. package/msg/nb.mjs +33 -0
  239. package/msg/ne.js +33 -0
  240. package/msg/ne.mjs +33 -0
  241. package/msg/nl.js +33 -0
  242. package/msg/nl.mjs +33 -0
  243. package/msg/oc.js +33 -0
  244. package/msg/oc.mjs +33 -0
  245. package/msg/olo.js +33 -0
  246. package/msg/olo.mjs +33 -0
  247. package/msg/pa.js +33 -0
  248. package/msg/pa.mjs +33 -0
  249. package/msg/pl.js +33 -0
  250. package/msg/pl.mjs +33 -0
  251. package/msg/pms.js +33 -0
  252. package/msg/pms.mjs +33 -0
  253. package/msg/ps.js +33 -0
  254. package/msg/ps.mjs +33 -0
  255. package/msg/pt-br.js +33 -0
  256. package/msg/pt-br.mjs +33 -0
  257. package/msg/pt.js +33 -0
  258. package/msg/pt.mjs +33 -0
  259. package/msg/ro.js +33 -0
  260. package/msg/ro.mjs +33 -0
  261. package/msg/ru.js +33 -0
  262. package/msg/ru.mjs +33 -0
  263. package/msg/sc.js +33 -0
  264. package/msg/sc.mjs +33 -0
  265. package/msg/sco.js +33 -0
  266. package/msg/sco.mjs +33 -0
  267. package/msg/sd.js +33 -0
  268. package/msg/sd.mjs +33 -0
  269. package/msg/shn.js +33 -0
  270. package/msg/shn.mjs +33 -0
  271. package/msg/si.js +33 -0
  272. package/msg/si.mjs +33 -0
  273. package/msg/sk.js +33 -0
  274. package/msg/sk.mjs +33 -0
  275. package/msg/skr-arab.js +33 -0
  276. package/msg/skr-arab.mjs +33 -0
  277. package/msg/sl.js +33 -0
  278. package/msg/sl.mjs +33 -0
  279. package/msg/smn.js +33 -0
  280. package/msg/smn.mjs +33 -0
  281. package/msg/sq.js +33 -0
  282. package/msg/sq.mjs +33 -0
  283. package/msg/sr-latn.js +33 -0
  284. package/msg/sr-latn.mjs +33 -0
  285. package/msg/sr.js +33 -0
  286. package/msg/sr.mjs +33 -0
  287. package/msg/sv.js +33 -0
  288. package/msg/sv.mjs +33 -0
  289. package/msg/sw.js +33 -0
  290. package/msg/sw.mjs +33 -0
  291. package/msg/ta.js +33 -0
  292. package/msg/ta.mjs +33 -0
  293. package/msg/tcy.js +33 -0
  294. package/msg/tcy.mjs +33 -0
  295. package/msg/tdd.js +33 -0
  296. package/msg/tdd.mjs +33 -0
  297. package/msg/te.js +33 -0
  298. package/msg/te.mjs +33 -0
  299. package/msg/th.js +33 -0
  300. package/msg/th.mjs +33 -0
  301. package/msg/ti.js +33 -0
  302. package/msg/ti.mjs +33 -0
  303. package/msg/tl.js +33 -0
  304. package/msg/tl.mjs +33 -0
  305. package/msg/tlh.js +33 -0
  306. package/msg/tlh.mjs +33 -0
  307. package/msg/tr.js +33 -0
  308. package/msg/tr.mjs +33 -0
  309. package/msg/ug-arab.js +33 -0
  310. package/msg/ug-arab.mjs +33 -0
  311. package/msg/uk.js +33 -0
  312. package/msg/uk.mjs +33 -0
  313. package/msg/ur.js +33 -0
  314. package/msg/ur.mjs +33 -0
  315. package/msg/uz.js +33 -0
  316. package/msg/uz.mjs +33 -0
  317. package/msg/vi.js +33 -0
  318. package/msg/vi.mjs +33 -0
  319. package/msg/xmf.js +33 -0
  320. package/msg/xmf.mjs +33 -0
  321. package/msg/yo.js +33 -0
  322. package/msg/yo.mjs +33 -0
  323. package/msg/zgh.js +33 -0
  324. package/msg/zgh.mjs +33 -0
  325. package/msg/zh-hans.js +33 -0
  326. package/msg/zh-hans.mjs +33 -0
  327. package/msg/zh-hant.js +33 -0
  328. package/msg/zh-hant.mjs +33 -0
  329. package/package.json +4 -4
  330. package/core/events/events_marker_move.d.ts +0 -69
  331. package/core/interfaces/i_ast_node_location.d.ts +0 -11
  332. package/core/interfaces/i_ast_node_location_svg.d.ts +0 -24
  333. package/core/interfaces/i_ast_node_location_with_block.d.ts +0 -19
  334. package/core/keyboard_nav/ast_node.d.ts +0 -297
  335. package/core/renderers/common/marker_svg.d.ts +0 -256
  336. package/core/renderers/zelos/marker_svg.d.ts +0 -49
@@ -20,18 +20,19 @@ import { ContextMenuOption } from './contextmenu_registry.js';
20
20
  import type { FlyoutButton } from './flyout_button.js';
21
21
  import { Gesture } from './gesture.js';
22
22
  import { Grid } from './grid.js';
23
- import type { IASTNodeLocationSvg } from './interfaces/i_ast_node_location_svg.js';
24
23
  import type { IBoundedElement } from './interfaces/i_bounded_element.js';
25
24
  import { IContextMenu } from './interfaces/i_contextmenu.js';
26
25
  import type { IDragTarget } from './interfaces/i_drag_target.js';
27
26
  import type { IFlyout } from './interfaces/i_flyout.js';
27
+ import { type IFocusableNode } from './interfaces/i_focusable_node.js';
28
+ import type { IFocusableTree } from './interfaces/i_focusable_tree.js';
28
29
  import type { IMetricsManager } from './interfaces/i_metrics_manager.js';
29
30
  import type { IToolbox } from './interfaces/i_toolbox.js';
30
- import type { IVariableModel, IVariableState } from './interfaces/i_variable_model.js';
31
31
  import type { LineCursor } from './keyboard_nav/line_cursor.js';
32
32
  import type { Marker } from './keyboard_nav/marker.js';
33
33
  import { LayerManager } from './layer_manager.js';
34
34
  import { MarkerManager } from './marker_manager.js';
35
+ import { Navigator } from './navigator.js';
35
36
  import { Options } from './options.js';
36
37
  import type { Renderer } from './renderers/common/renderer.js';
37
38
  import type { ScrollbarPair } from './scrollbar_pair.js';
@@ -51,7 +52,7 @@ import { ZoomControls } from './zoom_controls.js';
51
52
  * Class for a workspace. This is an onscreen area with optional trashcan,
52
53
  * scrollbars, bubbles, and dragging.
53
54
  */
54
- export declare class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg, IContextMenu {
55
+ export declare class WorkspaceSvg extends Workspace implements IContextMenu, IFocusableNode, IFocusableTree {
55
56
  /**
56
57
  * A wrapper function called when a resize event occurs.
57
58
  * You can pass the result to `eventHandling.unbind`.
@@ -235,6 +236,8 @@ export declare class WorkspaceSvg extends Workspace implements IASTNodeLocationS
235
236
  private cachedParentSvg;
236
237
  /** True if keyboard accessibility mode is on, false otherwise. */
237
238
  keyboardAccessibilityMode: boolean;
239
+ /** True iff a keyboard-initiated move ("drag") is in progress. */
240
+ keyboardMoveInProgress: boolean;
238
241
  /** The list of top-level bounded elements on the workspace. */
239
242
  private topBoundedElements;
240
243
  /** The recorded drag targets. */
@@ -246,6 +249,11 @@ export declare class WorkspaceSvg extends Workspace implements IASTNodeLocationS
246
249
  svgBlockCanvas_: SVGElement;
247
250
  svgBubbleCanvas_: SVGElement;
248
251
  zoomControls_: ZoomControls | null;
252
+ /**
253
+ * Navigator that handles moving focus between items in this workspace in
254
+ * response to keyboard navigation commands.
255
+ */
256
+ private navigator;
249
257
  /**
250
258
  * @param options Dictionary of options.
251
259
  */
@@ -275,22 +283,6 @@ export declare class WorkspaceSvg extends Workspace implements IASTNodeLocationS
275
283
  * @returns The component manager.
276
284
  */
277
285
  getComponentManager(): ComponentManager;
278
- /**
279
- * Add the cursor SVG to this workspaces SVG group.
280
- *
281
- * @param cursorSvg The SVG root of the cursor to be added to the workspace
282
- * SVG group.
283
- * @internal
284
- */
285
- setCursorSvg(cursorSvg: SVGElement): void;
286
- /**
287
- * Add the marker SVG to this workspaces SVG group.
288
- *
289
- * @param markerSvg The SVG root of the marker to be added to the workspace
290
- * SVG group.
291
- * @internal
292
- */
293
- setMarkerSvg(markerSvg: SVGElement): void;
294
286
  /**
295
287
  * Get the marker with the given ID.
296
288
  *
@@ -443,6 +435,13 @@ export declare class WorkspaceSvg extends Workspace implements IASTNodeLocationS
443
435
  * @internal
444
436
  */
445
437
  addZoomControls(): void;
438
+ /**
439
+ * Creates a new set of options from this workspace's options with just the
440
+ * values that are relevant to a flyout.
441
+ *
442
+ * @returns A subset of this workspace's options.
443
+ */
444
+ copyOptionsForFlyout(): Options;
446
445
  /**
447
446
  * Add a flyout element in an element with the given tag name.
448
447
  *
@@ -574,38 +573,17 @@ export declare class WorkspaceSvg extends Workspace implements IASTNodeLocationS
574
573
  */
575
574
  highlightBlock(id: string | null, opt_state?: boolean): void;
576
575
  /**
577
- * Refresh the toolbox unless there's a drag in progress.
576
+ * Handles any necessary updates when a variable changes.
578
577
  *
579
578
  * @internal
580
579
  */
581
- refreshToolboxSelection(): void;
582
- /**
583
- * Rename a variable by updating its name in the variable map. Update the
584
- * flyout to show the renamed variable immediately.
585
- *
586
- * @param id ID of the variable to rename.
587
- * @param newName New variable name.
588
- */
589
- renameVariableById(id: string, newName: string): void;
580
+ private variableChangeCallback;
590
581
  /**
591
- * Delete a variable by the passed in ID. Update the flyout to show
592
- * immediately that the variable is deleted.
593
- *
594
- * @param id ID of variable to delete.
595
- */
596
- deleteVariableById(id: string): void;
597
- /**
598
- * Create a new variable with the given name. Update the flyout to show the
599
- * new variable immediately.
582
+ * Refresh the toolbox unless there's a drag in progress.
600
583
  *
601
- * @param name The new variable's name.
602
- * @param opt_type The type of the variable like 'int' or 'string'.
603
- * Does not need to be unique. Field_variable can filter variables based
604
- * on their type. This will default to '' which is a specific type.
605
- * @param opt_id The unique ID of the variable. This will default to a UUID.
606
- * @returns The newly created variable.
584
+ * @internal
607
585
  */
608
- createVariable(name: string, opt_type?: string | null, opt_id?: string | null): IVariableModel<IVariableState>;
586
+ refreshToolboxSelection(): void;
609
587
  /** Make a list of all the delete areas for this workspace. */
610
588
  recordDragTargets(): void;
611
589
  /**
@@ -655,9 +633,36 @@ export declare class WorkspaceSvg extends Workspace implements IASTNodeLocationS
655
633
  */
656
634
  moveDrag(e: PointerEvent): Coordinate;
657
635
  /**
658
- * Is the user currently dragging a block or scrolling the flyout/workspace?
636
+ * Indicate whether a keyboard move is in progress or not.
637
+ *
638
+ * Should be called with true when a keyboard move of an IDraggable
639
+ * is starts, and false when it finishes or is aborted.
640
+ *
641
+ * N.B.: This method is experimental and internal-only. It is
642
+ * intended only to called only from the keyboard navigation plugin.
643
+ * Its signature and behaviour may be modified, or the method
644
+ * removed, at an time without notice and without being treated
645
+ * as a breaking change.
646
+ *
647
+ * TODO(#8960): Delete this.
659
648
  *
660
- * @returns True if currently dragging or scrolling.
649
+ * @internal
650
+ * @param inProgress Is a keyboard-initated move in progress?
651
+ */
652
+ setKeyboardMoveInProgress(inProgress: boolean): void;
653
+ /**
654
+ * Returns true iff the user is currently engaged in a drag gesture,
655
+ * or if a keyboard-initated move is in progress.
656
+ *
657
+ * Dragging gestures normally entail moving a block or other item on
658
+ * the workspace, or scrolling the flyout/workspace.
659
+ *
660
+ * Keyboard-initated movements are implemnted using the dragging
661
+ * infrastructure and are intended to emulate (a subset of) drag
662
+ * gestures and so should typically be treated as if they were a
663
+ * gesture-based drag.
664
+ *
665
+ * @returns True iff a drag gesture or keyboard move is in porgress.
661
666
  */
662
667
  isDragging(): boolean;
663
668
  /**
@@ -938,7 +943,17 @@ export declare class WorkspaceSvg extends Workspace implements IASTNodeLocationS
938
943
  removeToolboxCategoryCallback(key: string): void;
939
944
  /**
940
945
  * Look up the gesture that is tracking this touch stream on this workspace.
941
- * May create a new gesture.
946
+ *
947
+ * Returns the gesture in progress, except:
948
+ *
949
+ * - If there is a keyboard-initiate move in progress then null will
950
+ * be returned - after calling event.preventDefault() and
951
+ * event.stopPropagation() to ensure the pointer event is ignored.
952
+ * - If there is a gesture in progress but event.type is
953
+ * 'pointerdown' then the in-progress gesture will be cancelled;
954
+ * this will result in null being returned.
955
+ * - If no gesutre is in progress but event is a pointerdown then a
956
+ * new gesture will be created and returned.
942
957
  *
943
958
  * @param e Pointer event.
944
959
  * @returns The gesture that is tracking this touch stream, or null if no
@@ -1018,6 +1033,42 @@ export declare class WorkspaceSvg extends Workspace implements IASTNodeLocationS
1018
1033
  * the workspace's viewport.
1019
1034
  */
1020
1035
  scrollBoundsIntoView(bounds: Rect, padding?: number): void;
1036
+ /** See IFocusableNode.getFocusableElement. */
1037
+ getFocusableElement(): HTMLElement | SVGElement;
1038
+ /** See IFocusableNode.getFocusableTree. */
1039
+ getFocusableTree(): IFocusableTree;
1040
+ /** See IFocusableNode.onNodeFocus. */
1041
+ onNodeFocus(): void;
1042
+ /** See IFocusableNode.onNodeBlur. */
1043
+ onNodeBlur(): void;
1044
+ /** See IFocusableNode.canBeFocused. */
1045
+ canBeFocused(): boolean;
1046
+ /** See IFocusableTree.getRootFocusableNode. */
1047
+ getRootFocusableNode(): IFocusableNode;
1048
+ /** See IFocusableTree.getRestoredFocusableNode. */
1049
+ getRestoredFocusableNode(previousNode: IFocusableNode | null): IFocusableNode | null;
1050
+ /** See IFocusableTree.getNestedTrees. */
1051
+ getNestedTrees(): Array<IFocusableTree>;
1052
+ /** See IFocusableTree.lookUpFocusableNode. */
1053
+ lookUpFocusableNode(id: string): IFocusableNode | null;
1054
+ /** See IFocusableTree.onTreeFocus. */
1055
+ onTreeFocus(_node: IFocusableNode, _previousTree: IFocusableTree | null): void;
1056
+ /** See IFocusableTree.onTreeBlur. */
1057
+ onTreeBlur(nextTree: IFocusableTree | null): void;
1058
+ /**
1059
+ * Returns an object responsible for coordinating movement of focus between
1060
+ * items on this workspace in response to keyboard navigation commands.
1061
+ *
1062
+ * @returns This workspace's Navigator instance.
1063
+ */
1064
+ getNavigator(): Navigator;
1065
+ /**
1066
+ * Sets the Navigator instance used by this workspace.
1067
+ *
1068
+ * @param newNavigator A Navigator object to coordinate movement between
1069
+ * elements on the workspace.
1070
+ */
1071
+ setNavigator(newNavigator: Navigator): void;
1021
1072
  }
1022
1073
  /**
1023
1074
  * Size the workspace when the contents change. This also updates
package/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import Blockly from './index.js';
2
2
  export const {
3
- ASTNode,
4
3
  Block,
5
4
  BlockFlyoutInflater,
5
+ BlockNavigationPolicy,
6
6
  BlockSvg,
7
7
  Blocks,
8
8
  ButtonFlyoutInflater,
@@ -15,6 +15,7 @@ export const {
15
15
  Connection,
16
16
  ConnectionChecker,
17
17
  ConnectionDB,
18
+ ConnectionNavigationPolicy,
18
19
  ConnectionType,
19
20
  ContextMenu,
20
21
  ContextMenuItems,
@@ -32,15 +33,21 @@ export const {
32
33
  FieldImage,
33
34
  FieldLabel,
34
35
  FieldLabelSerializable,
36
+ FieldNavigationPolicy,
35
37
  FieldNumber,
36
38
  FieldTextInput,
37
39
  FieldVariable,
38
40
  Flyout,
39
41
  FlyoutButton,
42
+ FlyoutButtonNavigationPolicy,
40
43
  FlyoutItem,
41
44
  FlyoutMetricsManager,
45
+ FlyoutNavigationPolicy,
46
+ FlyoutNavigator,
42
47
  FlyoutSeparator,
48
+ FlyoutSeparatorNavigationPolicy,
43
49
  FocusManager,
50
+ FocusableTreeTraverser,
44
51
  Generator,
45
52
  Gesture,
46
53
  Grid,
@@ -58,6 +65,7 @@ export const {
58
65
  Msg,
59
66
  NEXT_STATEMENT,
60
67
  Names,
68
+ Navigator,
61
69
  OPPOSITE_TYPE,
62
70
  OUTPUT_VALUE,
63
71
  Options,
@@ -78,6 +86,7 @@ export const {
78
86
  Theme,
79
87
  ThemeManager,
80
88
  Themes,
89
+ Toast,
81
90
  Toolbox,
82
91
  ToolboxCategory,
83
92
  ToolboxItem,
@@ -98,6 +107,7 @@ export const {
98
107
  Workspace,
99
108
  WorkspaceAudio,
100
109
  WorkspaceDragger,
110
+ WorkspaceNavigationPolicy,
101
111
  WorkspaceSvg,
102
112
  Xml,
103
113
  ZoomControls,
package/msg/ab.js CHANGED
@@ -17,10 +17,14 @@
17
17
 
18
18
  var Blockly = Blockly || { Msg: Object.create(null) };
19
19
 
20
+ Blockly.Msg["ABORT_MOVE"] = "Abort move"; // untranslated
20
21
  Blockly.Msg["ADD_COMMENT"] = "Иацҵатәуп ахцәажәара";
22
+ Blockly.Msg["ALT_KEY"] = "Alt"; // untranslated
21
23
  Blockly.Msg["CANNOT_DELETE_VARIABLE_PROCEDURE"] = "Can't delete the variable '%1' because it's part of the definition of the function '%2'"; // untranslated
22
24
  Blockly.Msg["CHANGE_VALUE_TITLE"] = "Ишәыԥсах аҵакы";
25
+ Blockly.Msg["CHROME_OS"] = "ChromeOS"; // untranslated
23
26
  Blockly.Msg["CLEAN_UP"] = "Иқәгатәуп аблокқәа";
27
+ Blockly.Msg["CLOSE"] = "Close"; // untranslated
24
28
  Blockly.Msg["COLLAPSED_WARNINGS_WARNING"] = "Collapsed blocks contain warnings."; // untranslated
25
29
  Blockly.Msg["COLLAPSE_ALL"] = "Иеикәрҳәтәуп Аблокқәа";
26
30
  Blockly.Msg["COLLAPSE_BLOCK"] = "Иеикәрҳәтәуп Аблокқәа";
@@ -41,6 +45,7 @@ Blockly.Msg["COLOUR_RGB_HELPURL"] = "https://www.december.com/html/spec/colorper
41
45
  Blockly.Msg["COLOUR_RGB_RED"] = "аҟаԥшь";
42
46
  Blockly.Msg["COLOUR_RGB_TITLE"] = "аԥштәы аҟынтәи";
43
47
  Blockly.Msg["COLOUR_RGB_TOOLTIP"] = "Create a colour with the specified amount of red, green, and blue. All values must be between 0 and 100."; // untranslated
48
+ Blockly.Msg["COMMAND_KEY"] = "⌘ Command"; // untranslated
44
49
  Blockly.Msg["CONTROLS_FLOW_STATEMENTS_HELPURL"] = "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks"; // untranslated
45
50
  Blockly.Msg["CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK"] = "ацикл иҭыҵтәуп";
46
51
  Blockly.Msg["CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE"] = "ииастәуп ацикл анаҩстәи ашьаҿахьы";
@@ -73,8 +78,13 @@ Blockly.Msg["CONTROLS_WHILEUNTIL_OPERATOR_UNTIL"] = "инагӡалатәуп а
73
78
  Blockly.Msg["CONTROLS_WHILEUNTIL_OPERATOR_WHILE"] = "инагӡалатәуп акәзар";
74
79
  Blockly.Msg["CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL"] = "Аҭагылазаашьа мцнаҵы, инанагӡалоит акомандақәа.";
75
80
  Blockly.Msg["CONTROLS_WHILEUNTIL_TOOLTIP_WHILE"] = "Аҭагылазаашьа иашанаҵ, инанагӡалоит акомандақәа.";
81
+ Blockly.Msg["CONTROL_KEY"] = "Ctrl"; // untranslated
82
+ Blockly.Msg["COPY_SHORTCUT"] = "Copy (%1)"; // untranslated
83
+ Blockly.Msg["CUT_SHORTCUT"] = "Cut (%1)"; // untranslated
76
84
  Blockly.Msg["DELETE_ALL_BLOCKS"] = "Ианыхтәуп аблокқәа (%1) зегьы?";
77
85
  Blockly.Msg["DELETE_BLOCK"] = "Ианыхтәуп аблок";
86
+ Blockly.Msg["DELETE_KEY"] = "Del"; // untranslated
87
+ Blockly.Msg["DELETE_SHORTCUT"] = "Delete block (%1)"; // untranslated
78
88
  Blockly.Msg["DELETE_VARIABLE"] = "Ианыхтәуп аҽеиҭак '%1'";
79
89
  Blockly.Msg["DELETE_VARIABLE_CONFIRMATION"] = "Delete %1 uses of the '%2' variable?"; // untranslated
80
90
  Blockly.Msg["DELETE_X_BLOCKS"] = "Ианыхтәуп %1 блокк";
@@ -83,12 +93,17 @@ Blockly.Msg["DIALOG_OK"] = "OK";
83
93
  Blockly.Msg["DISABLE_BLOCK"] = "Иаҿыхтәуп Аблок";
84
94
  Blockly.Msg["DUPLICATE_BLOCK"] = "Акопиа ахыхтәуп";
85
95
  Blockly.Msg["DUPLICATE_COMMENT"] = "Duplicate Comment"; // untranslated
96
+ Blockly.Msg["EDIT_BLOCK_CONTENTS"] = "Edit Block contents (%1)"; // untranslated
86
97
  Blockly.Msg["ENABLE_BLOCK"] = "Иаҿыхтәуп Аблокқәа";
87
98
  Blockly.Msg["EXPAND_ALL"] = "Иаарԥштәуп Аблокқәа";
88
99
  Blockly.Msg["EXPAND_BLOCK"] = "Иаарԥштәуп Аблокқәа";
89
100
  Blockly.Msg["EXTERNAL_INPUTS"] = "External Inputs"; // untranslated
101
+ Blockly.Msg["FINISH_MOVE"] = "Finish move"; // untranslated
90
102
  Blockly.Msg["HELP"] = "Ацхыраара";
103
+ Blockly.Msg["HELP_PROMPT"] = "Press %1 for help on keyboard controls"; // untranslated
91
104
  Blockly.Msg["INLINE_INPUTS"] = "Inline Inputs"; // untranslated
105
+ Blockly.Msg["INSERT_BLOCK"] = "Insert Block (%1)"; // untranslated
106
+ Blockly.Msg["LINUX"] = "Linux"; // untranslated
92
107
  Blockly.Msg["LISTS_CREATE_EMPTY_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#create-empty-list"; // untranslated
93
108
  Blockly.Msg["LISTS_CREATE_EMPTY_TITLE"] = "иаԥцатәуп иҭацәу ахьӡынҵа";
94
109
  Blockly.Msg["LISTS_CREATE_EMPTY_TOOLTIP"] = "Returns a list, of length 0, containing no data records"; // untranslated
@@ -201,6 +216,7 @@ Blockly.Msg["LOGIC_TERNARY_HELPURL"] = "https://en.wikipedia.org/wiki/%3F:"; //
201
216
  Blockly.Msg["LOGIC_TERNARY_IF_FALSE"] = "амц акәзар";
202
217
  Blockly.Msg["LOGIC_TERNARY_IF_TRUE"] = "аиаша акәзар";
203
218
  Blockly.Msg["LOGIC_TERNARY_TOOLTIP"] = "Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value."; // untranslated
219
+ Blockly.Msg["MAC_OS"] = "macOS"; // untranslated
204
220
  Blockly.Msg["MATH_ADDITION_SYMBOL"] = "+"; // untranslated
205
221
  Blockly.Msg["MATH_ARITHMETIC_HELPURL"] = "https://ab.wikipedia.org/wiki/Арифметика";
206
222
  Blockly.Msg["MATH_ARITHMETIC_TOOLTIP_ADD"] = "Иҳанаҭоит ҩ-хыԥхьаӡарак реицҵалыҵ.";
@@ -287,13 +303,24 @@ Blockly.Msg["MATH_TRIG_TOOLTIP_ATAN"] = "Иҳанаҭоит арктангенс
287
303
  Blockly.Msg["MATH_TRIG_TOOLTIP_COS"] = "Иҳанаҭоит акосинус градусла.";
288
304
  Blockly.Msg["MATH_TRIG_TOOLTIP_SIN"] = "Иҳанаҭоит асинус градусла.";
289
305
  Blockly.Msg["MATH_TRIG_TOOLTIP_TAN"] = "Иҳанаҭоит атангенс градусла.";
306
+ Blockly.Msg["MOVE_BLOCK"] = "Move Block (%1)"; // untranslated
307
+ Blockly.Msg["MOVE_DOWN_CONSTRAINED"] = "Move down constrained"; // untranslated
308
+ Blockly.Msg["MOVE_DOWN_UNCONSTRAINED"] = "Move down, unconstrained"; // untranslated
309
+ Blockly.Msg["MOVE_LEFT_CONSTRAINED"] = "Move left, constrained"; // untranslated
310
+ Blockly.Msg["MOVE_LEFT_UNCONSTRAINED"] = "Move left, unconstrained"; // untranslated
311
+ Blockly.Msg["MOVE_RIGHT_CONSTRAINED"] = "Move right constrained"; // untranslated
312
+ Blockly.Msg["MOVE_RIGHT_UNCONSTRAINED"] = "Move right, unconstrained"; // untranslated
313
+ Blockly.Msg["MOVE_UP_CONSTRAINED"] = "Move up, constrained"; // untranslated
314
+ Blockly.Msg["MOVE_UP_UNCONSTRAINED"] = "Move up unconstrained"; // untranslated
290
315
  Blockly.Msg["NEW_COLOUR_VARIABLE"] = "Create colour variable..."; // untranslated
291
316
  Blockly.Msg["NEW_NUMBER_VARIABLE"] = "Create number variable..."; // untranslated
292
317
  Blockly.Msg["NEW_STRING_VARIABLE"] = "Create string variable..."; // untranslated
293
318
  Blockly.Msg["NEW_VARIABLE"] = "Иаԥҵатәуп аҽеиҭак";
294
319
  Blockly.Msg["NEW_VARIABLE_TITLE"] = "Аҽеиҭак ахьӡ ҿыц:";
295
320
  Blockly.Msg["NEW_VARIABLE_TYPE_TITLE"] = "New variable type:"; // untranslated
321
+ Blockly.Msg["OPTION_KEY"] = "⌥ Option"; // untranslated
296
322
  Blockly.Msg["ORDINAL_NUMBER_SUFFIX"] = ""; // untranslated
323
+ Blockly.Msg["PASTE_SHORTCUT"] = "Paste (%1)"; // untranslated
297
324
  Blockly.Msg["PROCEDURES_ALLOW_STATEMENTS"] = "аоператорқәа азин рыҭара";
298
325
  Blockly.Msg["PROCEDURES_BEFORE_PARAMS"] = "аҟынтәи:";
299
326
  Blockly.Msg["PROCEDURES_CALLNORETURN_HELPURL"] = "https://ru.wikipedia.org/wiki/Ацхыраагӡатә программа";
@@ -325,6 +352,10 @@ Blockly.Msg["REDO"] = "Аиҭаҟаҵара";
325
352
  Blockly.Msg["REMOVE_COMMENT"] = "Ианыхтәуп ахцәажәара";
326
353
  Blockly.Msg["RENAME_VARIABLE"] = "Аҽеиҭак ахьӡ ԥсахтәуп";
327
354
  Blockly.Msg["RENAME_VARIABLE_TITLE"] = "Аҽеиҭакқәа'%1' зегь рыхьӡ ԥсахтәуп аҟны:";
355
+ Blockly.Msg["SHORTCUTS_CODE_NAVIGATION"] = "Code navigation"; // untranslated
356
+ Blockly.Msg["SHORTCUTS_EDITING"] = "Editing"; // untranslated
357
+ Blockly.Msg["SHORTCUTS_GENERAL"] = "General"; // untranslated
358
+ Blockly.Msg["START_MOVE"] = "Start move"; // untranslated
328
359
  Blockly.Msg["TEXT_APPEND_HELPURL"] = "https://github.com/google/blockly/wiki/Text#text-modification"; // untranslated
329
360
  Blockly.Msg["TEXT_APPEND_TITLE"] = "%1 ахьы иацҵатәуп атеқст %2";
330
361
  Blockly.Msg["TEXT_APPEND_TOOLTIP"] = "Иацҵатәуп атеқст аҽеиҭак «%1» ахь.";
@@ -395,6 +426,7 @@ Blockly.Msg["TEXT_TRIM_OPERATOR_RIGHT"] = "trim spaces from right side of"; //
395
426
  Blockly.Msg["TEXT_TRIM_TOOLTIP"] = "Return a copy of the text with spaces removed from one or both ends."; // untranslated
396
427
  Blockly.Msg["TODAY"] = "Иахьа";
397
428
  Blockly.Msg["UNDO"] = "Иаҟәыхтәуп";
429
+ Blockly.Msg["UNKNOWN"] = "Unknown"; // untranslated
398
430
  Blockly.Msg["UNNAMED_KEY"] = "unnamed"; // untranslated
399
431
  Blockly.Msg["VARIABLES_DEFAULT_NAME"] = "аелемент";
400
432
  Blockly.Msg["VARIABLES_GET_CREATE_SET"] = "Иаԥҵатәуп аблок \"иаҭатәуп %1\" азы";
@@ -407,6 +439,7 @@ Blockly.Msg["VARIABLES_SET_TOOLTIP"] = "Sets this variable to be equal to the in
407
439
  Blockly.Msg["VARIABLE_ALREADY_EXISTS"] = "Аҽеиҭак ахьӡ '%1' змоу ыҟоуп.";
408
440
  Blockly.Msg["VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE"] = "A variable named '%1' already exists for another type: '%2'."; // untranslated
409
441
  Blockly.Msg["VARIABLE_ALREADY_EXISTS_FOR_A_PARAMETER"] = "A variable named '%1' already exists as a parameter in the procedure '%2'."; // untranslated
442
+ Blockly.Msg["WINDOWS"] = "Windows"; // untranslated
410
443
  Blockly.Msg["WORKSPACE_ARIA_LABEL"] = "Blockly Workspace"; // untranslated
411
444
  Blockly.Msg["WORKSPACE_COMMENT_DEFAULT_TEXT"] = "Say something..."; // untranslated
412
445
  Blockly.Msg["CONTROLS_FOREACH_INPUT_DO"] = Blockly.Msg["CONTROLS_REPEAT_INPUT_DO"];
package/msg/ab.mjs CHANGED
@@ -22,6 +22,7 @@ export const {
22
22
  DELETE_X_BLOCKS,
23
23
  DELETE_ALL_BLOCKS,
24
24
  CLEAN_UP,
25
+ CLOSE,
25
26
  COLLAPSE_BLOCK,
26
27
  COLLAPSE_ALL,
27
28
  EXPAND_BLOCK,
@@ -420,4 +421,36 @@ export const {
420
421
  COLLAPSED_WARNINGS_WARNING,
421
422
  DIALOG_OK,
422
423
  DIALOG_CANCEL,
424
+ DELETE_SHORTCUT,
425
+ DELETE_KEY,
426
+ EDIT_BLOCK_CONTENTS,
427
+ INSERT_BLOCK,
428
+ START_MOVE,
429
+ FINISH_MOVE,
430
+ ABORT_MOVE,
431
+ MOVE_LEFT_CONSTRAINED,
432
+ MOVE_RIGHT_CONSTRAINED,
433
+ MOVE_UP_CONSTRAINED,
434
+ MOVE_DOWN_CONSTRAINED,
435
+ MOVE_LEFT_UNCONSTRAINED,
436
+ MOVE_RIGHT_UNCONSTRAINED,
437
+ MOVE_UP_UNCONSTRAINED,
438
+ MOVE_DOWN_UNCONSTRAINED,
439
+ MOVE_BLOCK,
440
+ WINDOWS,
441
+ MAC_OS,
442
+ CHROME_OS,
443
+ LINUX,
444
+ UNKNOWN,
445
+ CONTROL_KEY,
446
+ COMMAND_KEY,
447
+ OPTION_KEY,
448
+ ALT_KEY,
449
+ CUT_SHORTCUT,
450
+ COPY_SHORTCUT,
451
+ PASTE_SHORTCUT,
452
+ HELP_PROMPT,
453
+ SHORTCUTS_GENERAL,
454
+ SHORTCUTS_EDITING,
455
+ SHORTCUTS_CODE_NAVIGATION,
423
456
  } = ab;
package/msg/ace.js CHANGED
@@ -17,10 +17,14 @@
17
17
 
18
18
  var Blockly = Blockly || { Msg: Object.create(null) };
19
19
 
20
+ Blockly.Msg["ABORT_MOVE"] = "Abort move"; // untranslated
20
21
  Blockly.Msg["ADD_COMMENT"] = "Add Comment"; // untranslated
22
+ Blockly.Msg["ALT_KEY"] = "Alt"; // untranslated
21
23
  Blockly.Msg["CANNOT_DELETE_VARIABLE_PROCEDURE"] = "Can't delete the variable '%1' because it's part of the definition of the function '%2'"; // untranslated
22
24
  Blockly.Msg["CHANGE_VALUE_TITLE"] = "Change value:"; // untranslated
25
+ Blockly.Msg["CHROME_OS"] = "ChromeOS"; // untranslated
23
26
  Blockly.Msg["CLEAN_UP"] = "Clean up Blocks"; // untranslated
27
+ Blockly.Msg["CLOSE"] = "Close"; // untranslated
24
28
  Blockly.Msg["COLLAPSED_WARNINGS_WARNING"] = "Collapsed blocks contain warnings."; // untranslated
25
29
  Blockly.Msg["COLLAPSE_ALL"] = "Collapse Blocks"; // untranslated
26
30
  Blockly.Msg["COLLAPSE_BLOCK"] = "Collapse Block"; // untranslated
@@ -41,6 +45,7 @@ Blockly.Msg["COLOUR_RGB_HELPURL"] = "https://www.december.com/html/spec/colorper
41
45
  Blockly.Msg["COLOUR_RGB_RED"] = "red"; // untranslated
42
46
  Blockly.Msg["COLOUR_RGB_TITLE"] = "colour with"; // untranslated
43
47
  Blockly.Msg["COLOUR_RGB_TOOLTIP"] = "Create a colour with the specified amount of red, green, and blue. All values must be between 0 and 100."; // untranslated
48
+ Blockly.Msg["COMMAND_KEY"] = "⌘ Command"; // untranslated
44
49
  Blockly.Msg["CONTROLS_FLOW_STATEMENTS_HELPURL"] = "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks"; // untranslated
45
50
  Blockly.Msg["CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK"] = "break out of loop"; // untranslated
46
51
  Blockly.Msg["CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE"] = "continue with next iteration of loop"; // untranslated
@@ -73,8 +78,13 @@ Blockly.Msg["CONTROLS_WHILEUNTIL_OPERATOR_UNTIL"] = "repeat until"; // untransl
73
78
  Blockly.Msg["CONTROLS_WHILEUNTIL_OPERATOR_WHILE"] = "repeat while"; // untranslated
74
79
  Blockly.Msg["CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL"] = "While a value is false, then do some statements."; // untranslated
75
80
  Blockly.Msg["CONTROLS_WHILEUNTIL_TOOLTIP_WHILE"] = "While a value is true, then do some statements."; // untranslated
81
+ Blockly.Msg["CONTROL_KEY"] = "Ctrl"; // untranslated
82
+ Blockly.Msg["COPY_SHORTCUT"] = "Copy (%1)"; // untranslated
83
+ Blockly.Msg["CUT_SHORTCUT"] = "Cut (%1)"; // untranslated
76
84
  Blockly.Msg["DELETE_ALL_BLOCKS"] = "Delete all %1 blocks?"; // untranslated
77
85
  Blockly.Msg["DELETE_BLOCK"] = "Delete Block"; // untranslated
86
+ Blockly.Msg["DELETE_KEY"] = "Del"; // untranslated
87
+ Blockly.Msg["DELETE_SHORTCUT"] = "Delete block (%1)"; // untranslated
78
88
  Blockly.Msg["DELETE_VARIABLE"] = "Delete the '%1' variable"; // untranslated
79
89
  Blockly.Msg["DELETE_VARIABLE_CONFIRMATION"] = "Delete %1 uses of the '%2' variable?"; // untranslated
80
90
  Blockly.Msg["DELETE_X_BLOCKS"] = "Delete %1 Blocks"; // untranslated
@@ -83,12 +93,17 @@ Blockly.Msg["DIALOG_OK"] = "Ka got";
83
93
  Blockly.Msg["DISABLE_BLOCK"] = "Disable Block"; // untranslated
84
94
  Blockly.Msg["DUPLICATE_BLOCK"] = "Duplicate"; // untranslated
85
95
  Blockly.Msg["DUPLICATE_COMMENT"] = "Duplicate Comment"; // untranslated
96
+ Blockly.Msg["EDIT_BLOCK_CONTENTS"] = "Edit Block contents (%1)"; // untranslated
86
97
  Blockly.Msg["ENABLE_BLOCK"] = "Enable Block"; // untranslated
87
98
  Blockly.Msg["EXPAND_ALL"] = "Expand Blocks"; // untranslated
88
99
  Blockly.Msg["EXPAND_BLOCK"] = "Expand Block"; // untranslated
89
100
  Blockly.Msg["EXTERNAL_INPUTS"] = "External Inputs"; // untranslated
101
+ Blockly.Msg["FINISH_MOVE"] = "Finish move"; // untranslated
90
102
  Blockly.Msg["HELP"] = "Help"; // untranslated
103
+ Blockly.Msg["HELP_PROMPT"] = "Press %1 for help on keyboard controls"; // untranslated
91
104
  Blockly.Msg["INLINE_INPUTS"] = "Inline Inputs"; // untranslated
105
+ Blockly.Msg["INSERT_BLOCK"] = "Insert Block (%1)"; // untranslated
106
+ Blockly.Msg["LINUX"] = "Linux"; // untranslated
92
107
  Blockly.Msg["LISTS_CREATE_EMPTY_HELPURL"] = "https://github.com/google/blockly/wiki/Lists#create-empty-list"; // untranslated
93
108
  Blockly.Msg["LISTS_CREATE_EMPTY_TITLE"] = "create empty list"; // untranslated
94
109
  Blockly.Msg["LISTS_CREATE_EMPTY_TOOLTIP"] = "Returns a list, of length 0, containing no data records"; // untranslated
@@ -201,6 +216,7 @@ Blockly.Msg["LOGIC_TERNARY_HELPURL"] = "https://en.wikipedia.org/wiki/%3F:"; //
201
216
  Blockly.Msg["LOGIC_TERNARY_IF_FALSE"] = "if false"; // untranslated
202
217
  Blockly.Msg["LOGIC_TERNARY_IF_TRUE"] = "if true"; // untranslated
203
218
  Blockly.Msg["LOGIC_TERNARY_TOOLTIP"] = "Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value."; // untranslated
219
+ Blockly.Msg["MAC_OS"] = "macOS"; // untranslated
204
220
  Blockly.Msg["MATH_ADDITION_SYMBOL"] = "+"; // untranslated
205
221
  Blockly.Msg["MATH_ARITHMETIC_HELPURL"] = "https://en.wikipedia.org/wiki/Arithmetic"; // untranslated
206
222
  Blockly.Msg["MATH_ARITHMETIC_TOOLTIP_ADD"] = "Return the sum of the two numbers."; // untranslated
@@ -287,13 +303,24 @@ Blockly.Msg["MATH_TRIG_TOOLTIP_ATAN"] = "Return the arctangent of a number."; /
287
303
  Blockly.Msg["MATH_TRIG_TOOLTIP_COS"] = "Return the cosine of a degree (not radian)."; // untranslated
288
304
  Blockly.Msg["MATH_TRIG_TOOLTIP_SIN"] = "Return the sine of a degree (not radian)."; // untranslated
289
305
  Blockly.Msg["MATH_TRIG_TOOLTIP_TAN"] = "Return the tangent of a degree (not radian)."; // untranslated
306
+ Blockly.Msg["MOVE_BLOCK"] = "Move Block (%1)"; // untranslated
307
+ Blockly.Msg["MOVE_DOWN_CONSTRAINED"] = "Move down constrained"; // untranslated
308
+ Blockly.Msg["MOVE_DOWN_UNCONSTRAINED"] = "Move down, unconstrained"; // untranslated
309
+ Blockly.Msg["MOVE_LEFT_CONSTRAINED"] = "Move left, constrained"; // untranslated
310
+ Blockly.Msg["MOVE_LEFT_UNCONSTRAINED"] = "Move left, unconstrained"; // untranslated
311
+ Blockly.Msg["MOVE_RIGHT_CONSTRAINED"] = "Move right constrained"; // untranslated
312
+ Blockly.Msg["MOVE_RIGHT_UNCONSTRAINED"] = "Move right, unconstrained"; // untranslated
313
+ Blockly.Msg["MOVE_UP_CONSTRAINED"] = "Move up, constrained"; // untranslated
314
+ Blockly.Msg["MOVE_UP_UNCONSTRAINED"] = "Move up unconstrained"; // untranslated
290
315
  Blockly.Msg["NEW_COLOUR_VARIABLE"] = "Create colour variable..."; // untranslated
291
316
  Blockly.Msg["NEW_NUMBER_VARIABLE"] = "Create number variable..."; // untranslated
292
317
  Blockly.Msg["NEW_STRING_VARIABLE"] = "Create string variable..."; // untranslated
293
318
  Blockly.Msg["NEW_VARIABLE"] = "Create variable..."; // untranslated
294
319
  Blockly.Msg["NEW_VARIABLE_TITLE"] = "New variable name:"; // untranslated
295
320
  Blockly.Msg["NEW_VARIABLE_TYPE_TITLE"] = "New variable type:"; // untranslated
321
+ Blockly.Msg["OPTION_KEY"] = "⌥ Option"; // untranslated
296
322
  Blockly.Msg["ORDINAL_NUMBER_SUFFIX"] = ""; // untranslated
323
+ Blockly.Msg["PASTE_SHORTCUT"] = "Paste (%1)"; // untranslated
297
324
  Blockly.Msg["PROCEDURES_ALLOW_STATEMENTS"] = "allow statements"; // untranslated
298
325
  Blockly.Msg["PROCEDURES_BEFORE_PARAMS"] = "with:"; // untranslated
299
326
  Blockly.Msg["PROCEDURES_CALLNORETURN_HELPURL"] = "https://en.wikipedia.org/wiki/Subroutine"; // untranslated
@@ -325,6 +352,10 @@ Blockly.Msg["REDO"] = "Redo"; // untranslated
325
352
  Blockly.Msg["REMOVE_COMMENT"] = "Remove Comment"; // untranslated
326
353
  Blockly.Msg["RENAME_VARIABLE"] = "Rename variable..."; // untranslated
327
354
  Blockly.Msg["RENAME_VARIABLE_TITLE"] = "Rename all '%1' variables to:"; // untranslated
355
+ Blockly.Msg["SHORTCUTS_CODE_NAVIGATION"] = "Code navigation"; // untranslated
356
+ Blockly.Msg["SHORTCUTS_EDITING"] = "Editing"; // untranslated
357
+ Blockly.Msg["SHORTCUTS_GENERAL"] = "General"; // untranslated
358
+ Blockly.Msg["START_MOVE"] = "Start move"; // untranslated
328
359
  Blockly.Msg["TEXT_APPEND_HELPURL"] = "https://github.com/google/blockly/wiki/Text#text-modification"; // untranslated
329
360
  Blockly.Msg["TEXT_APPEND_TITLE"] = "to %1 append text %2"; // untranslated
330
361
  Blockly.Msg["TEXT_APPEND_TOOLTIP"] = "Append some text to variable '%1'."; // untranslated
@@ -395,6 +426,7 @@ Blockly.Msg["TEXT_TRIM_OPERATOR_RIGHT"] = "trim spaces from right side of"; //
395
426
  Blockly.Msg["TEXT_TRIM_TOOLTIP"] = "Return a copy of the text with spaces removed from one or both ends."; // untranslated
396
427
  Blockly.Msg["TODAY"] = "Today"; // untranslated
397
428
  Blockly.Msg["UNDO"] = "Undo"; // untranslated
429
+ Blockly.Msg["UNKNOWN"] = "Unknown"; // untranslated
398
430
  Blockly.Msg["UNNAMED_KEY"] = "unnamed"; // untranslated
399
431
  Blockly.Msg["VARIABLES_DEFAULT_NAME"] = "item"; // untranslated
400
432
  Blockly.Msg["VARIABLES_GET_CREATE_SET"] = "Create 'set %1'"; // untranslated
@@ -407,6 +439,7 @@ Blockly.Msg["VARIABLES_SET_TOOLTIP"] = "Sets this variable to be equal to the in
407
439
  Blockly.Msg["VARIABLE_ALREADY_EXISTS"] = "A variable named '%1' already exists."; // untranslated
408
440
  Blockly.Msg["VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE"] = "A variable named '%1' already exists for another type: '%2'."; // untranslated
409
441
  Blockly.Msg["VARIABLE_ALREADY_EXISTS_FOR_A_PARAMETER"] = "A variable named '%1' already exists as a parameter in the procedure '%2'."; // untranslated
442
+ Blockly.Msg["WINDOWS"] = "Windows"; // untranslated
410
443
  Blockly.Msg["WORKSPACE_ARIA_LABEL"] = "Blockly Workspace"; // untranslated
411
444
  Blockly.Msg["WORKSPACE_COMMENT_DEFAULT_TEXT"] = "Say something..."; // untranslated
412
445
  Blockly.Msg["CONTROLS_FOREACH_INPUT_DO"] = Blockly.Msg["CONTROLS_REPEAT_INPUT_DO"];
package/msg/ace.mjs CHANGED
@@ -22,6 +22,7 @@ export const {
22
22
  DELETE_X_BLOCKS,
23
23
  DELETE_ALL_BLOCKS,
24
24
  CLEAN_UP,
25
+ CLOSE,
25
26
  COLLAPSE_BLOCK,
26
27
  COLLAPSE_ALL,
27
28
  EXPAND_BLOCK,
@@ -420,4 +421,36 @@ export const {
420
421
  COLLAPSED_WARNINGS_WARNING,
421
422
  DIALOG_OK,
422
423
  DIALOG_CANCEL,
424
+ DELETE_SHORTCUT,
425
+ DELETE_KEY,
426
+ EDIT_BLOCK_CONTENTS,
427
+ INSERT_BLOCK,
428
+ START_MOVE,
429
+ FINISH_MOVE,
430
+ ABORT_MOVE,
431
+ MOVE_LEFT_CONSTRAINED,
432
+ MOVE_RIGHT_CONSTRAINED,
433
+ MOVE_UP_CONSTRAINED,
434
+ MOVE_DOWN_CONSTRAINED,
435
+ MOVE_LEFT_UNCONSTRAINED,
436
+ MOVE_RIGHT_UNCONSTRAINED,
437
+ MOVE_UP_UNCONSTRAINED,
438
+ MOVE_DOWN_UNCONSTRAINED,
439
+ MOVE_BLOCK,
440
+ WINDOWS,
441
+ MAC_OS,
442
+ CHROME_OS,
443
+ LINUX,
444
+ UNKNOWN,
445
+ CONTROL_KEY,
446
+ COMMAND_KEY,
447
+ OPTION_KEY,
448
+ ALT_KEY,
449
+ CUT_SHORTCUT,
450
+ COPY_SHORTCUT,
451
+ PASTE_SHORTCUT,
452
+ HELP_PROMPT,
453
+ SHORTCUTS_GENERAL,
454
+ SHORTCUTS_EDITING,
455
+ SHORTCUTS_CODE_NAVIGATION,
423
456
  } = ace;