@microbit/makecode-embed 0.0.0-alpha.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +10 -6
  3. package/dist/cjs/index.d.ts +10 -0
  4. package/dist/cjs/index.js +25 -0
  5. package/dist/cjs/index.js.map +1 -0
  6. package/dist/cjs/package.json +1 -0
  7. package/dist/{react → cjs/react}/MakeCodeBlocksRendering.d.ts +2 -2
  8. package/dist/cjs/react/MakeCodeBlocksRendering.js +105 -0
  9. package/dist/cjs/react/MakeCodeBlocksRendering.js.map +1 -0
  10. package/dist/{react → cjs/react}/MakeCodeFrame.d.ts +2 -2
  11. package/dist/cjs/react/MakeCodeFrame.js +74 -0
  12. package/dist/cjs/react/MakeCodeFrame.js.map +1 -0
  13. package/dist/cjs/react/MakeCodeRenderBlocksProvider.d.ts +18 -0
  14. package/dist/cjs/react/MakeCodeRenderBlocksProvider.js +25 -0
  15. package/dist/cjs/react/MakeCodeRenderBlocksProvider.js.map +1 -0
  16. package/dist/{react → cjs/react}/index.d.ts +1 -1
  17. package/dist/cjs/react/index.js +23 -0
  18. package/dist/cjs/react/index.js.map +1 -0
  19. package/dist/cjs/react/useMakeCodeRenderBlocks.js +18 -0
  20. package/dist/cjs/react/useMakeCodeRenderBlocks.js.map +1 -0
  21. package/dist/cjs/vanilla/examples.d.ts +3 -0
  22. package/dist/cjs/vanilla/examples.js +20 -0
  23. package/dist/cjs/vanilla/examples.js.map +1 -0
  24. package/dist/cjs/vanilla/index.d.ts +6 -0
  25. package/dist/cjs/vanilla/index.js +14 -0
  26. package/dist/cjs/vanilla/index.js.map +1 -0
  27. package/dist/{vanilla → cjs/vanilla}/makecode-frame-driver.d.ts +3 -4
  28. package/dist/cjs/vanilla/makecode-frame-driver.js +638 -0
  29. package/dist/cjs/vanilla/makecode-frame-driver.js.map +1 -0
  30. package/dist/{vanilla → cjs/vanilla}/makecode-render-blocks.d.ts +3 -4
  31. package/dist/cjs/vanilla/makecode-render-blocks.js +217 -0
  32. package/dist/cjs/vanilla/makecode-render-blocks.js.map +1 -0
  33. package/dist/{vanilla → cjs/vanilla}/pxt.d.ts +88 -118
  34. package/dist/cjs/vanilla/pxt.js +36 -0
  35. package/dist/cjs/vanilla/pxt.js.map +1 -0
  36. package/dist/esm/index.d.ts +10 -0
  37. package/dist/esm/index.js +9 -0
  38. package/dist/esm/index.js.map +1 -0
  39. package/dist/esm/package.json +1 -0
  40. package/dist/esm/react/MakeCodeBlocksRendering.d.ts +24 -0
  41. package/dist/esm/react/MakeCodeBlocksRendering.js.map +1 -0
  42. package/dist/esm/react/MakeCodeFrame.d.ts +38 -0
  43. package/dist/esm/react/MakeCodeFrame.js.map +1 -0
  44. package/dist/esm/react/MakeCodeRenderBlocksProvider.d.ts +18 -0
  45. package/dist/{react → esm/react}/MakeCodeRenderBlocksProvider.js +5 -2
  46. package/dist/esm/react/MakeCodeRenderBlocksProvider.js.map +1 -0
  47. package/dist/esm/react/index.d.ts +8 -0
  48. package/dist/esm/react/index.js.map +1 -0
  49. package/dist/esm/react/useMakeCodeRenderBlocks.d.ts +6 -0
  50. package/dist/{react → esm/react}/useMakeCodeRenderBlocks.js +1 -1
  51. package/dist/esm/react/useMakeCodeRenderBlocks.js.map +1 -0
  52. package/dist/esm/vanilla/examples.d.ts +3 -0
  53. package/dist/esm/vanilla/examples.js.map +1 -0
  54. package/dist/esm/vanilla/index.d.ts +6 -0
  55. package/dist/{vanilla → esm/vanilla}/index.js +1 -0
  56. package/dist/esm/vanilla/index.js.map +1 -0
  57. package/dist/esm/vanilla/makecode-frame-driver.d.ts +264 -0
  58. package/dist/{vanilla → esm/vanilla}/makecode-frame-driver.js +1 -0
  59. package/dist/esm/vanilla/makecode-frame-driver.js.map +1 -0
  60. package/dist/esm/vanilla/makecode-render-blocks.d.ts +31 -0
  61. package/dist/{vanilla → esm/vanilla}/makecode-render-blocks.js +1 -2
  62. package/dist/esm/vanilla/makecode-render-blocks.js.map +1 -0
  63. package/dist/esm/vanilla/pxt.d.ts +845 -0
  64. package/dist/esm/vanilla/pxt.js.map +1 -0
  65. package/package.json +38 -9
  66. package/typedoc.json +14 -0
  67. package/dist/react/MakeCodeBlocksRendering.js.map +0 -1
  68. package/dist/react/MakeCodeFrame.js.map +0 -1
  69. package/dist/react/MakeCodeRenderBlocksProvider.d.ts +0 -8
  70. package/dist/react/MakeCodeRenderBlocksProvider.js.map +0 -1
  71. package/dist/react/index.js.map +0 -1
  72. package/dist/react/useMakeCodeRenderBlocks.js.map +0 -1
  73. package/dist/vanilla/examples.d.ts +0 -3
  74. package/dist/vanilla/examples.js.map +0 -1
  75. package/dist/vanilla/index.d.ts +0 -4
  76. package/dist/vanilla/index.js.map +0 -1
  77. package/dist/vanilla/makecode-frame-driver.js.map +0 -1
  78. package/dist/vanilla/makecode-render-blocks.js.map +0 -1
  79. package/dist/vanilla/pxt.js.map +0 -1
  80. /package/dist/{react → cjs/react}/useMakeCodeRenderBlocks.d.ts +0 -0
  81. /package/dist/{react → esm/react}/MakeCodeBlocksRendering.js +0 -0
  82. /package/dist/{react → esm/react}/MakeCodeFrame.js +0 -0
  83. /package/dist/{react → esm/react}/index.js +0 -0
  84. /package/dist/{vanilla → esm/vanilla}/examples.js +0 -0
  85. /package/dist/{vanilla → esm/vanilla}/pxt.js +0 -0
