x-block-lib 0.11.7 → 0.11.9

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.
@@ -1,13 +1,87 @@
1
1
  //#region src/core/locale/msg/en.ts
2
- var en_default = {
2
+ const blockly = {
3
3
  ADD_COMMENT: "Add Comment",
4
- CLEAN_UP: "Clean Up Blocks",
4
+ ALT_KEY: "Alt",
5
+ ANNOUNCE_CANT_SCROLL_FURTHER: "Can't scroll further.",
6
+ ANNOUNCE_MOVE_AFTER: "Moving %1 after %2.",
7
+ ANNOUNCE_MOVE_AROUND: "Moving %1 around %2.",
8
+ ANNOUNCE_MOVE_BEFORE: "Moving %1 before %2.",
9
+ ANNOUNCE_MOVE_CANCELED: "Canceled movement.",
10
+ ANNOUNCE_MOVE_INSIDE: "Moving %1 inside %2.",
11
+ ANNOUNCE_MOVE_OF: "%1 of %2",
12
+ ANNOUNCE_MOVE_TO: "Moving %1 to %2.",
13
+ ANNOUNCE_MOVE_WORKSPACE: "Moving %1 on workspace.",
14
+ ANNOUNCE_SCROLLED_DOWN: "Scrolled down.",
15
+ ANNOUNCE_SCROLLED_LEFT: "Scrolled left.",
16
+ ANNOUNCE_SCROLLED_RIGHT: "Scrolled right.",
17
+ ANNOUNCE_SCROLLED_UP: "Scrolled up.",
18
+ ARIA_LABEL_ADD_ELSE_IF: "Add else if",
19
+ ARIA_LABEL_ADD_INPUT: "Add input",
20
+ ARIA_LABEL_ADD_LIST_ITEM: "Add list item",
21
+ ARIA_LABEL_ADD_TEXT: "Add text",
22
+ ARIA_LABEL_BUTTON: "button",
23
+ ARIA_LABEL_COMMENT: "Comment",
24
+ ARIA_LABEL_COMMENT_COLLAPSE: "Collapse Comment",
25
+ ARIA_LABEL_COMMENT_EXPAND: "Expand Comment",
26
+ ARIA_LABEL_FIELD_ANGLE: "%1 degrees",
27
+ ARIA_LABEL_HEADING: "heading",
28
+ ARIA_LABEL_REMOVE_ELSE_IF: "Remove else if",
29
+ ARIA_LABEL_REMOVE_INPUT: "Remove input",
30
+ ARIA_LABEL_REMOVE_LIST_ITEM: "Remove list item",
31
+ ARIA_LABEL_REMOVE_TEXT: "Remove text",
32
+ ARIA_LABEL_TRASH_EMPTY: "Trash, currently empty",
33
+ ARIA_TYPE_FIELD_ANGLE: "angle",
34
+ ARIA_TYPE_FIELD_BITMAP: "pixel image",
35
+ ARIA_TYPE_FIELD_CHECKBOX: "checkbox",
36
+ ARIA_TYPE_FIELD_COLOUR: "color",
37
+ ARIA_TYPE_FIELD_DATE: "date",
38
+ ARIA_TYPE_FIELD_DROPDOWN: "dropdown",
39
+ ARIA_TYPE_FIELD_GRID: "grid dropdown",
40
+ ARIA_TYPE_FIELD_IMAGE: "image",
41
+ ARIA_TYPE_FIELD_INPUT: "input",
42
+ ARIA_TYPE_FIELD_NUMBER: "number",
43
+ ARIA_TYPE_FIELD_TEXT_INPUT: "text",
44
+ ARIA_TYPE_FIELD_TEXT_INPUT_ARGUMENT: "input name",
45
+ ARIA_TYPE_FIELD_TEXT_INPUT_PROCEDURE: "function name",
46
+ BACKSPACE_KEY: "Backspace",
47
+ BLOCK_LABEL_BEGIN_PREFIX: "Begin %1",
48
+ BLOCK_LABEL_BEGIN_STACK: "Begin stack",
49
+ BLOCK_LABEL_COLLAPSED: "collapsed",
50
+ BLOCK_LABEL_CONTAINER: "container",
51
+ BLOCK_LABEL_DISABLED: "disabled",
52
+ BLOCK_LABEL_HAS_BRANCHES: "has %1 branches",
53
+ BLOCK_LABEL_HAS_INPUT: "has input",
54
+ BLOCK_LABEL_HAS_INPUTS: "has inputs",
55
+ BLOCK_LABEL_REPLACEABLE: "replaceable",
56
+ BLOCK_LABEL_STACK_BLOCKS: "%1 stack blocks",
57
+ BLOCK_LABEL_STATEMENT: "statement",
58
+ BLOCK_LABEL_TOOLBOX_CATEGORY: "%1 category",
59
+ BLOCK_LABEL_VALUE: "value",
60
+ BUBBLE_LABEL_COMMENT: "Comment: %1",
61
+ BUBBLE_LABEL_DEFAULT: "Bubble",
62
+ BUBBLE_LABEL_WARNING: "Warning: %1",
63
+ CANNOT_DELETE_VARIABLE_PROCEDURE: "Can't delete the variable '%1' because it's part of the definition of the function '%2'",
64
+ CAPS_LOCK_KEY: "Caps Lock",
65
+ CHANGE_VALUE_TITLE: "Change value:",
66
+ CHROME_OS: "ChromeOS",
67
+ CLEAN_UP: "Clean up Blocks",
68
+ CLOSE: "Close",
69
+ CLOSE_BACKPACK: "Close backpack",
5
70
  COLLAPSED_WARNINGS_WARNING: "Collapsed blocks contain warnings.",
6
- COLLAPSE_ALL: "Collapse All Blocks",
71
+ COLLAPSE_ALL: "Collapse Blocks",
7
72
  COLLAPSE_BLOCK: "Collapse Block",
73
+ COMMAND_KEY: "Command",
74
+ CONTEXT_MENU_KEY: "≣ Menu",
75
+ CONTROL_KEY: "Control",
76
+ COPY_ALL_TO_BACKPACK: "Copy All Blocks to Backpack",
77
+ COPY_SHORTCUT: "Copy",
78
+ COPY_TO_BACKPACK: "Copy to Backpack",
79
+ CURRENT_BLOCK_ANNOUNCEMENT: "Current block: %1",
80
+ CUT_SHORTCUT: "Cut",
8
81
  DELETE_ALL_BLOCKS: "Delete all %1 blocks?",
9
82
  DELETE_BLOCK: "Delete Block",
10
- DELETE_VARIABLE: "Delete variable '%1'",
83
+ DELETE_KEY: "Delete",
84
+ DELETE_VARIABLE: "Delete the '%1' variable",
11
85
  DELETE_VARIABLE_CONFIRMATION: "Delete %1 uses of the '%2' variable?",
12
86
  DELETE_X_BLOCKS: "Delete %1 Blocks",
13
87
  DIALOG_CANCEL: "Cancel",
@@ -15,22 +89,202 @@ var en_default = {
15
89
  DISABLE_BLOCK: "Disable Block",
16
90
  DUPLICATE_BLOCK: "Duplicate",
17
91
  DUPLICATE_COMMENT: "Duplicate Comment",
92
+ EDIT_BLOCK_CONTENTS: "Edit Block contents",
93
+ EMPTY_BACKPACK: "Empty Backpack",
18
94
  ENABLE_BLOCK: "Enable Block",
19
- EXPAND_ALL: "Expand All Blocks",
95
+ END_KEY: "End",
96
+ ENTER_KEY: "Enter",
97
+ ESCAPE: "Escape",
98
+ EXPAND_ALL: "Expand Blocks",
20
99
  EXPAND_BLOCK: "Expand Block",
21
100
  EXTERNAL_INPUTS: "External Inputs",
101
+ FIELD_BITMAP_ARIA_VALUE: "%1 by %2, %3 pixels on",
102
+ FIELD_BITMAP_BUTTON_LABEL_CLEAR: "Clear",
103
+ FIELD_BITMAP_BUTTON_LABEL_RANDOMIZE: "Randomize",
104
+ FIELD_BITMAP_PIXEL_LABEL: "%1, row %2, column %3",
105
+ FIELD_BITMAP_PIXEL_OFF: "off",
106
+ FIELD_BITMAP_PIXEL_ON: "on",
107
+ FIELD_LABEL_CHECKBOX_CHECKED: "Checked",
108
+ FIELD_LABEL_CHECKBOX_UNCHECKED: "Not checked",
109
+ FIELD_LABEL_EDIT_PREFIX: "Edit %1",
110
+ FIELD_LABEL_EMPTY: "empty",
111
+ FIELD_LABEL_OPTION_INDEX: "Option %1",
112
+ FIELD_LABEL_VARIABLE: "Variable '%1'",
113
+ FIELD_MULTILINEINPUT_FINISH_EDITING: "Finish editing",
114
+ FIELD_MULTILINEINPUT_NEW_LINE: "New line",
22
115
  HELP: "Help",
116
+ HELP_PROMPT: "Press %1 for help on keyboard controls.",
117
+ HOME_KEY: "Home",
118
+ ICON_LABEL_COMMENT_CLOSED: "Open Comment",
119
+ ICON_LABEL_COMMENT_OPEN: "Close Comment",
120
+ ICON_LABEL_DEFAULT: "Icon",
121
+ ICON_LABEL_MUTATOR_CLOSED: "Edit this block",
122
+ ICON_LABEL_MUTATOR_OPEN: "Close block editor",
123
+ ICON_LABEL_WARNING_CLOSED: "Open Warning",
124
+ ICON_LABEL_WARNING_OPEN: "Close Warning",
23
125
  INLINE_INPUTS: "Inline Inputs",
24
- NEW_VARIABLE: "Create Variable",
25
- NEW_VARIABLE_TITLE: "New Variable Name:",
26
- NEW_VARIABLE_TYPE_TITLE: "New Variable Type:",
126
+ INPUT_LABEL_CONDITION: "condition",
127
+ INPUT_LABEL_CONDITION_A: "first condition",
128
+ INPUT_LABEL_CONDITION_B: "second condition",
129
+ INPUT_LABEL_EMPTY: "Empty",
130
+ INPUT_LABEL_END_STATEMENT: "End %1",
131
+ INPUT_LABEL_INDEX: "input %1",
132
+ INPUT_LABEL_LISTS_CREATE_WITH_ITEM: "value %1",
133
+ INPUT_LABEL_LISTS_DELIMITER: "delimiter",
134
+ INPUT_LABEL_LISTS_END_POSITION: "end position",
135
+ INPUT_LABEL_LISTS_LIST_FROM_TEXT: "text to split",
136
+ INPUT_LABEL_LISTS_POSITION: "position within list",
137
+ INPUT_LABEL_LISTS_REPEAT_ITEM: "value to repeat",
138
+ INPUT_LABEL_LISTS_REPEAT_NUM: "number of times to repeat",
139
+ INPUT_LABEL_LISTS_START_POSITION: "start position",
140
+ INPUT_LABEL_LISTS_TEXT_FROM_LIST: "list to join",
141
+ INPUT_LABEL_LISTS_TO_CHANGE: "list to change",
142
+ INPUT_LABEL_LISTS_TO_CHECK: "list to check",
143
+ INPUT_LABEL_LISTS_VALUE_TO_SET: "value to set",
144
+ INPUT_LABEL_LOOP_BY: "increment",
145
+ INPUT_LABEL_LOOP_FROM: "starting number",
146
+ INPUT_LABEL_LOOP_LIST: "list to iterate over",
147
+ INPUT_LABEL_LOOP_TIMES: "number of times to repeat",
148
+ INPUT_LABEL_LOOP_TO: "ending number",
149
+ INPUT_LABEL_MATH_CHANGE_BY: "amount to change by",
150
+ INPUT_LABEL_MATH_CONSTRAIN_VALUE: "number to constrain",
151
+ INPUT_LABEL_MATH_DIVIDEND: "dividend",
152
+ INPUT_LABEL_MATH_DIVISOR: "divisor",
153
+ INPUT_LABEL_NUMBER: "number",
154
+ INPUT_LABEL_NUMBER_A: "first number",
155
+ INPUT_LABEL_NUMBER_ATAN2_X: "x coordinate",
156
+ INPUT_LABEL_NUMBER_ATAN2_Y: "y coordinate",
157
+ INPUT_LABEL_NUMBER_B: "second number",
158
+ INPUT_LABEL_NUMBER_LIST: "list of numbers",
159
+ INPUT_LABEL_NUMBER_MAX: "maximum",
160
+ INPUT_LABEL_NUMBER_MIN: "minimum",
161
+ INPUT_LABEL_NUMBER_TO_CHECK: "number to check",
162
+ INPUT_LABEL_STATEMENT: "statement position",
163
+ INPUT_LABEL_TEXT_APPEND: "value to append",
164
+ INPUT_LABEL_TEXT_END_POSITION: "end position",
165
+ INPUT_LABEL_TEXT_JOIN_ITEM: "value %1",
166
+ INPUT_LABEL_TEXT_POSITION: "letter position",
167
+ INPUT_LABEL_TEXT_PROMPT_MESSAGE: "message",
168
+ INPUT_LABEL_TEXT_START_POSITION: "start position",
169
+ INPUT_LABEL_TEXT_TO_CHANGE: "text to change",
170
+ INPUT_LABEL_TEXT_TO_CHECK: "text to check",
171
+ INPUT_LABEL_TEXT_TO_FIND: "text to find",
172
+ INPUT_LABEL_TEXT_TO_REPLACE: "text to replace",
173
+ INPUT_LABEL_VALUE: "value position",
174
+ INPUT_LABEL_VALUE_A: "first value",
175
+ INPUT_LABEL_VALUE_B: "second value",
176
+ INPUT_LABEL_VARIABLES_SET: "value to set",
177
+ INSERT_KEY: "Insert",
178
+ KEYBOARD_NAV_BLOCK_NAVIGATION_HINT: "Use %1 to navigate inside of blocks.",
179
+ KEYBOARD_NAV_CONSTRAINED_MOVE_HINT: "Use the arrow keys to move, then %1 to accept the position.",
180
+ KEYBOARD_NAV_COPIED_HINT: "Copied. Press %1 to paste.",
181
+ KEYBOARD_NAV_CUT_HINT: "Cut. Press %1 to paste.",
182
+ KEYBOARD_NAV_FLYOUT_LABEL_HINT: "Use the arrow keys to navigate to a block, or press %1 to go to the next heading.",
183
+ KEYBOARD_NAV_UNCONSTRAINED_MOVE_HINT: "Hold %1 and use arrow keys to move freely, then %2 to accept the position.",
184
+ KEYBOARD_NAV_WORKSPACE_NAVIGATION_HINT: "Use the arrow keys to navigate.",
185
+ LINUX: "Linux",
186
+ MAC_OS: "macOS",
187
+ MINIMAP_ARIA_LABEL: "Workspace minimap. Use the arrow keys to pan the workspace.",
188
+ MOVE_BLOCK: "Move Block",
189
+ NEW_COLOUR_VARIABLE: "Create colour variable...",
190
+ NEW_NUMBER_VARIABLE: "Create number variable...",
191
+ NEW_STRING_VARIABLE: "Create string variable...",
192
+ NEW_VARIABLE: "Create variable...",
193
+ NEW_VARIABLE_TITLE: "New variable name:",
194
+ NEW_VARIABLE_TYPE_TITLE: "New variable type:",
195
+ NO_PARENT_ANNOUNCEMENT: "Current block has no parent",
196
+ OPEN_BACKPACK: "Open backpack",
197
+ OPEN_TRASH: "Open trash",
198
+ OPTION_KEY: "Option",
199
+ ORDINAL_NUMBER_SUFFIX: "",
200
+ PAGE_DOWN_KEY: "Page Down",
201
+ PAGE_UP_KEY: "Page Up",
202
+ PARENT_BLOCKS_ANNOUNCEMENT: "Parent blocks: %1",
203
+ PASTE_ALL_FROM_BACKPACK: "Paste All Blocks from Backpack",
204
+ PASTE_SHORTCUT: "Paste",
205
+ PAUSE_KEY: "Pause",
27
206
  REDO: "Redo",
28
207
  REMOVE_COMMENT: "Remove Comment",
29
- RENAME_VARIABLE: "Rename Variable",
208
+ REMOVE_FROM_BACKPACK: "Remove from Backpack",
209
+ RENAME_VARIABLE: "Rename the '%1' variable",
30
210
  RENAME_VARIABLE_TITLE: "Rename all '%1' variables to:",
211
+ RESET_ZOOM: "Reset zoom",
212
+ SCREENREADER_HINT: "Use the arrow keys to navigate. Press %1 to toggle screenreader accessibility mode.",
213
+ SCREENREADER_MODE_DISABLED: "Screenreader mode is off, press %1 to turn it on",
214
+ SCREENREADER_MODE_ENABLED: "Screenreader mode is on, press %1 to turn it off",
215
+ SHIFT_KEY: "Shift",
216
+ SHORTCUTS_ABORT_MOVE: "Abort move",
217
+ SHORTCUTS_CLEANUP: "Clean up workspace",
218
+ SHORTCUTS_CODE_NAVIGATION: "Code navigation",
219
+ SHORTCUTS_DELETE: "Delete",
220
+ SHORTCUTS_DISCONNECT: "Disconnect block",
221
+ SHORTCUTS_DUPLICATE: "Duplicate",
222
+ SHORTCUTS_EDITING: "Editing",
223
+ SHORTCUTS_ESCAPE: "Exit",
224
+ SHORTCUTS_EXTENDED_INFORMATION: "Announce detailed information",
225
+ SHORTCUTS_FINISH_MOVE: "Finish move",
226
+ SHORTCUTS_FOCUS_TOOLBOX: "Focus toolbox",
227
+ SHORTCUTS_FOCUS_WORKSPACE: "Focus workspace",
228
+ SHORTCUTS_GENERAL: "General",
229
+ SHORTCUTS_INFORMATION: "Announce information",
230
+ SHORTCUTS_JUMP_BLOCK_END: "Jump to block end",
231
+ SHORTCUTS_JUMP_BLOCK_START: "Jump to block start",
232
+ SHORTCUTS_JUMP_BOTTOM_STACK: "Jump to bottom of stack",
233
+ SHORTCUTS_JUMP_FIRST_BLOCK: "Jump to first block",
234
+ SHORTCUTS_JUMP_LAST_BLOCK: "Jump to last block",
235
+ SHORTCUTS_JUMP_NEXT_PAGE: "Jump to next page",
236
+ SHORTCUTS_JUMP_PREVIOUS_PAGE: "Jump to previous page",
237
+ SHORTCUTS_JUMP_TOP_STACK: "Jump to top of stack",
238
+ SHORTCUTS_MOVE_DOWN: "Move down",
239
+ SHORTCUTS_MOVE_LEFT: "Move left",
240
+ SHORTCUTS_MOVE_RIGHT: "Move right",
241
+ SHORTCUTS_MOVE_UP: "Move up",
242
+ SHORTCUTS_NEXT_HEADING: "Next heading",
243
+ SHORTCUTS_NEXT_STACK: "Next stack",
244
+ SHORTCUTS_PERFORM_ACTION: "Edit or confirm",
245
+ SHORTCUTS_PREVIOUS_HEADING: "Previous heading",
246
+ SHORTCUTS_PREVIOUS_STACK: "Previous stack",
247
+ SHORTCUTS_SCROLL_DOWN: "Scroll down",
248
+ SHORTCUTS_SCROLL_LEFT: "Scroll left",
249
+ SHORTCUTS_SCROLL_RIGHT: "Scroll right",
250
+ SHORTCUTS_SCROLL_UP: "Scroll up",
251
+ SHORTCUTS_SHOW_CONTEXT_MENU: "Show menu",
252
+ SHORTCUTS_SHOW_TOOLTIP: "Show tooltip",
253
+ SHORTCUTS_START_MOVE: "Start move",
254
+ SHORTCUTS_START_MOVE_STACK: "Start move stack",
255
+ SHORTCUTS_TOGGLE_SCREENREADER_MODE: "Toggle screenreader mode",
256
+ SPACE_KEY: "Space",
257
+ TAB_KEY: "Tab",
31
258
  TODAY: "Today",
32
259
  UNDO: "Undo",
260
+ UNKNOWN: "Unknown",
33
261
  UNNAMED_KEY: "unnamed",
262
+ WINDOWS: "Windows",
263
+ WORKSPACE_COMMENT_DEFAULT_TEXT: "Say something...",
264
+ WORKSPACE_CONTENTS_BLOCKS_MANY: "%1 stacks of blocks%2 in workspace.",
265
+ WORKSPACE_CONTENTS_BLOCKS_ONE: "One stack of blocks%2 in workspace.",
266
+ WORKSPACE_CONTENTS_BLOCKS_ZERO: "No blocks%2 in workspace.",
267
+ WORKSPACE_CONTENTS_COMMENTS_MANY: " and %1 comments",
268
+ WORKSPACE_CONTENTS_COMMENTS_ONE: " and one comment",
269
+ WORKSPACE_LABEL_1_STACK: "1 stack of blocks",
270
+ WORKSPACE_LABEL_FLYOUT_WORKSPACE: "%1 blocks",
271
+ WORKSPACE_LABEL_MANY_STACKS: "%1 stacks of blocks",
272
+ WORKSPACE_LABEL_MUTATOR_WORKSPACE: "Block editor workspace",
273
+ WORKSPACE_LABEL_PLAIN: "Blocks workspace.",
274
+ WORKSPACE_ROLEDESCRIPTION: "workspace",
275
+ WORKSPACE_SEARCH_CLOSE: "Close search bar",
276
+ WORKSPACE_SEARCH_FIND_NEXT: "Find next",
277
+ WORKSPACE_SEARCH_FIND_PREVIOUS: "Find previous",
278
+ WORKSPACE_SEARCH_INPUT_LABEL: "Search workspace. Press Enter for the next match, Shift+Enter for the previous match. Press Escape to close search and focus the current match.",
279
+ WORKSPACE_SEARCH_MATCH: "Match %1 of %2: %3",
280
+ WORKSPACE_SEARCH_NO_MATCHES: "No matching blocks",
281
+ WORKSPACE_SEARCH_PLACEHOLDER: "Search",
282
+ ZOOM_IN: "Zoom in",
283
+ ZOOM_OUT: "Zoom out",
284
+ ZOOM_TO_FIT_ARIA_LABEL: "Zoom to fit"
285
+ };
286
+ var en_default = {
287
+ ...blockly,
34
288
  CROSS_TAB_COPY: "Copy (Paste)",
35
289
  CROSS_TAB_PASTE: "Paste",
36
290
  NO_OPTION: "No Option",
@@ -4,13 +4,13 @@ import { n as __exportAll } from "./rolldown-runtime.d6iwd7kf.js";
4
4
  var en_exports = /* @__PURE__ */ __exportAll({ default: () => en_default });
5
5
  var en_default = { "x-block-lib": {
6
6
  bind: "Bind",
7
- dlg: { source: { title: "Source" } },
8
7
  funcEntry: "Func Entry",
9
8
  implementMethod: "Implement Method",
10
9
  msg: { cannotOperateInLockedState: "Cannot operate in locked state" },
11
10
  navigator: "Navigator",
12
11
  noOption: "No Option",
13
12
  procedure: "Procedure",
13
+ source: "Source",
14
14
  temporaryBlock: "Temporary Block",
15
15
  tip: {
16
16
  hotkeyCtrlE: "Press 'Ctrl W' to navigate",
@@ -4,13 +4,13 @@ import { n as __exportAll } from "./rolldown-runtime.d6iwd7kf.js";
4
4
  var zhHans_exports = /* @__PURE__ */ __exportAll({ default: () => zhHans_default });
5
5
  var zhHans_default = { "x-block-lib": {
6
6
  bind: "绑定",
7
- dlg: { source: { title: "源代码" } },
8
7
  funcEntry: "函数入口",
9
8
  implementMethod: "实现方法",
10
9
  msg: { cannotOperateInLockedState: "锁定状态下不能操作" },
11
10
  navigator: "导航器",
12
11
  noOption: "没有选项",
13
12
  procedure: "过程",
13
+ source: "源代码",
14
14
  temporaryBlock: "临时块",
15
15
  tip: {
16
16
  hotkeyCtrlE: "按「Ctrl E」导航",
package/dist/index.d.ts CHANGED
@@ -68,6 +68,12 @@ type __VLS_Props = {
68
68
  locale: string;
69
69
  dark: boolean;
70
70
  };
71
+ declare function load(state: any): void;
72
+ declare function save(): any;
73
+ declare function appendBlock(state: any): void;
74
+ declare function generateCode(): string | undefined;
75
+ declare function generateReactivity(): import("x-runtime-lib").Reactivity;
76
+ declare function fireStateChange(): void;
71
77
  type __VLS_ModelProps = {
72
78
  'lock': boolean;
73
79
  'scale': number;
@@ -79,12 +85,12 @@ type __VLS_Slots = {} & {
79
85
  };
80
86
  declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
81
87
  loading: import("vue").Ref<boolean, boolean>;
82
- load: (state: any) => void;
83
- save: () => any;
84
- appendBlock: (state: any) => void;
85
- generateCode: () => string | undefined;
86
- generateReactivity: () => import("x-runtime-lib").Reactivity;
87
- fireStateChange: () => void;
88
+ load: typeof load;
89
+ save: typeof save;
90
+ appendBlock: typeof appendBlock;
91
+ generateCode: typeof generateCode;
92
+ generateReactivity: typeof generateReactivity;
93
+ fireStateChange: typeof fireStateChange;
88
94
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
89
95
  "update:lock": (value: boolean) => any;
90
96
  "update:scale": (value: number) => any;
@@ -107,11 +113,6 @@ declare const install: (app: App) => void;
107
113
  export declare function loadLocaleMessageBlock(locale: string): Promise<{
108
114
  'x-block-lib': {
109
115
  bind: string;
110
- dlg: {
111
- source: {
112
- title: string;
113
- };
114
- };
115
116
  funcEntry: string;
116
117
  implementMethod: string;
117
118
  msg: {
@@ -120,6 +121,7 @@ export declare function loadLocaleMessageBlock(locale: string): Promise<{
120
121
  navigator: string;
121
122
  noOption: string;
122
123
  procedure: string;
124
+ source: string;
123
125
  temporaryBlock: string;
124
126
  tip: {
125
127
  hotkeyCtrlE: string;
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  (function(){try{document.getElementById(`x-block-lib`)?.remove();const e = document.createElement(`style`);e.setAttribute(`id`, `x-block-lib`);const t = document.createTextNode(`.ghost[data-v-x-block-lib-ca7316a0]{opacity:.4;pointer-events:none}.blocklyToolbox{width:56px;overflow-x:hidden}.blocklyMainBackground{stroke-width:0}.blocklyToolboxCategory{margin-bottom:12px!important}.blocklyToolboxCategoryIcon{display:none!important}.blocklyTreeRowContentContainer{place-items:center;height:28px;display:flex;overflow:hidden}.blocklyFlyout{z-index:21}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#444;background:#f3f3f3}.hljs-comment{color:#697070}.hljs-punctuation,.hljs-tag{color:#444a}.hljs-tag .hljs-attr,.hljs-tag .hljs-name{color:#444}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#800}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-link,.hljs-operator,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#ab5656}.hljs-literal{color:#695}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}`);e.appendChild(t);document.head.appendChild(e);}catch(e){console.error('rolldown-plugin-inject-css', e);}})()
2
- import { A as Names, B as defineBlocksWithJsonArray, C as FieldCheckbox, D as FieldNumber, E as FieldLabel, F as Themes, G as inject$1, H as getMainWorkspace, I as Variables, J as serialization, K as inputs, L as WorkspaceSvg, M as ShortcutItems, N as ShortcutRegistry, O as FieldTextInput, P as Theme, Q as utils, R as Xml, S as Extensions, T as FieldImage, U as getSelected, V as dialog, W as icons, X as setParentContainer, Y as setLocale$1, Z as svgResize, _ as javascriptGenerator, a as lo, b as ContextMenuRegistry, c as encodeString, d as snakeCase, f as parseInt$1, g as Order, h as cloneDeep, i as require_dist$2, j as Procedures, k as Msg, l as require_dist, m as debounce, n as o, o as useResizeObserver, p as isEqual, q as registry, r as core_default, s as require_dist$1, t as javascript, u as upperCase, v as Blocks, w as FieldDropdown, x as Events, y as ContextMenu, z as common } from "./vendor.k3ftbehq.js";
2
+ import { A as Names, B as defineBlocksWithJsonArray, C as FieldCheckbox, D as FieldNumber, E as FieldLabel, F as Themes, G as inject$1, H as getMainWorkspace, I as Variables, J as serialization, K as inputs, L as WorkspaceSvg, M as ShortcutItems, N as ShortcutRegistry, O as FieldTextInput, P as Theme, R as Xml, S as Extensions, T as FieldImage, U as getSelected, V as dialog, W as icons, X as svgResize, Y as setLocale$1, Z as utils, _ as javascriptGenerator, a as lo, b as ContextMenuRegistry, c as encodeString, d as snakeCase, f as parseInt$1, g as Order, h as cloneDeep, i as require_dist$2, j as Procedures, k as Msg, l as require_dist, m as debounce, n as o, o as useResizeObserver, p as isEqual, q as registry, r as core_default, s as require_dist$1, t as javascript, u as upperCase, v as Blocks, w as FieldDropdown, x as Events, y as ContextMenu, z as common } from "./vendor.eb5jfwqa.js";
3
3
  import { eventBus, globalObjects, messageWarning, openConfirmDlg, openPromptDlg, useColor, useSystem, useViewStack } from "x-essential-lib";
4
4
  import { globalState } from "x-state-lib";
5
5
  import { addIndent, finalProperties, getElement, getImplementMethodName, getItems, getTag, getTypes, makeEventId, makeEventKeyOfCustomSlot, makeEventKeyOfElementSlot, makeMethodId, makeMethodKeyOfCustomSlot, makeMethodKeyOfElementSlot, makePropertyId, makePropertyKeyOfCustomSlot, makePropertyKeyOfElementSlot, makeTriggerId, parseNumberUnit, pkgs, themeColors, toEventName, toMethodName, toPropertyName, unwrapEventId, unwrapEventKeyOfCustomSlot, unwrapEventKeyOfElementSlot, unwrapMethodId, unwrapMethodKeyOfCustomSlot, unwrapMethodKeyOfElementSlot, unwrapPropertyId, unwrapPropertyKeyOfCustomSlot, unwrapPropertyKeyOfElementSlot, unwrapSlotId } from "x-runtime-lib";
@@ -9,8 +9,8 @@ import { useDisplay } from "vuetify";
9
9
 
10
10
  //#region src/core/locale/index.ts
11
11
  async function setLocale(locale) {
12
- if (locale === "en") setLocale$1((await import("./en.ek9yugi6.js")).default);
13
- else if (locale === "zhHans") setLocale$1((await import("./zhHans.e42r5aas.js")).default);
12
+ if (locale === "en") setLocale$1((await import("./en.e929s12a.js")).default);
13
+ else if (locale === "zhHans") setLocale$1((await import("./zhHans.c7mba28i.js")).default);
14
14
  else throw new Error(`invalid locale=${locale}`);
15
15
  }
16
16
  function localeMsg(key) {
@@ -11388,42 +11388,9 @@ WorkspaceSvg.prototype.cleanUp = function() {
11388
11388
  this.setResizesEnabled(true);
11389
11389
  };
11390
11390
 
11391
- //#endregion
11392
- //#region src/core/plugins/disableTopBlocks/index.ts
11393
- var import_dist$1 = require_dist$1();
11394
- function isOrphan(block) {
11395
- const parent = block.getParent();
11396
- if (parent && isOrphan(parent)) return true;
11397
- return !parent && !!(block.outputConnection || block.previousConnection);
11398
- }
11399
- var DisableTopBlocks = class {
11400
- init() {
11401
- const disableMenuItem = ContextMenuRegistry.registry.getItem("blockDisable");
11402
- if (!disableMenuItem) return;
11403
- disableMenuItem.preconditionFn = function(scope) {
11404
- const block = scope.block;
11405
- if (!block) return "hidden";
11406
- if (!block.isInFlyout && block.workspace.options.disable && block.isEditable()) {
11407
- if (block.getInheritedDisabled() || isOrphan(block)) return "disabled";
11408
- return "enabled";
11409
- }
11410
- return "hidden";
11411
- };
11412
- }
11413
- };
11414
-
11415
- //#endregion
11416
- //#region src/core/plugins/index.ts
11417
- (0, import_dist$2.registerFieldColour)();
11418
- ShortcutRegistry.registry.unregister(ShortcutItems.names.ESCAPE);
11419
- new import_dist$1.CrossTabCopyPaste().init({
11420
- contextMenu: true,
11421
- shortcut: true
11422
- });
11423
- new DisableTopBlocks().init();
11424
-
11425
11391
  //#endregion
11426
11392
  //#region \0@oxc-project+runtime@0.149.0/helpers/esm/typeof.js
11393
+ var import_dist$1 = require_dist$1();
11427
11394
  function _typeof(o) {
11428
11395
  "@babel/helpers - typeof";
11429
11396
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
@@ -11464,6 +11431,48 @@ function _defineProperty(e, r, t) {
11464
11431
  }) : e[r] = t, e;
11465
11432
  }
11466
11433
 
11434
+ //#endregion
11435
+ //#region src/core/plugins/disableTopBlocks/index.ts
11436
+ function isOrphan(block) {
11437
+ const parent = block.getParent();
11438
+ if (parent && isOrphan(parent)) return true;
11439
+ return !parent && !!(block.outputConnection || block.previousConnection);
11440
+ }
11441
+ var DisableTopBlocks = class {
11442
+ constructor() {
11443
+ _defineProperty(this, "oldPreconditionFn", void 0);
11444
+ }
11445
+ init() {
11446
+ const disableMenuItem = ContextMenuRegistry.registry.getItem("blockDisable");
11447
+ if (!disableMenuItem) return;
11448
+ this.oldPreconditionFn = disableMenuItem.preconditionFn;
11449
+ disableMenuItem.preconditionFn = function(scope) {
11450
+ const block = scope.block;
11451
+ if (!block) return "hidden";
11452
+ if (!block.isInFlyout && block.workspace.options.disable && block.isEditable()) {
11453
+ if (block.getInheritedDisabled() || isOrphan(block)) return "disabled";
11454
+ return "enabled";
11455
+ }
11456
+ return "hidden";
11457
+ };
11458
+ }
11459
+ dispose() {
11460
+ const disableMenuItem = ContextMenuRegistry.registry.getItem("blockDisable");
11461
+ if (!disableMenuItem) return;
11462
+ disableMenuItem.preconditionFn = this.oldPreconditionFn;
11463
+ }
11464
+ };
11465
+
11466
+ //#endregion
11467
+ //#region src/core/plugins/index.ts
11468
+ (0, import_dist$2.registerFieldColour)();
11469
+ ShortcutRegistry.registry.unregister(ShortcutItems.names.ESCAPE);
11470
+ new import_dist$1.CrossTabCopyPaste().init({
11471
+ contextMenu: true,
11472
+ shortcut: true
11473
+ });
11474
+ new DisableTopBlocks().init();
11475
+
11467
11476
  //#endregion
11468
11477
  //#region src/core/events/index.ts
11469
11478
  var StateChange = class extends Events.Abstract {
@@ -11744,7 +11753,7 @@ var index_vue_vue_type_script_setup_true_lang_default$7 = /*@__PURE__*/ defineCo
11744
11753
  const disabled = computed(() => {
11745
11754
  return display.smAndDown.value;
11746
11755
  });
11747
- const cleanWorkspace = () => {
11756
+ function cleanWorkspace() {
11748
11757
  if (!context.workspace) {
11749
11758
  console.assert(false);
11750
11759
  return;
@@ -11754,10 +11763,10 @@ var index_vue_vue_type_script_setup_true_lang_default$7 = /*@__PURE__*/ defineCo
11754
11763
  return;
11755
11764
  }
11756
11765
  context.workspace.cleanUp();
11757
- };
11758
- const onClick = () => {
11766
+ }
11767
+ function onClick() {
11759
11768
  cleanWorkspace();
11760
- };
11769
+ }
11761
11770
  __expose({ cleanWorkspace });
11762
11771
  return (_ctx, _cache) => {
11763
11772
  const _component_v_btn = resolveComponent("v-btn");
@@ -12582,7 +12591,7 @@ function callback$4() {
12582
12591
  });
12583
12592
  root.push(button);
12584
12593
  }
12585
- const variables = workspace.getVariablesOfType("");
12594
+ const variables = workspace.getVariableMap().getAllVariables();
12586
12595
  if (variables.length <= 0) return root;
12587
12596
  variables.sort(Variables.compareByName);
12588
12597
  {
@@ -13499,15 +13508,18 @@ const options = {
13499
13508
  maxScale: 1,
13500
13509
  minScale: .1,
13501
13510
  scaleSpeed: 1.25,
13502
- startScale: 1,
13503
- wheel: true
13511
+ startScale: 1
13504
13512
  }
13505
13513
  };
13506
13514
  function createWorkspace(container, type, version, dark) {
13507
13515
  options.theme = dark ? "dark" : "light";
13508
13516
  options.toolbox = getToolbox(type, version);
13509
13517
  const workspace = inject$1(container, options);
13518
+ workspace.addChangeListener(Events.disableOrphans);
13510
13519
  workspace.addChangeListener((event) => {
13520
+ setTimeout(() => {
13521
+ (0, import_dist.shadowBlockConversionChangeListener)(event);
13522
+ }, 0);
13511
13523
  if (event.type === "state_change") {
13512
13524
  const blocks = workspace.getAllBlocks();
13513
13525
  for (const block of blocks) {
@@ -13515,9 +13527,6 @@ function createWorkspace(container, type, version, dark) {
13515
13527
  if (b.checkWarning_) b.checkWarning_();
13516
13528
  }
13517
13529
  }
13518
- setTimeout(() => {
13519
- (0, import_dist.shadowBlockConversionChangeListener)(event);
13520
- }, 0);
13521
13530
  });
13522
13531
  regCustomCategory(workspace, type, version);
13523
13532
  regButtonCallback(workspace);
@@ -13641,7 +13650,6 @@ var index_vue_vue_type_script_setup_true_lang_default$2 = /*@__PURE__*/ defineCo
13641
13650
  const emit = __emit;
13642
13651
  const blocklyEditor = `blocklyEditor${useId()}`;
13643
13652
  const blocklyDiv = ref();
13644
- const parentContainer = useTemplateRef("parentContainer");
13645
13653
  const clean = useTemplateRef("clean");
13646
13654
  const navigator = useTemplateRef("navigator");
13647
13655
  const context = {};
@@ -13707,24 +13715,11 @@ var index_vue_vue_type_script_setup_true_lang_default$2 = /*@__PURE__*/ defineCo
13707
13715
  zIndex: 999
13708
13716
  };
13709
13717
  });
13710
- const parentContStyle = computed(() => {
13711
- return {
13712
- position: "fixed",
13713
- top: 0,
13714
- left: 0,
13715
- zIndex: 3e3
13716
- };
13717
- });
13718
13718
  const { open: flyoutOpen } = useViewStack(`blocklyEditorFlyout${useId()}`);
13719
13719
  onMounted(async () => {
13720
- if (!blocklyDiv.value || !parentContainer.value) {
13721
- console.assert(false);
13722
- return;
13723
- }
13724
- setParentContainer(parentContainer.value);
13720
+ if (!blocklyDiv.value) throw new Error(`invalid blocklyDiv`);
13725
13721
  await setLocale(__props.locale);
13726
13722
  context.workspace = createWorkspace(blocklyDiv.value, __props.type, __props.version, __props.dark);
13727
- context.workspace.addChangeListener(Events.disableOrphans);
13728
13723
  context.workspace.addChangeListener(onChange);
13729
13724
  const flyoutDiv = document.querySelector(`#${blocklyEditor} .blocklyFlyout`);
13730
13725
  new MutationObserver((mutations) => {
@@ -13766,45 +13761,45 @@ var index_vue_vue_type_script_setup_true_lang_default$2 = /*@__PURE__*/ defineCo
13766
13761
  navigator.value?.update();
13767
13762
  }, 0);
13768
13763
  }
13769
- const load = (state) => {
13764
+ function load(state) {
13770
13765
  loading.value = true;
13771
13766
  if (__props.type === "json") loadFromJson(state, context.workspace);
13772
13767
  else serialization.workspaces.load(state, context.workspace);
13773
- };
13774
- const save = () => {
13768
+ }
13769
+ function save() {
13775
13770
  if (__props.type === "json") return saveToJson(context.workspace);
13776
13771
  else return serialization.workspaces.save(context.workspace);
13777
- };
13778
- const appendBlock = (state) => {
13772
+ }
13773
+ function appendBlock(state) {
13779
13774
  serialization.blocks.append(state, context.workspace);
13780
- };
13781
- const generateCode = () => {
13775
+ }
13776
+ function generateCode() {
13782
13777
  if (__props.type === "json") console.assert(false);
13783
13778
  else return javascriptGenerator.workspaceToCode(context.workspace);
13784
- };
13785
- const generateReactivity = () => {
13779
+ }
13780
+ function generateReactivity() {
13786
13781
  return buildReactivity(context.workspace);
13787
- };
13788
- const applyLock = () => {
13782
+ }
13783
+ function applyLock() {
13789
13784
  context.workspace.setIsReadOnly(lock.value);
13790
13785
  if (context.workspace.isReadOnly()) flyoutOpen.value = false;
13791
- };
13792
- const applyScale = () => {
13786
+ }
13787
+ function applyScale() {
13793
13788
  context.workspace.setScale(scale.value);
13794
- };
13795
- const fireStateChange = () => {
13789
+ }
13790
+ function fireStateChange() {
13796
13791
  Events.fire(new (Events.get("state_change"))(context.workspace));
13797
- };
13798
- const onCleanWorkspace = () => {
13792
+ }
13793
+ function onCleanWorkspace() {
13799
13794
  clean.value?.cleanWorkspace();
13800
- };
13801
- const onToggleBlocklyLock = () => {
13795
+ }
13796
+ function onToggleBlocklyLock() {
13802
13797
  lock.value = !lock.value;
13803
- };
13804
- const onOpenBlocklyNavigator = () => {
13798
+ }
13799
+ function onOpenBlocklyNavigator() {
13805
13800
  if (!navigator.value) return;
13806
13801
  navigator.value.open = true;
13807
- };
13802
+ }
13808
13803
  onMounted(() => {
13809
13804
  eventBus.on("cleanWorkspace", onCleanWorkspace);
13810
13805
  eventBus.on("toggleBlocklyLock", onToggleBlocklyLock);
@@ -13887,11 +13882,6 @@ var index_vue_vue_type_script_setup_true_lang_default$2 = /*@__PURE__*/ defineCo
13887
13882
  key: 3,
13888
13883
  style: normalizeStyle(mainMaskStyle.value)
13889
13884
  }, null, 4)) : createCommentVNode("v-if", true),
13890
- createElementVNode("div", {
13891
- ref_key: "parentContainer",
13892
- ref: parentContainer,
13893
- style: normalizeStyle(parentContStyle.value)
13894
- }, null, 4),
13895
13885
  createVNode(_component_x_loading, {
13896
13886
  open: loading.value,
13897
13887
  "z-index": 99
@@ -13998,7 +13988,7 @@ var index_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
13998
13988
  variant: "text",
13999
13989
  onClick: _cache[0] || (_cache[0] = ($event) => open.value = false)
14000
13990
  }),
14001
- createElementVNode("span", _hoisted_1, toDisplayString(unref(t)("x-block-lib.dlg.source.title")), 1),
13991
+ createElementVNode("span", _hoisted_1, toDisplayString(unref(t)("x-block-lib.source")), 1),
14002
13992
  createVNode(_component_v_spacer)
14003
13993
  ]),
14004
13994
  _: 1
@@ -14027,8 +14017,8 @@ const install = (app) => {
14027
14017
  //#endregion
14028
14018
  //#region src/i18n/index.ts
14029
14019
  async function loadLocaleMessageBlock(locale) {
14030
- if (locale === "en") return (await import("./i18n-en.c3uxu3r5.js").then((n) => n.t)).default;
14031
- else if (locale === "zhHans") return (await import("./i18n-zhHans.hyv14btt.js").then((n) => n.t)).default;
14020
+ if (locale === "en") return (await import("./i18n-en.o4ueycrn.js").then((n) => n.t)).default;
14021
+ else if (locale === "zhHans") return (await import("./i18n-zhHans.b2uuecq7.js").then((n) => n.t)).default;
14032
14022
  else throw new Error(`invalid locale=${locale}`);
14033
14023
  }
14034
14024
 
@@ -36959,4 +36959,4 @@ function javascript(hljs) {
36959
36959
  }
36960
36960
 
36961
36961
  //#endregion
36962
- export { Names as A, defineBlocksWithJsonArray as B, FieldCheckbox as C, FieldNumber as D, FieldLabel as E, Themes as F, inject$1 as G, getMainWorkspace as H, Variables as I, serialization as J, inputs as K, WorkspaceSvg as L, ShortcutItems as M, ShortcutRegistry as N, FieldTextInput as O, Theme as P, utils as Q, Xml as R, Extensions as S, FieldImage as T, getSelected as U, dialog as V, icons as W, setParentContainer as X, setLocale as Y, svgResize as Z, javascriptGenerator as _, lo as a, ContextMenuRegistry as b, encodeString as c, snakeCase as d, parseInt$1 as f, Order as g, cloneDeep as h, require_dist as i, Procedures as j, Msg as k, require_dist$2 as l, debounce as m, o as n, useResizeObserver as o, isEqual as p, registry as q, core_default as r, require_dist$1 as s, javascript as t, upperCase as u, Blocks as v, FieldDropdown as w, Events as x, ContextMenu as y, common as z };
36962
+ export { Names as A, defineBlocksWithJsonArray as B, FieldCheckbox as C, FieldNumber as D, FieldLabel as E, Themes as F, inject$1 as G, getMainWorkspace as H, Variables as I, serialization as J, inputs as K, WorkspaceSvg as L, ShortcutItems as M, ShortcutRegistry as N, FieldTextInput as O, Theme as P, Xml as R, Extensions as S, FieldImage as T, getSelected as U, dialog as V, icons as W, svgResize as X, setLocale as Y, utils as Z, javascriptGenerator as _, lo as a, ContextMenuRegistry as b, encodeString as c, snakeCase as d, parseInt$1 as f, Order as g, cloneDeep as h, require_dist as i, Procedures as j, Msg as k, require_dist$2 as l, debounce as m, o as n, useResizeObserver as o, isEqual as p, registry as q, core_default as r, require_dist$1 as s, javascript as t, upperCase as u, Blocks as v, FieldDropdown as w, Events as x, ContextMenu as y, common as z };
@@ -1,36 +1,290 @@
1
1
  //#region src/core/locale/msg/zhHans.ts
2
- var zhHans_default = {
2
+ const blockly = {
3
3
  ADD_COMMENT: "添加注释",
4
- CLEAN_UP: "清理块",
5
- COLLAPSED_WARNINGS_WARNING: "已折叠的块内包含警告。",
6
- COLLAPSE_ALL: "折叠所有块",
4
+ ALT_KEY: "Alt",
5
+ ANNOUNCE_CANT_SCROLL_FURTHER: "Can't scroll further.",
6
+ ANNOUNCE_MOVE_AFTER: "Moving %1 after %2.",
7
+ ANNOUNCE_MOVE_AROUND: "Moving %1 around %2.",
8
+ ANNOUNCE_MOVE_BEFORE: "Moving %1 before %2.",
9
+ ANNOUNCE_MOVE_CANCELED: "Canceled movement.",
10
+ ANNOUNCE_MOVE_INSIDE: "Moving %1 inside %2.",
11
+ ANNOUNCE_MOVE_OF: "%1 of %2",
12
+ ANNOUNCE_MOVE_TO: "Moving %1 to %2.",
13
+ ANNOUNCE_MOVE_WORKSPACE: "Moving %1 on workspace.",
14
+ ANNOUNCE_SCROLLED_DOWN: "Scrolled down.",
15
+ ANNOUNCE_SCROLLED_LEFT: "Scrolled left.",
16
+ ANNOUNCE_SCROLLED_RIGHT: "Scrolled right.",
17
+ ANNOUNCE_SCROLLED_UP: "Scrolled up.",
18
+ ARIA_LABEL_ADD_ELSE_IF: "添加否则如果",
19
+ ARIA_LABEL_ADD_INPUT: "添加输入",
20
+ ARIA_LABEL_ADD_LIST_ITEM: "添加列表项目",
21
+ ARIA_LABEL_ADD_TEXT: "添加文字",
22
+ ARIA_LABEL_BUTTON: "button",
23
+ ARIA_LABEL_COMMENT: "注释",
24
+ ARIA_LABEL_COMMENT_COLLAPSE: "收起注释",
25
+ ARIA_LABEL_COMMENT_EXPAND: "展开注释",
26
+ ARIA_LABEL_FIELD_ANGLE: "%1度",
27
+ ARIA_LABEL_HEADING: "heading",
28
+ ARIA_LABEL_REMOVE_ELSE_IF: "移除否则如果",
29
+ ARIA_LABEL_REMOVE_INPUT: "删除输入",
30
+ ARIA_LABEL_REMOVE_LIST_ITEM: "移除列表中的项目",
31
+ ARIA_LABEL_REMOVE_TEXT: "删除文字",
32
+ ARIA_LABEL_TRASH_EMPTY: "垃圾桶,当前为空",
33
+ ARIA_TYPE_FIELD_ANGLE: "角度",
34
+ ARIA_TYPE_FIELD_BITMAP: "位图",
35
+ ARIA_TYPE_FIELD_CHECKBOX: "checkbox",
36
+ ARIA_TYPE_FIELD_COLOUR: "颜色",
37
+ ARIA_TYPE_FIELD_DATE: "日期",
38
+ ARIA_TYPE_FIELD_DROPDOWN: "dropdown",
39
+ ARIA_TYPE_FIELD_GRID: "方格下拉框",
40
+ ARIA_TYPE_FIELD_IMAGE: "image",
41
+ ARIA_TYPE_FIELD_INPUT: "input",
42
+ ARIA_TYPE_FIELD_NUMBER: "number",
43
+ ARIA_TYPE_FIELD_TEXT_INPUT: "text",
44
+ ARIA_TYPE_FIELD_TEXT_INPUT_ARGUMENT: "input name",
45
+ ARIA_TYPE_FIELD_TEXT_INPUT_PROCEDURE: "function name",
46
+ BACKSPACE_KEY: "退格",
47
+ BLOCK_LABEL_BEGIN_PREFIX: "%1开始",
48
+ BLOCK_LABEL_BEGIN_STACK: "块堆开始",
49
+ BLOCK_LABEL_COLLAPSED: "已折叠",
50
+ BLOCK_LABEL_CONTAINER: "容器",
51
+ BLOCK_LABEL_DISABLED: "已禁用",
52
+ BLOCK_LABEL_HAS_BRANCHES: "有%1个分支",
53
+ BLOCK_LABEL_HAS_INPUT: "有输入",
54
+ BLOCK_LABEL_HAS_INPUTS: "有输入",
55
+ BLOCK_LABEL_REPLACEABLE: "可替换",
56
+ BLOCK_LABEL_STACK_BLOCKS: "%1块堆",
57
+ BLOCK_LABEL_STATEMENT: "语句",
58
+ BLOCK_LABEL_TOOLBOX_CATEGORY: "%1分类",
59
+ BLOCK_LABEL_VALUE: "值",
60
+ BUBBLE_LABEL_COMMENT: "注释:%1",
61
+ BUBBLE_LABEL_DEFAULT: "Bubble",
62
+ BUBBLE_LABEL_WARNING: "警告:%1",
63
+ CANNOT_DELETE_VARIABLE_PROCEDURE: "不能删除变量“%1”,因为它是函数“%2”定义的一部分",
64
+ CAPS_LOCK_KEY: "Caps Lock",
65
+ CHANGE_VALUE_TITLE: "更改值:",
66
+ CHROME_OS: "ChromeOS",
67
+ CLEAN_UP: "整理块",
68
+ CLOSE: "关闭",
69
+ CLOSE_BACKPACK: "关闭背包",
70
+ COLLAPSED_WARNINGS_WARNING: "已收起的信息块内包含警告。",
71
+ COLLAPSE_ALL: "折叠块",
7
72
  COLLAPSE_BLOCK: "折叠块",
8
- DELETE_ALL_BLOCKS: "删除所有块(%1个)吗?",
73
+ COMMAND_KEY: "Command键",
74
+ CONTEXT_MENU_KEY: "≣ Menu",
75
+ CONTROL_KEY: "Ctrl键",
76
+ COPY_ALL_TO_BACKPACK: "将所有块复制到背包",
77
+ COPY_SHORTCUT: "复制",
78
+ COPY_TO_BACKPACK: "复制到背包",
79
+ CURRENT_BLOCK_ANNOUNCEMENT: "当前块:%1",
80
+ CUT_SHORTCUT: "剪切",
81
+ DELETE_ALL_BLOCKS: "删除所有 %1 个块吗?",
9
82
  DELETE_BLOCK: "删除块",
83
+ DELETE_KEY: "Delete",
10
84
  DELETE_VARIABLE: "删除变量“%1”",
11
85
  DELETE_VARIABLE_CONFIRMATION: "要删除对变量“%2”的%1个引用吗?",
12
- DELETE_X_BLOCKS: "删除%1个块",
86
+ DELETE_X_BLOCKS: "删除 %1 个块",
13
87
  DIALOG_CANCEL: "取消",
14
88
  DIALOG_OK: "确认",
15
89
  DISABLE_BLOCK: "禁用块",
16
90
  DUPLICATE_BLOCK: "复制",
17
91
  DUPLICATE_COMMENT: "复制注释",
92
+ EDIT_BLOCK_CONTENTS: "编辑块内容",
93
+ EMPTY_BACKPACK: "清空背包",
18
94
  ENABLE_BLOCK: "启用块",
95
+ END_KEY: "End",
96
+ ENTER_KEY: "Enter",
97
+ ESCAPE: "Esc",
19
98
  EXPAND_ALL: "展开块",
20
99
  EXPAND_BLOCK: "展开块",
21
100
  EXTERNAL_INPUTS: "外部输入",
101
+ FIELD_BITMAP_ARIA_VALUE: "%1乘%2,%3 个像素开启",
102
+ FIELD_BITMAP_BUTTON_LABEL_CLEAR: "清空",
103
+ FIELD_BITMAP_BUTTON_LABEL_RANDOMIZE: "随机",
104
+ FIELD_BITMAP_PIXEL_LABEL: "%1,第%2行,第%3列",
105
+ FIELD_BITMAP_PIXEL_OFF: "关",
106
+ FIELD_BITMAP_PIXEL_ON: "开",
107
+ FIELD_LABEL_CHECKBOX_CHECKED: "Checked",
108
+ FIELD_LABEL_CHECKBOX_UNCHECKED: "Not checked",
109
+ FIELD_LABEL_EDIT_PREFIX: "Edit %1",
110
+ FIELD_LABEL_EMPTY: "empty",
111
+ FIELD_LABEL_OPTION_INDEX: "Option %1",
112
+ FIELD_LABEL_VARIABLE: "Variable '%1'",
113
+ FIELD_MULTILINEINPUT_FINISH_EDITING: "结束编辑",
114
+ FIELD_MULTILINEINPUT_NEW_LINE: "换行",
22
115
  HELP: "帮助",
116
+ HELP_PROMPT: "按 %1 来获取有关键盘控制的帮助。",
117
+ HOME_KEY: "Home",
118
+ ICON_LABEL_COMMENT_CLOSED: "打开注释",
119
+ ICON_LABEL_COMMENT_OPEN: "关闭注释",
120
+ ICON_LABEL_DEFAULT: "图标",
121
+ ICON_LABEL_MUTATOR_CLOSED: "编辑这个块",
122
+ ICON_LABEL_MUTATOR_OPEN: "关闭块编辑器",
123
+ ICON_LABEL_WARNING_CLOSED: "打开警告",
124
+ ICON_LABEL_WARNING_OPEN: "关闭警告",
23
125
  INLINE_INPUTS: "单行输入",
24
- NEW_VARIABLE: "创建变量",
25
- NEW_VARIABLE_TITLE: "新变量名称:",
26
- NEW_VARIABLE_TYPE_TITLE: "新变量类型:",
126
+ INPUT_LABEL_CONDITION: "条件",
127
+ INPUT_LABEL_CONDITION_A: "第一个条件",
128
+ INPUT_LABEL_CONDITION_B: "第二个条件",
129
+ INPUT_LABEL_EMPTY: "空",
130
+ INPUT_LABEL_END_STATEMENT: "%1结束",
131
+ INPUT_LABEL_INDEX: "第%1个输入",
132
+ INPUT_LABEL_LISTS_CREATE_WITH_ITEM: "value %1",
133
+ INPUT_LABEL_LISTS_DELIMITER: "delimiter",
134
+ INPUT_LABEL_LISTS_END_POSITION: "end position",
135
+ INPUT_LABEL_LISTS_LIST_FROM_TEXT: "text to split",
136
+ INPUT_LABEL_LISTS_POSITION: "position within list",
137
+ INPUT_LABEL_LISTS_REPEAT_ITEM: "value to repeat",
138
+ INPUT_LABEL_LISTS_REPEAT_NUM: "number of times to repeat",
139
+ INPUT_LABEL_LISTS_START_POSITION: "start position",
140
+ INPUT_LABEL_LISTS_TEXT_FROM_LIST: "list to join",
141
+ INPUT_LABEL_LISTS_TO_CHANGE: "list to change",
142
+ INPUT_LABEL_LISTS_TO_CHECK: "list to check",
143
+ INPUT_LABEL_LISTS_VALUE_TO_SET: "value to set",
144
+ INPUT_LABEL_LOOP_BY: "increment",
145
+ INPUT_LABEL_LOOP_FROM: "starting number",
146
+ INPUT_LABEL_LOOP_LIST: "list to iterate over",
147
+ INPUT_LABEL_LOOP_TIMES: "number of times to repeat",
148
+ INPUT_LABEL_LOOP_TO: "ending number",
149
+ INPUT_LABEL_MATH_CHANGE_BY: "更改量",
150
+ INPUT_LABEL_MATH_CONSTRAIN_VALUE: "要约束的数字",
151
+ INPUT_LABEL_MATH_DIVIDEND: "被除数",
152
+ INPUT_LABEL_MATH_DIVISOR: "除数",
153
+ INPUT_LABEL_NUMBER: "数字",
154
+ INPUT_LABEL_NUMBER_A: "第一个数字",
155
+ INPUT_LABEL_NUMBER_ATAN2_X: "X坐标",
156
+ INPUT_LABEL_NUMBER_ATAN2_Y: "Y坐标",
157
+ INPUT_LABEL_NUMBER_B: "第二个数字",
158
+ INPUT_LABEL_NUMBER_LIST: "数字列表",
159
+ INPUT_LABEL_NUMBER_MAX: "最大",
160
+ INPUT_LABEL_NUMBER_MIN: "最小",
161
+ INPUT_LABEL_NUMBER_TO_CHECK: "要检查的数字",
162
+ INPUT_LABEL_STATEMENT: "语句位置",
163
+ INPUT_LABEL_TEXT_APPEND: "value to append",
164
+ INPUT_LABEL_TEXT_END_POSITION: "end position",
165
+ INPUT_LABEL_TEXT_JOIN_ITEM: "value %1",
166
+ INPUT_LABEL_TEXT_POSITION: "letter position",
167
+ INPUT_LABEL_TEXT_PROMPT_MESSAGE: "message",
168
+ INPUT_LABEL_TEXT_START_POSITION: "start position",
169
+ INPUT_LABEL_TEXT_TO_CHANGE: "text to change",
170
+ INPUT_LABEL_TEXT_TO_CHECK: "text to check",
171
+ INPUT_LABEL_TEXT_TO_FIND: "text to find",
172
+ INPUT_LABEL_TEXT_TO_REPLACE: "text to replace",
173
+ INPUT_LABEL_VALUE: "值位置",
174
+ INPUT_LABEL_VALUE_A: "第一个值",
175
+ INPUT_LABEL_VALUE_B: "第二个值",
176
+ INPUT_LABEL_VARIABLES_SET: "value to set",
177
+ INSERT_KEY: "Insert",
178
+ KEYBOARD_NAV_BLOCK_NAVIGATION_HINT: "使用%1导航到块内部。",
179
+ KEYBOARD_NAV_CONSTRAINED_MOVE_HINT: "使用箭头键移动,然后按%1接受位置。",
180
+ KEYBOARD_NAV_COPIED_HINT: "已拷貝。按下 %1 貼上。",
181
+ KEYBOARD_NAV_CUT_HINT: "已剪下。按下 %1 貼上。",
182
+ KEYBOARD_NAV_FLYOUT_LABEL_HINT: "使用方向键导航到一个块,或按%1跳转到下一个标题。",
183
+ KEYBOARD_NAV_UNCONSTRAINED_MOVE_HINT: "按住 %1 并使用箭头键来自由一点,然后按下 %2 接受位置。",
184
+ KEYBOARD_NAV_WORKSPACE_NAVIGATION_HINT: "使用方向键导航。",
185
+ LINUX: "Linux",
186
+ MAC_OS: "macOS",
187
+ MINIMAP_ARIA_LABEL: "工作区小地图,用方向键平移工作区。",
188
+ MOVE_BLOCK: "移动块",
189
+ NEW_COLOUR_VARIABLE: "创建颜色变量...",
190
+ NEW_NUMBER_VARIABLE: "创建数变量...",
191
+ NEW_STRING_VARIABLE: "创建字符串变量...",
192
+ NEW_VARIABLE: "创建变量...",
193
+ NEW_VARIABLE_TITLE: "新变量的名称:",
194
+ NEW_VARIABLE_TYPE_TITLE: "新变量的类型:",
195
+ NO_PARENT_ANNOUNCEMENT: "当前块没有父块",
196
+ OPEN_BACKPACK: "打开背包",
197
+ OPEN_TRASH: "Open trash",
198
+ OPTION_KEY: "Option键",
199
+ ORDINAL_NUMBER_SUFFIX: "",
200
+ PAGE_DOWN_KEY: "Page Down",
201
+ PAGE_UP_KEY: "Page Up",
202
+ PARENT_BLOCKS_ANNOUNCEMENT: "父块:%1",
203
+ PASTE_ALL_FROM_BACKPACK: "从背包粘贴所有块",
204
+ PASTE_SHORTCUT: "粘贴",
205
+ PAUSE_KEY: "Pause",
27
206
  REDO: "重做",
28
207
  REMOVE_COMMENT: "删除注释",
29
- RENAME_VARIABLE: "重命名变量",
30
- RENAME_VARIABLE_TITLE: "将所有“%1”变量重命名为:",
208
+ REMOVE_FROM_BACKPACK: "从背包移除",
209
+ RENAME_VARIABLE: "重命名变量“%1”...",
210
+ RENAME_VARIABLE_TITLE: "将所有“%1”变量重命名为:",
211
+ RESET_ZOOM: "Reset zoom",
212
+ SCREENREADER_HINT: "使用方向键导航。按%1切换屏幕阅读器模式",
213
+ SCREENREADER_MODE_DISABLED: "屏幕阅读器已关闭,按%1以启用",
214
+ SCREENREADER_MODE_ENABLED: "屏幕阅读器已启用,按%1以关闭",
215
+ SHIFT_KEY: "Shift",
216
+ SHORTCUTS_ABORT_MOVE: "中止移动",
217
+ SHORTCUTS_CLEANUP: "清空工作区",
218
+ SHORTCUTS_CODE_NAVIGATION: "代码导航",
219
+ SHORTCUTS_DELETE: "删除",
220
+ SHORTCUTS_DISCONNECT: "断开块",
221
+ SHORTCUTS_DUPLICATE: "复制",
222
+ SHORTCUTS_EDITING: "编辑",
223
+ SHORTCUTS_ESCAPE: "退出",
224
+ SHORTCUTS_EXTENDED_INFORMATION: "朗读详细信息",
225
+ SHORTCUTS_FINISH_MOVE: "完成移动",
226
+ SHORTCUTS_FOCUS_TOOLBOX: "聚焦到工具箱",
227
+ SHORTCUTS_FOCUS_WORKSPACE: "聚焦到工作区",
228
+ SHORTCUTS_GENERAL: "常规",
229
+ SHORTCUTS_INFORMATION: "朗读信息",
230
+ SHORTCUTS_JUMP_BLOCK_END: "移动到块尾",
231
+ SHORTCUTS_JUMP_BLOCK_START: "移动到块首",
232
+ SHORTCUTS_JUMP_BOTTOM_STACK: "移动到块堆尾部",
233
+ SHORTCUTS_JUMP_FIRST_BLOCK: "移动到第一个块",
234
+ SHORTCUTS_JUMP_LAST_BLOCK: "移动到最后一个块",
235
+ SHORTCUTS_JUMP_NEXT_PAGE: "Jump to next page",
236
+ SHORTCUTS_JUMP_PREVIOUS_PAGE: "Jump to previous page",
237
+ SHORTCUTS_JUMP_TOP_STACK: "移动到块堆开始",
238
+ SHORTCUTS_MOVE_DOWN: "下移",
239
+ SHORTCUTS_MOVE_LEFT: "左移",
240
+ SHORTCUTS_MOVE_RIGHT: "右移",
241
+ SHORTCUTS_MOVE_UP: "上移",
242
+ SHORTCUTS_NEXT_HEADING: "下一个标题",
243
+ SHORTCUTS_NEXT_STACK: "下一个块堆",
244
+ SHORTCUTS_PERFORM_ACTION: "编辑或确认",
245
+ SHORTCUTS_PREVIOUS_HEADING: "上一个标题",
246
+ SHORTCUTS_PREVIOUS_STACK: "上一个块堆",
247
+ SHORTCUTS_SCROLL_DOWN: "Scroll down",
248
+ SHORTCUTS_SCROLL_LEFT: "Scroll left",
249
+ SHORTCUTS_SCROLL_RIGHT: "Scroll right",
250
+ SHORTCUTS_SCROLL_UP: "Scroll up",
251
+ SHORTCUTS_SHOW_CONTEXT_MENU: "显示菜单",
252
+ SHORTCUTS_SHOW_TOOLTIP: "显示工具提示",
253
+ SHORTCUTS_START_MOVE: "开始移动",
254
+ SHORTCUTS_START_MOVE_STACK: "开始移动块堆",
255
+ SHORTCUTS_TOGGLE_SCREENREADER_MODE: "切换屏幕阅读器模式",
256
+ SPACE_KEY: "空格",
257
+ TAB_KEY: "Tab",
31
258
  TODAY: "今天",
32
259
  UNDO: "撤销",
260
+ UNKNOWN: "未知",
33
261
  UNNAMED_KEY: "未命名",
262
+ WINDOWS: "Windows",
263
+ WORKSPACE_COMMENT_DEFAULT_TEXT: "说点什么...",
264
+ WORKSPACE_CONTENTS_BLOCKS_MANY: "%1个块堆%2在工作区中",
265
+ WORKSPACE_CONTENTS_BLOCKS_ONE: "1个块堆%2在工作区中",
266
+ WORKSPACE_CONTENTS_BLOCKS_ZERO: "没有块%2在工作区中",
267
+ WORKSPACE_CONTENTS_COMMENTS_MANY: "和%1个注释",
268
+ WORKSPACE_CONTENTS_COMMENTS_ONE: "和1个注释",
269
+ WORKSPACE_LABEL_1_STACK: "1个块堆",
270
+ WORKSPACE_LABEL_FLYOUT_WORKSPACE: "%1个块",
271
+ WORKSPACE_LABEL_MANY_STACKS: "%1个块堆",
272
+ WORKSPACE_LABEL_MUTATOR_WORKSPACE: "块编辑工作区",
273
+ WORKSPACE_LABEL_PLAIN: "Blocks工作区。",
274
+ WORKSPACE_ROLEDESCRIPTION: "工作区",
275
+ WORKSPACE_SEARCH_CLOSE: "Close search bar",
276
+ WORKSPACE_SEARCH_FIND_NEXT: "Find next",
277
+ WORKSPACE_SEARCH_FIND_PREVIOUS: "Find previous",
278
+ WORKSPACE_SEARCH_INPUT_LABEL: "Search workspace. Press Enter for the next match, Shift+Enter for the previous match. Press Escape to close search and focus the current match.",
279
+ WORKSPACE_SEARCH_MATCH: "Match %1 of %2: %3",
280
+ WORKSPACE_SEARCH_NO_MATCHES: "No matching blocks",
281
+ WORKSPACE_SEARCH_PLACEHOLDER: "Search",
282
+ ZOOM_IN: "Zoom in",
283
+ ZOOM_OUT: "Zoom out",
284
+ ZOOM_TO_FIT_ARIA_LABEL: "缩放到适合"
285
+ };
286
+ var zhHans_default = {
287
+ ...blockly,
34
288
  CROSS_TAB_COPY: "拷贝(黏贴)",
35
289
  CROSS_TAB_PASTE: "黏贴",
36
290
  NO_OPTION: "没有选项",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "x-block-lib",
3
- "version": "0.11.7",
3
+ "version": "0.11.9",
4
4
  "files": [
5
5
  "dist"
6
6
  ],