@@ -0,0 +1,845 @@
1
+ /**
2
+ * MakeCode/pxt types needed for the iframe messages.
3
+ *
4
+ * These are substantially derived from the PXT project. The types are hard to use
5
+ * directly due to logical splits that make sense for MakeCode internally, but not
6
+ * for this interface, and TypeScript features that make them hard to reuse in a
7
+ * library context: namespaces and const enums.
8
+ *
9
+ * We've also extracted interfaces for the request parameters separately from the
10
+ * request metadata and corrected some types that don't appear to behave as
11
+ * described.
12
+ *
13
+ * Original is Copyright (c) Microsoft Corporation
14
+ * MIT licensed: https://github.com/microsoft/pxt/blob/master/LICENSE
15
+ *
16
+ * Modifications are Copright (c) Micro:bit Educational Foundation and contributors
17
+ * 2024.
18
+ */
19
+ export interface InstallHeader {
20
+ name: string;
21
+ meta: {
22
+ blocksWidth?: number;
23
+ blocksHeight?: number;
24
+ versions?: TargetVersions;
25
+ };
26
+ editor: string;
27
+ board?: string;
28
+ temporary?: boolean;
29
+ target: string;
30
+ targetVersion: string;
31
+ pubId: string;
32
+ pubCurrent: boolean;
33
+ pubVersions?: {
34
+ id: string;
35
+ type: 'snapshot' | 'permalink';
36
+ }[];
37
+ pubPermalink?: string;
38
+ anonymousSharePreference?: boolean;
39
+ githubId?: string;
40
+ githubTag?: string;
41
+ githubCurrent?: boolean;
42
+ tutorial?: TutorialOptions;
43
+ tutorialCompleted?: {
44
+ id: string;
45
+ steps: number;
46
+ };
47
+ extensionUnderTest?: string;
48
+ cloudUserId?: string;
49
+ isSkillmapProject?: boolean;
50
+ }
51
+ export interface Header extends InstallHeader {
52
+ id: string;
53
+ path?: string;
54
+ recentUse: number;
55
+ modificationTime: number;
56
+ icon?: string;
57
+ isDeleted: boolean;
58
+ saveId?: any;
59
+ cloudVersion: string;
60
+ cloudCurrent: boolean;
61
+ cloudLastSyncTime: number;
62
+ backupRef?: string;
63
+ isBackup?: boolean;
64
+ _rev: string;
65
+ }
66
+ export type ScriptText = Record<string, string>;
67
+ export interface MakeCodeProject {
68
+ header?: Header;
69
+ text?: ScriptText;
70
+ }
71
+ export interface Asset {
72
+ name: string;
73
+ size: number;
74
+ url: string;
75
+ }
76
+ export type Version = any;
77
+ export interface File {
78
+ header: Header;
79
+ text: ScriptText;
80
+ version: Version;
81
+ }
82
+ export interface EditorMessage {
83
+ /**
84
+ * Constant identifier
85
+ */
86
+ type: 'pxteditor' | 'pxthost' | 'pxtpkgext' | 'pxtsim';
87
+ /**
88
+ * Original request id
89
+ */
90
+ id?: string;
91
+ /**
92
+ * flag to request response
93
+ */
94
+ response?: boolean;
95
+ /**
96
+ * Frame identifier that can be passed to the iframe by adding the frameId query parameter
97
+ */
98
+ frameId?: string;
99
+ }
100
+ export interface EditorMessageResponse extends EditorMessage {
101
+ /**
102
+ * Additional response payload provided by the command
103
+ */
104
+ resp?: any;
105
+ /**
106
+ * indicate if operation started or completed successfully
107
+ */
108
+ success: boolean;
109
+ /**
110
+ * Error object if any
111
+ */
112
+ error?: any;
113
+ }
114
+ export interface EditorMessageRequest extends EditorMessage {
115
+ /**
116
+ * Request action
117
+ */
118
+ action: 'switchblocks' | 'switchjavascript' | 'switchpython' | 'startsimulator' | 'restartsimulator' | 'stopsimulator' | 'hidesimulator' | 'showsimulator' | 'closeflyout' | 'newproject' | 'importproject' | 'importexternalproject' | 'importtutorial' | 'openheader' | 'proxytosim' | 'undo' | 'redo' | 'renderblocks' | 'renderpython' | 'renderxml' | 'renderbyblockid' | 'setscale' | 'startactivity' | 'saveproject' | 'compile' | 'unloadproject' | 'shareproject' | 'savelocalprojectstocloud' | 'projectcloudstatus' | 'requestprojectcloudstatus' | 'convertcloudprojectstolocal' | 'setlanguagerestriction' | 'gettoolboxcategories' | 'toggletrace' | 'togglehighcontrast' | 'sethighcontrast' | 'togglegreenscreen' | 'settracestate' | 'setsimulatorfullscreen' | 'print' | 'pair' | 'workspacesync' | 'workspacereset' | 'workspacesave' | 'workspaceloaded' | 'workspaceevent' | 'workspacediagnostics' | 'event' | 'simevent' | 'info' | 'tutorialevent' | 'editorcontentloaded' | 'serviceworkerregistered' | 'runeval';
119
+ }
120
+ /**
121
+ * Request sent by the editor when a tick/error/expection is registered
122
+ */
123
+ export interface EditorMessageEventRequest extends EditorMessageRequest {
124
+ action: 'event';
125
+ tick: string;
126
+ category?: string;
127
+ message?: string;
128
+ data?: Record<string, string | number>;
129
+ }
130
+ export type EditorMessageTutorialEventRequest = EditorMessageTutorialProgressEventRequest | EditorMessageTutorialCompletedEventRequest | EditorMessageTutorialLoadedEventRequest | EditorMessageTutorialExitEventRequest;
131
+ export interface EditorMessageTutorialProgressEventRequest extends EditorMessageRequest {
132
+ action: 'tutorialevent';
133
+ tutorialEvent: 'progress';
134
+ currentStep: number;
135
+ totalSteps: number;
136
+ isCompleted: boolean;
137
+ tutorialId: string;
138
+ projectHeaderId: string;
139
+ }
140
+ export interface EditorMessageTutorialCompletedEventRequest extends EditorMessageRequest {
141
+ action: 'tutorialevent';
142
+ tutorialEvent: 'completed';
143
+ tutorialId: string;
144
+ projectHeaderId: string;
145
+ }
146
+ export interface EditorMessageTutorialLoadedEventRequest extends EditorMessageRequest {
147
+ action: 'tutorialevent';
148
+ tutorialEvent: 'loaded';
149
+ tutorialId: string;
150
+ projectHeaderId: string;
151
+ }
152
+ export interface EditorMessageTutorialExitEventRequest extends EditorMessageRequest {
153
+ action: 'tutorialevent';
154
+ tutorialEvent: 'exit';
155
+ tutorialId: string;
156
+ projectHeaderId: string;
157
+ }
158
+ export interface EditorMessageStopRequest extends EditorMessageRequest {
159
+ action: 'stopsimulator';
160
+ /**
161
+ * Indicates if simulator iframes should be unloaded or kept hot.
162
+ */
163
+ unload?: boolean;
164
+ }
165
+ export interface EditorMessageNewProjectRequest extends EditorMessageRequest {
166
+ action: 'newproject';
167
+ /**
168
+ * Additional optional to create new project
169
+ */
170
+ options?: ProjectCreationOptions;
171
+ }
172
+ export interface EditorContentLoadedRequest extends EditorMessageRequest {
173
+ action: 'editorcontentloaded';
174
+ }
175
+ export interface EditorMessageSetScaleRequest extends EditorMessageRequest {
176
+ action: 'setscale';
177
+ scale: number;
178
+ }
179
+ export interface EditorMessageSimulatorMessageProxyRequest extends EditorMessageRequest {
180
+ action: 'proxytosim';
181
+ /**
182
+ * Content to send to the simulator
183
+ */
184
+ content: any;
185
+ }
186
+ export interface EditorWorkspaceSyncRequest extends EditorMessageRequest {
187
+ /**
188
+ * Synching projects from host into
189
+ */
190
+ action: 'workspacesync' | 'workspacereset' | 'workspaceloaded';
191
+ }
192
+ export interface EditorWorkspaceEvent extends EditorMessageRequest {
193
+ action: 'workspaceevent';
194
+ event: EditorEvent;
195
+ }
196
+ export interface EditorWorkspaceDiagnostics extends EditorMessageRequest {
197
+ action: 'workspacediagnostics';
198
+ operation: 'compile' | 'decompile' | 'typecheck';
199
+ output: string;
200
+ diagnostics: {
201
+ code: number;
202
+ category: 'error' | 'warning' | 'message';
203
+ fileName?: string;
204
+ start?: number;
205
+ length?: number;
206
+ line?: number;
207
+ column?: number;
208
+ endLine?: number;
209
+ endColumn?: number;
210
+ }[];
211
+ }
212
+ export interface EditorSyncState {
213
+ filters?: ProjectFilters;
214
+ searchBar?: boolean;
215
+ }
216
+ export interface EditorWorkspaceSyncResponse extends EditorMessageResponse {
217
+ projects: MakeCodeProject[];
218
+ editor?: EditorSyncState;
219
+ controllerId?: string;
220
+ }
221
+ export interface EditorWorkspaceSaveRequest extends EditorMessageRequest {
222
+ action: 'workspacesave';
223
+ project: MakeCodeProject;
224
+ }
225
+ export interface ImportProjectOptions {
226
+ project: MakeCodeProject;
227
+ filters?: ProjectFilters;
228
+ searchBar?: boolean;
229
+ }
230
+ export interface EditorMessageImportProjectRequest extends EditorMessageRequest, ImportProjectOptions {
231
+ action: 'importproject';
232
+ }
233
+ export interface ImportExternalProjectOptions {
234
+ project: MakeCodeProject;
235
+ }
236
+ export interface EditorMessageImportExternalProjectRequest extends EditorMessageRequest, ImportExternalProjectOptions {
237
+ action: 'importexternalproject';
238
+ }
239
+ export interface EditorMessageImportExternalProjectResponse extends EditorMessageResponse {
240
+ action: 'importexternalproject';
241
+ resp: {
242
+ importUrl: string;
243
+ };
244
+ }
245
+ export interface EditorMessageSaveLocalProjectsToCloud extends EditorMessageRequest {
246
+ action: 'savelocalprojectstocloud';
247
+ headerIds: string[];
248
+ }
249
+ export interface EditorMessageSaveLocalProjectsToCloudResponse extends EditorMessageResponse {
250
+ action: 'savelocalprojectstocloud';
251
+ headerIdMap?: Record<string, string>;
252
+ }
253
+ export interface EditorMessageProjectCloudStatus extends EditorMessageRequest {
254
+ action: 'projectcloudstatus';
255
+ headerId: string;
256
+ status: CloudStatus;
257
+ }
258
+ export interface EditorMessageRequestProjectCloudStatus extends EditorMessageRequest {
259
+ action: 'requestprojectcloudstatus';
260
+ headerIds: string[];
261
+ }
262
+ export interface EditorMessageConvertCloudProjectsToLocal extends EditorMessageRequest {
263
+ action: 'convertcloudprojectstolocal';
264
+ userId: string;
265
+ }
266
+ export interface EditorMessageImportTutorialRequest extends EditorMessageRequest {
267
+ action: 'importtutorial';
268
+ markdown: string;
269
+ }
270
+ export interface EditorMessageOpenHeaderRequest extends EditorMessageRequest {
271
+ action: 'openheader';
272
+ headerId: string;
273
+ }
274
+ export interface RenderBlocksOptions {
275
+ ts: string;
276
+ snippetMode?: boolean;
277
+ layout?: BlockLayout;
278
+ }
279
+ export interface EditorMessageRenderBlocksRequest extends EditorMessageRequest, RenderBlocksOptions {
280
+ action: 'renderblocks';
281
+ }
282
+ export interface RenderXmlOptions {
283
+ xml: string;
284
+ snippetMode?: boolean;
285
+ layout?: BlockLayout;
286
+ }
287
+ export interface EditorMessageRenderXmlRequest extends EditorMessageRequest, RenderXmlOptions {
288
+ action: 'renderxml';
289
+ }
290
+ export interface RenderByBlockIdOptions {
291
+ blockId: string;
292
+ snippetMode?: boolean;
293
+ layout?: BlockLayout;
294
+ }
295
+ export interface EditorMessageRenderByBlockIdRequest extends EditorMessageRequest, RenderByBlockIdOptions {
296
+ action: 'renderbyblockid';
297
+ }
298
+ export interface EditorMessageRenderBlocksResponse {
299
+ resp: string | undefined;
300
+ }
301
+ export interface EditorMessageRenderXmlResponse {
302
+ resp: string | undefined;
303
+ }
304
+ export interface EditorMessageRenderByBlockIdResponse {
305
+ resp: string | undefined;
306
+ }
307
+ export interface EditorMessageRenderPythonRequest extends EditorMessageRequest {
308
+ action: 'renderpython';
309
+ ts: string;
310
+ }
311
+ export interface EditorMessageRenderPythonResponse {
312
+ resp: string;
313
+ }
314
+ export interface EditorSimulatorEvent extends EditorMessageRequest {
315
+ action: 'simevent';
316
+ subtype: 'toplevelfinished' | 'started' | 'stopped' | 'resumed';
317
+ }
318
+ export interface EditorSimulatorStoppedEvent extends EditorSimulatorEvent {
319
+ subtype: 'stopped';
320
+ exception?: string;
321
+ }
322
+ export interface EditorMessageToggleTraceRequest extends EditorMessageRequest {
323
+ action: 'toggletrace';
324
+ intervalSpeed?: number;
325
+ }
326
+ export interface EditorMessageSetTraceStateRequest extends EditorMessageRequest {
327
+ action: 'settracestate';
328
+ enabled: boolean;
329
+ intervalSpeed?: number;
330
+ }
331
+ export interface EditorMessageSetSimulatorFullScreenRequest extends EditorMessageRequest {
332
+ action: 'setsimulatorfullscreen';
333
+ enabled: boolean;
334
+ }
335
+ export interface EditorMessageSetHighContrastRequest extends EditorMessageRequest {
336
+ action: 'sethighcontrast';
337
+ on: boolean;
338
+ }
339
+ export interface StartActivityOptions {
340
+ activityType: 'tutorial' | 'example' | 'recipe';
341
+ path: string;
342
+ title?: string;
343
+ previousProjectHeaderId?: string;
344
+ carryoverPreviousCode?: boolean;
345
+ }
346
+ export interface EditorMessageStartActivity extends EditorMessageRequest, StartActivityOptions {
347
+ action: 'startactivity';
348
+ }
349
+ export interface InfoMessage {
350
+ versions: TargetVersions;
351
+ locale: string;
352
+ availableLocales?: string[];
353
+ }
354
+ export interface PackageExtensionData {
355
+ ts: string;
356
+ json?: any;
357
+ }
358
+ export interface EditorPkgExtMessageRequest extends EditorMessageRequest {
359
+ package: string;
360
+ }
361
+ export interface EditorPkgExtMessageResponse extends EditorMessageResponse {
362
+ package: string;
363
+ }
364
+ export interface EditorSimulatorTickEvent extends EditorMessageEventRequest {
365
+ type: 'pxtsim';
366
+ }
367
+ export interface EditorShareRequest extends EditorMessageRequest {
368
+ action: 'shareproject';
369
+ headerId: string;
370
+ projectName: string;
371
+ }
372
+ export interface ShareResult {
373
+ embed: {
374
+ code: string;
375
+ editor: string;
376
+ simulator: string;
377
+ };
378
+ qr: string;
379
+ url: string;
380
+ }
381
+ export interface EditorShareResponse extends EditorMessageResponse {
382
+ action: 'shareproject';
383
+ resp: ShareResult;
384
+ }
385
+ export interface EditorSetLanguageRestriction extends EditorMessageRequest {
386
+ action: 'setlanguagerestriction';
387
+ restriction: LanguageRestriction;
388
+ }
389
+ export interface EditorMessageGetToolboxCategoriesRequest extends EditorMessageRequest {
390
+ action: 'gettoolboxcategories';
391
+ advanced?: boolean;
392
+ }
393
+ export interface EditorMessageServiceWorkerRegisteredRequest extends EditorMessageRequest {
394
+ action: 'serviceworkerregistered';
395
+ }
396
+ export interface EditorMessageGetToolboxCategoriesResponse {
397
+ categories: ToolboxCategoryDefinition[];
398
+ }
399
+ export interface ProjectTemplate {
400
+ id: string;
401
+ config: PackageConfig;
402
+ files: Record<string, string>;
403
+ }
404
+ export interface ProjectCreationOptions {
405
+ prj?: ProjectTemplate;
406
+ name?: string;
407
+ documentation?: string;
408
+ filesOverride?: Record<string, string>;
409
+ filters?: ProjectFilters;
410
+ temporary?: boolean;
411
+ tutorial?: TutorialOptions;
412
+ dependencies?: Record<string, string>;
413
+ tsOnly?: boolean;
414
+ languageRestriction?: LanguageRestriction;
415
+ preferredEditor?: string;
416
+ extensionUnderTest?: string;
417
+ skillmapProject?: boolean;
418
+ simTheme?: Partial<PackageConfig>;
419
+ firstProject?: boolean;
420
+ }
421
+ export interface ProjectFilters {
422
+ namespaces?: {
423
+ [index: string]: FilterState;
424
+ };
425
+ blocks?: {
426
+ [index: string]: FilterState;
427
+ };
428
+ fns?: {
429
+ [index: string]: FilterState;
430
+ };
431
+ defaultState?: FilterState;
432
+ }
433
+ export declare enum FilterState {
434
+ Hidden = 0,
435
+ Visible = 1,
436
+ Disabled = 2
437
+ }
438
+ export declare enum BlockLayout {
439
+ None = 0,
440
+ Align = 1,
441
+ Clean = 3,
442
+ Flow = 4
443
+ }
444
+ export type EditorType = 'blocks' | 'ts';
445
+ export type EditorEvent = CreateEvent | UIEvent;
446
+ export interface CreateEvent {
447
+ type: 'create';
448
+ blockId: string;
449
+ }
450
+ export interface UIEvent {
451
+ type: 'ui';
452
+ action: 'groupHelpClicked';
453
+ data?: Record<string, string>;
454
+ }
455
+ export interface NativeHostMessage {
456
+ name?: string;
457
+ download?: string;
458
+ save?: string;
459
+ cmd?: string;
460
+ }
461
+ export interface ImportFileOptions {
462
+ filename: string;
463
+ parts: (string | ArrayBuffer)[];
464
+ }
465
+ export type LanguageRestriction = /* Standard */ '' | 'python-only' | 'javascript-only' | 'blocks-only' | 'no-blocks' | 'no-python' | 'no-javascript';
466
+ export interface ToolboxCategoryDefinition {
467
+ /**
468
+ * The display name for the category
469
+ */
470
+ name?: string;
471
+ /**
472
+ * The icon of this category
473
+ */
474
+ icon?: string;
475
+ /**
476
+ * The color of this category
477
+ */
478
+ color?: string;
479
+ /**
480
+ * The weight of the category relative to other categories in the toolbox
481
+ */
482
+ weight?: number;
483
+ /**
484
+ * Whether or not the category should be placed in the advanced category
485
+ */
486
+ advanced?: boolean;
487
+ /**
488
+ * Blocks to appear in the category. Specifying this field will override
489
+ * all existing blocks in the category. The ordering of the blocks is
490
+ * determined by the ordering of this array.
491
+ */
492
+ blocks?: ToolboxBlockDefinition[];
493
+ /**
494
+ * Ordering of category groups
495
+ */
496
+ groups?: string[];
497
+ }
498
+ export interface ToolboxBlockDefinition {
499
+ /**
500
+ * Internal id used to refer to this block or snippet, must be unique
501
+ */
502
+ name: string;
503
+ /**
504
+ * Group label used to categorize block. Blocks are arranged with other
505
+ * blocks that share the same group.
506
+ */
507
+ group?: string;
508
+ /**
509
+ * Indicates an advanced API. Advanced APIs appear after basic ones in the
510
+ * toolbox
511
+ */
512
+ advanced?: boolean;
513
+ /**
514
+ * The weight for the block. Blocks are arranged in order of they appear in the category
515
+ * definition's array but the weight can be specified in the case that other APIs are
516
+ * dynamically added to the category (eg. loops.forever())
517
+ */
518
+ weight?: number;
519
+ /**
520
+ * Description of code to appear in the hover text
521
+ */
522
+ jsDoc?: string;
523
+ /**
524
+ * TypeScript snippet of code to insert when dragged into editor
525
+ */
526
+ snippet?: string;
527
+ /**
528
+ * Python snippet of code to insert when dragged into editor
529
+ */
530
+ pySnippet?: string;
531
+ /**
532
+ * TypeScript name used for highlighting the snippet, uses name if not defined
533
+ */
534
+ snippetName?: string;
535
+ /**
536
+ * Python name used for highlighting the snippet, uses name if not defined
537
+ */
538
+ pySnippetName?: string;
539
+ /**
540
+ * Display just the snippet and nothing else. Should be set to true for
541
+ * language constructs (eg. for-loops) and to false for function
542
+ * calls (eg. Math.random())
543
+ */
544
+ snippetOnly?: boolean;
545
+ /**
546
+ * The return type of the block. This is used to determine the shape of the block rendered.
547
+ */
548
+ retType?: string;
549
+ /**
550
+ * The block definition in XML for the blockly toolbox.
551
+ */
552
+ blockXml?: string;
553
+ /**
554
+ * The Blockly block id used to identify this block.
555
+ */
556
+ blockId?: string;
557
+ }
558
+ export type CloudStatus = 'none' | 'synced' | 'justSynced' | 'offline' | 'syncing' | 'conflict' | 'localEdits';
559
+ export type CodeCardType = 'file' | 'example' | 'codeExample' | 'tutorial' | 'side' | 'template' | 'package' | 'hw' | 'forumUrl' | 'forumExample' | 'sharedExample' | 'link';
560
+ export type CodeCardEditorType = 'blocks' | 'js' | 'py';
561
+ export interface DependencyMap<T> {
562
+ [index: string]: T;
563
+ }
564
+ export interface TargetVersions {
565
+ target: string;
566
+ targetId?: string;
567
+ targetWebsite?: string;
568
+ pxt?: string;
569
+ tag?: string;
570
+ branch?: string;
571
+ commits?: string;
572
+ }
573
+ export interface CodeCardAction {
574
+ url: string;
575
+ editor?: CodeCardEditorType;
576
+ cardType?: CodeCardType;
577
+ }
578
+ /**
579
+ * The schema for the pxt.json package files
580
+ */
581
+ export interface PackageConfig {
582
+ name: string;
583
+ version?: string;
584
+ icon?: string;
585
+ documentation?: string;
586
+ targetVersions?: TargetVersions;
587
+ description?: string;
588
+ dependencies: DependencyMap<string>;
589
+ license?: string;
590
+ authors?: string[];
591
+ files: string[];
592
+ simFiles?: string[];
593
+ testFiles?: string[];
594
+ fileDependencies?: DependencyMap<string>;
595
+ preferredEditor?: string;
596
+ languageRestriction?: LanguageRestriction;
597
+ testDependencies?: Record<string, string>;
598
+ cppDependencies?: Record<string, string>;
599
+ public?: boolean;
600
+ partial?: boolean;
601
+ binaryonly?: boolean;
602
+ platformio?: {
603
+ dependencies?: DependencyMap<string>;
604
+ };
605
+ compileServiceVariant?: string;
606
+ palette?: string[];
607
+ paletteNames?: string[];
608
+ screenSize?: {
609
+ width: number;
610
+ height: number;
611
+ };
612
+ yotta?: YottaConfig;
613
+ codal?: {
614
+ libraries?: string[];
615
+ };
616
+ npmDependencies?: DependencyMap<string>;
617
+ card?: CodeCard;
618
+ additionalFilePath?: string;
619
+ additionalFilePaths?: string[];
620
+ core?: boolean;
621
+ weight?: number;
622
+ gistId?: string;
623
+ extension?: PackageExtension;
624
+ isExtension?: boolean;
625
+ dalDTS?: {
626
+ corePackage?: string;
627
+ includeDirs?: string[];
628
+ excludePrefix?: string[];
629
+ compileServiceVariant?: string;
630
+ };
631
+ features?: string[];
632
+ hidden?: boolean;
633
+ searchOnly?: boolean;
634
+ skipLocalization?: boolean;
635
+ snippetBuilders?: SnippetConfig[];
636
+ experimentalHw?: boolean;
637
+ requiredCategories?: string[];
638
+ supportedTargets?: string[];
639
+ firmwareUrl?: string;
640
+ disablesVariants?: string[];
641
+ utf8?: boolean;
642
+ disableTargetTemplateFiles?: boolean;
643
+ theme?: string | Record<string, string>;
644
+ assetPack?: boolean;
645
+ assetPacks?: DependencyMap<boolean>;
646
+ }
647
+ export interface PackageExtension {
648
+ namespace?: string;
649
+ group?: string;
650
+ label?: string;
651
+ color?: string;
652
+ advanced?: boolean;
653
+ url?: string;
654
+ localUrl?: string;
655
+ }
656
+ export interface YottaConfig {
657
+ dependencies?: DependencyMap<string>;
658
+ config?: any;
659
+ /**
660
+ * Overridable config flags
661
+ */
662
+ optionalConfig?: any;
663
+ userConfigs?: {
664
+ description: string;
665
+ config: any;
666
+ }[];
667
+ configIsJustDefaults?: boolean;
668
+ ignoreConflicts?: boolean;
669
+ }
670
+ export interface CodeCard {
671
+ name?: string;
672
+ shortName?: string;
673
+ title?: string;
674
+ role?: string;
675
+ ariaLabel?: string;
676
+ label?: string;
677
+ labelIcon?: string;
678
+ labelClass?: string;
679
+ tags?: string[];
680
+ tabIndex?: number;
681
+ style?: string;
682
+ color?: string;
683
+ description?: string;
684
+ extracontent?: string;
685
+ blocksXml?: string;
686
+ typeScript?: string;
687
+ imageUrl?: string;
688
+ largeImageUrl?: string;
689
+ videoUrl?: string;
690
+ youTubeId?: string;
691
+ youTubePlaylistId?: string;
692
+ buttonLabel?: string;
693
+ actionIcon?: string;
694
+ time?: number;
695
+ url?: string;
696
+ learnMoreUrl?: string;
697
+ buyUrl?: string;
698
+ feedbackUrl?: string;
699
+ responsive?: boolean;
700
+ cardType?: CodeCardType;
701
+ editor?: CodeCardEditorType;
702
+ otherActions?: CodeCardAction[];
703
+ directOpen?: boolean;
704
+ projectId?: string;
705
+ header?: string;
706
+ tutorialStep?: number;
707
+ tutorialLength?: number;
708
+ icon?: string;
709
+ iconContent?: string;
710
+ iconColor?: string;
711
+ onClick?: (e: any) => void;
712
+ onLabelClicked?: (e: any) => void;
713
+ target?: string;
714
+ className?: string;
715
+ variant?: string;
716
+ }
717
+ export interface SnippetConfig {
718
+ name: string;
719
+ namespace: string;
720
+ group?: string;
721
+ label: string;
722
+ outputType: 'blocks';
723
+ outputBehavior?: /*assumed default*/ 'merge' | 'replace';
724
+ initialOutput?: string;
725
+ questions: SnippetQuestions[];
726
+ }
727
+ export type SnippetAnswerTypes = 'number' | 'text' | 'variableName' | 'dropdown' | 'spriteEditor' | 'yesno' | string;
728
+ export interface SnippetGoToOptions {
729
+ question?: number;
730
+ validate?: {
731
+ regex?: {
732
+ token: string;
733
+ regex: string;
734
+ match?: SnippetParameters;
735
+ noMatch?: SnippetParameters;
736
+ };
737
+ };
738
+ parameters?: SnippetParameters[];
739
+ }
740
+ export interface SnippetParameters {
741
+ token?: string;
742
+ answer?: string;
743
+ question: number;
744
+ }
745
+ export type SnippetQuestionInput = {
746
+ label?: string;
747
+ } & ({
748
+ answerToken: string;
749
+ defaultAnswer: SnippetAnswerTypes;
750
+ } | {
751
+ answerTokens: string[];
752
+ defaultAnswers: SnippetAnswerTypes[];
753
+ }) & ({
754
+ type: string;
755
+ } | {
756
+ type: 'number' | 'positionPicker';
757
+ max?: number;
758
+ min?: number;
759
+ } | {
760
+ type: 'dropdown';
761
+ options: Record<string, string>;
762
+ } | {
763
+ type: 'yesno';
764
+ });
765
+ export interface SnippetQuestions {
766
+ title: string;
767
+ output?: string;
768
+ outputConditionalOnAnswer?: string;
769
+ errorMessage?: string;
770
+ goto?: SnippetGoToOptions;
771
+ inputs: SnippetQuestionInput[];
772
+ hint?: string;
773
+ }
774
+ export interface TutorialOptions {
775
+ tutorial?: string;
776
+ tutorialName?: string;
777
+ tutorialReportId?: string;
778
+ tutorialStepInfo?: TutorialStepInfo[];
779
+ tutorialActivityInfo?: TutorialActivityInfo[];
780
+ tutorialStep?: number;
781
+ tutorialReady?: boolean;
782
+ tutorialHintCounter?: number;
783
+ tutorialStepExpanded?: boolean;
784
+ tutorialMd?: string;
785
+ tutorialCode?: string[];
786
+ tutorialRecipe?: boolean;
787
+ templateCode?: string;
788
+ mergeHeaderId?: string;
789
+ mergeCarryoverCode?: boolean;
790
+ autoexpandStep?: boolean;
791
+ metadata?: TutorialMetadata;
792
+ language?: string;
793
+ assetFiles?: Record<string, string>;
794
+ jres?: string;
795
+ customTs?: string;
796
+ templateLoaded?: boolean;
797
+ globalBlockConfig?: TutorialBlockConfig;
798
+ globalValidationConfig?: CodeValidationConfig;
799
+ simTheme?: Partial<PackageConfig>;
800
+ }
801
+ export interface TutorialStepInfo {
802
+ showHint?: boolean;
803
+ showDialog?: boolean;
804
+ resetDiff?: boolean;
805
+ tutorialCompleted?: boolean;
806
+ title?: string;
807
+ activity?: number;
808
+ contentMd?: string;
809
+ headerContentMd?: string;
810
+ hintContentMd?: string;
811
+ localBlockConfig?: TutorialBlockConfig;
812
+ localValidationConfig?: CodeValidationConfig;
813
+ }
814
+ export interface TutorialBlockConfig {
815
+ md?: string;
816
+ blocks?: {
817
+ blockId?: string;
818
+ xml?: string;
819
+ }[];
820
+ }
821
+ export interface TutorialMetadata {
822
+ activities?: boolean;
823
+ explicitHints?: boolean;
824
+ flyoutOnly?: boolean;
825
+ hideIteration?: boolean;
826
+ diffs?: boolean;
827
+ noDiffs?: boolean;
828
+ codeStart?: string;
829
+ codeStop?: string;
830
+ autoexpandOff?: boolean;
831
+ preferredEditor?: string;
832
+ }
833
+ export interface TutorialActivityInfo {
834
+ name: string;
835
+ step: number;
836
+ }
837
+ export interface CodeValidationConfig {
838
+ validatorsMetadata: {
839
+ validatorType: string;
840
+ properties: {
841
+ enabled?: string;
842
+ markers?: string;
843
+ };
844
+ }[];
845
+ }