namespace pxt . editor { export enum SimState { Stopped , Pending , Starting , Running } export interface IEditor { undo ( ) : void ; redo ( ) : void ; hasUndo ( ) : boolean ; hasRedo ( ) : boolean ; zoomIn ( ) : void ; zoomOut ( ) : void ; resize ( ) : void ; setScale ( scale ) : void ; } export interface IFile { name : string ; virtual ? : boolean ; } export function isBlocks ( f ) { return U . endsWith ( f . name , ".blocks" ) ; } export interface FileHistoryEntry { id : string ; name : string ; pos : any ; } export interface EditorSettings { editorFontSize : number ; fileHistory : FileHistoryEntry [ ] ; } export enum ErrorListState { HeaderOnly = "errorListHeader" , Expanded = "errorListExpanded" } export interface IAppProps { } export interface IAppState { active ? : boolean ; header ? : pxt . workspace . Header ; editorState ? : EditorState ; currFile ? : IFile ; fileState ? : string ; showFiles ? : boolean ; sideDocsLoadUrl ? : string ; sideDocsCollapsed ? : boolean ; projectName ? : string ; suppressPackageWarning ? : boolean ; tutorialOptions ? : pxt . tutorial . TutorialOptions ; lightbox ? : boolean ; keymap ? : boolean ; simState ? : SimState ; autoRun ? : boolean ; resumeOnVisibility ? : boolean ; compiling ? : boolean ; isSaving ? : boolean ; publishing ? : boolean ; hideEditorFloats ? : boolean ; collapseEditorTools ? : boolean ; showBlocks ? : boolean ; showParts ? : boolean ; fullscreen ? : boolean ; showMiniSim ? : boolean ; mute ? : boolean ; embedSimView ? : boolean ; editorPosition ? : { lineNumber : number ; column : number ; file : IFile ; } ; tracing ? : boolean ; debugging ? : boolean ; debugFirstRun ? : boolean ; bannerVisible ? : boolean ; pokeUserComponent ? : string ; flashHint ? : boolean ; editorOffset ? : string ; print ? : boolean ; greenScreen ? : boolean ; accessibleBlocks ? : boolean ; home ? : boolean ; hasError ? : boolean ; cancelledDownload ? : boolean ; simSerialActive ? : boolean ; deviceSerialActive ? : boolean ; errorListState ? : ErrorListState ; screenshoting ? : boolean ; } export interface EditorState { filters ? : pxt . editor . ProjectFilters ; searchBar ? : boolean ; hasCategories ? : boolean ; } export interface ProjectCreationOptions { prj ? : pxt . ProjectTemplate ; name ? : string ; documentation ? : string ; filesOverride ? : pxt . Map < string > ; filters ? : ProjectFilters ; temporary ? : boolean ; tutorial ? : pxt . tutorial . TutorialOptions ; dependencies ? : pxt . Map < string > ; tsOnly ? : boolean ; languageRestriction ? : LanguageRestriction ; preferredEditor ? : string ; extensionUnderTest ? : string ; skillmapProject ? : boolean ; } export interface ExampleImportOptions { name : string ; path : string ; loadBlocks ? : boolean ; prj ? : ProjectTemplate ; preferredEditor ? : string ; } export interface StartActivityOptions { activity : Activity ; path : string ; title ? : string ; editor ? : string ; focus ? : boolean ; importOptions ? : pxt . editor . ExampleImportOptions ; previousProjectHeaderId ? : string ; carryoverPreviousCode ? : boolean ; } export interface ProjectFilters { namespaces ? : { [ index ] : FilterState ; } ; blocks ? : { [ index ] : FilterState ; } ; fns ? : { [ index ] : FilterState ; } ; defaultState ? : FilterState ; } export enum FilterState { Hidden = 0 , Visible = 1 , Disabled = 2 } export interface ModalDialogButton { label : string ; url ? : string ; } export interface ModalDialogOptions { header : string ; body : string ; buttons ? : ModalDialogButton [ ] ; } export interface ScreenshotData { data ? : ImageData ; delay ? : number ; event ? : "start" | "stop" ; } export interface SimulatorStartOptions { clickTrigger ? : boolean ; } export interface ImportFileOptions { extension ? : boolean ; openHomeIfFailed ? : boolean ; } export interface UserInfo { id : string ; userName ? : string ; name : string ; profile ? : string ; loginHint ? : string ; initials ? : string ; photo ? : string ; } export type Activity = "tutorial" | "recipe" | "example" ; export interface IProjectView { state : IAppState ; setState ( st ) : void ; forceUpdate ( ) : void ; reloadEditor ( ) : void ; openBlocks ( ) : void ; openJavaScript ( giveFocusOnLoading ? ) : void ; openPython ( giveFocusOnLoading ? ) : void ; openAssets ( ) : void ; openSettings ( ) : void ; openSimView ( ) : void ; openSimSerial ( ) : void ; openDeviceSerial ( ) : void ; openPreviousEditor ( ) : void ; switchTypeScript ( ) : void ; openTypeScriptAsync ( ) : Promise < void > ; openPythonAsync ( ) : Promise < void > ; saveBlocksToTypeScriptAsync ( ) : Promise < string > ; saveFileAsync ( ) : Promise < void > ; saveCurrentSourceAsync ( ) : Promise < void > ; saveProjectAsync ( ) : Promise < void > ; loadHeaderAsync ( h ) : Promise < void > ; reloadHeaderAsync ( ) : Promise < void > ; importProjectAsync ( prj , editorState ? ) : Promise < void > ; importTutorialAsync ( markdown ) : Promise < void > ; openProjectByHeaderIdAsync ( headerId ) : Promise < void > ; overrideTypescriptFile ( text ) : void ; overrideBlocksFile ( text ) : void ; exportAsync ( ) : Promise < string > ; newEmptyProject ( name ? , documentation ? , preferredEditor ? ) : void ; newProject ( options ? ) : void ; createProjectAsync ( options ) : Promise < void > ; importExampleAsync ( options ) : Promise < void > ; showScriptManager ( ) : void ; importProjectDialog ( ) : void ; removeProject ( ) : void ; editText ( ) : void ; hasCloudSync ( ) : boolean ; getPreferredEditor ( ) : string ; saveAndCompile ( ) : void ; updateHeaderName ( name ) : void ; updateHeaderNameAsync ( name ) : Promise < void > ; compile ( ) : void ; setFile ( fn , line ? ) : void ; setSideFile ( fn , line ? ) : void ; navigateToError ( diag ) : void ; setSideDoc ( path , blocksEditor ? ) : void ; setSideMarkdown ( md ) : void ; setSideDocCollapsed ( shouldCollapse ? ) : void ; removeFile ( fn , skipConfirm ? ) : void ; updateFileAsync ( name , content , open ? ) : Promise < void > ; openHome ( ) : void ; unloadProjectAsync ( home ? ) : Promise < void > ; setTutorialStep ( step ) : void ; setTutorialInstructionsExpanded ( value ) : void ; exitTutorial ( ) : void ; completeTutorialAsync ( ) : Promise < void > ; showTutorialHint ( ) : void ; isTutorial ( ) : boolean ; onTutorialLoaded ( ) : void ; setTutorialCodeStatus ( step , status ) : void ; pokeUserActivity ( ) : void ; stopPokeUserActivity ( ) : void ; clearUserPoke ( ) : void ; setHintSeen ( step ) : void ; setEditorOffset ( ) : void ; anonymousPublishAsync ( screenshotUri ? ) : Promise < string > ; anonymousPublishHeaderByIdAsync ( headerId ) : Promise < Cloud . JsonScript > ; startStopSimulator ( opts ? ) : void ; stopSimulator ( unload ? , opts ? ) : void ; restartSimulator ( ) : void ; startSimulator ( opts ? ) : void ; runSimulator ( ) : void ; isSimulatorRunning ( ) : boolean ; expandSimulator ( ) : void ; collapseSimulator ( ) : void ; toggleSimulatorCollapse ( ) : void ; toggleSimulatorFullscreen ( ) : void ; setSimulatorFullScreen ( enabled ) : void ; proxySimulatorMessage ( content ) : void ; toggleTrace ( intervalSpeed ? ) : void ; setTrace ( enabled , intervalSpeed ? ) : void ; toggleMute ( ) : void ; setMute ( on ) : void ; openInstructions ( ) : void ; closeFlyout ( ) : void ; printCode ( ) : void ; requestScreenshotAsync ( ) : Promise < string > ; downloadScreenshotAsync ( ) : Promise < void > ; toggleDebugging ( ) : void ; dbgPauseResume ( ) : void ; dbgStepInto ( ) : void ; dbgStepOver ( ) : void ; dbgInsertBreakpoint ( ) : void ; setBannerVisible ( b ) : void ; typecheckNow ( ) : void ; shouldPreserveUndoStack ( ) : boolean ; openExtension ( extension , url , consentRequired ? , trusted ? ) : void ; handleExtensionRequest ( request ) : void ; fireResize ( ) : void ; updateEditorLogo ( left , rgba ? ) : number ; loadBlocklyAsync ( ) : Promise < void > ; isBlocksEditor ( ) : boolean ; isTextEditor ( ) : boolean ; isPxtJsonEditor ( ) : boolean ; blocksScreenshotAsync ( pixelDensity ? , encodeBlocks ? ) : Promise < string > ; renderBlocksAsync ( req ) : Promise < EditorMessageRenderBlocksResponse > ; renderPythonAsync ( req ) : Promise < EditorMessageRenderPythonResponse > ; toggleHighContrast ( ) : void ; toggleGreenScreen ( ) : void ; toggleAccessibleBlocks ( ) : void ; setAccessibleBlocks ( enabled ) : void ; launchFullEditor ( ) : void ; resetWorkspace ( ) : void ; settings : EditorSettings ; isEmbedSimActive ( ) : boolean ; isBlocksActive ( ) : boolean ; isJavaScriptActive ( ) : boolean ; isPythonActive ( ) : boolean ; isAssetsActive ( ) : boolean ; editor : IEditor ; startActivity ( options ) : void ; showLightbox ( ) : void ; hideLightbox ( ) : void ; showKeymap ( show ) : void ; toggleKeymap ( ) : void ; showReportAbuse ( ) : void ; showLanguagePicker ( ) : void ; showShareDialog ( title ? ) : void ; showAboutDialog ( ) : void ; showLoginDialog ( continuationHash ? ) : void ; showProfileDialog ( location ? ) : void ; showImportUrlDialog ( ) : void ; showImportFileDialog ( options ? ) : void ; showImportGithubDialog ( ) : void ; showResetDialog ( ) : void ; showExitAndSaveDialog ( ) : void ; showChooseHwDialog ( skipDownload ? ) : void ; showExperimentsDialog ( ) : void ; showPackageDialog ( query ? ) : void ; showBoardDialogAsync ( features ? , closeIcon ? ) : Promise < void > ; checkForHwVariant ( ) : boolean ; pairAsync ( ) : Promise < void > ; createModalClasses ( classes ? ) : string ; showModalDialogAsync ( options ) : Promise < void > ; askForProjectCreationOptionsAsync ( ) : Promise < ProjectCreationOptions > ; pushScreenshotHandler ( handler ) : void ; popScreenshotHandler ( ) : void ; openNewTab ( header , dependent ) : void ; createGitHubRepositoryAsync ( ) : Promise < void > ; saveLocalProjectsToCloudAsync ( headerIds ) : Promise < pxt . Map < string > | undefined > ; requestProjectCloudStatus ( headerIds ) : Promise < void > ; convertCloudProjectsToLocal ( userId ) : Promise < void > ; setLanguageRestrictionAsync ( restriction ) : Promise < void > ; } export interface IHexFileImporter { id : string ; canImport ( data ) : boolean ; importAsync ( project , data ) : Promise < void > ; } export interface IResourceImporter { id : string ; canImport ( data ) : boolean ; importAsync ( project , data ) : Promise < void > ; } export interface ISettingsProps { parent : IProjectView ; visible ? : boolean ; collapsed ? : boolean ; simSerialActive ? : boolean ; devSerialActive ? : boolean ; } export interface IFieldCustomOptions { selector : string ; editor : Blockly . FieldCustomConstructor ; text ? : string ; validator ? : any ; } export interface ExtensionOptions { blocklyToolbox : ToolboxDefinition ; monacoToolbox : ToolboxDefinition ; projectView : IProjectView ; } export interface IToolboxOptions { blocklyToolbox ? : ToolboxDefinition ; monacoToolbox ? : ToolboxDefinition ; } export interface ExtensionResult { hexFileImporters ? : IHexFileImporter [ ] ; resourceImporters ? : IResourceImporter [ ] ; beforeCompile ? : ( ) => void ; patchCompileResultAsync ? : ( r : pxtc . CompileResult ) => Promise < void > ; deployAsync ? : ( r : pxtc . CompileResult ) => Promise < void > ; saveOnlyAsync ? : ( r : ts . pxtc . CompileResult ) => Promise < void > ; saveProjectAsync ? : ( project : pxt . cpp . HexFile ) => Promise < void > ; renderBrowserDownloadInstructions ? : ( ) => any ; renderUsbPairDialog ? : ( firmwareUrl ? : string , failedOnce ? : boolean ) => any ; renderIncompatibleHardwareDialog ? : ( unsupportedParts : string [ ] ) => any ; showUploadInstructionsAsync ? : ( fn : string , url : string , confirmAsync : ( options : any ) => Promise < number > ) => Promise < void > ; toolboxOptions ? : IToolboxOptions ; blocklyPatch ? : ( pkgTargetVersion : string , dom : Element ) => void ; webUsbPairDialogAsync ? : ( pairAsync : ( ) => Promise < boolean > , confirmAsync : ( options : any ) => Promise < number > ) => Promise < number > ; mkPacketIOWrapper ? : ( io : pxt . packetio . PacketIO ) => pxt . packetio . PacketIOWrapper ; onTutorialCompleted ? : ( ) => void ; onCodeStart ? : ( ) => void ; onCodeStop ? : ( ) => void ; } export interface FieldExtensionOptions { } export interface FieldExtensionResult { fieldEditors ? : IFieldCustomOptions [ ] ; } export interface ToolboxDefinition { loops ? : ToolboxCategoryDefinition ; logic ? : ToolboxCategoryDefinition ; variables ? : ToolboxCategoryDefinition ; maths ? : ToolboxCategoryDefinition ; text ? : ToolboxCategoryDefinition ; arrays ? : ToolboxCategoryDefinition ; functions ? : ToolboxCategoryDefinition ; } export interface ToolboxCategoryDefinition { /**
         * The display name for the category
         */ name ? : string ; /**
         * The icon of this category
         */ icon ? : string ; /**
         * The color of this category
         */ color ? : string ; /**
         * The weight of the category relative to other categories in the toolbox
         */ weight ? : number ; /**
         * Whether or not the category should be placed in the advanced category
         */ advanced ? : boolean ; /**
         * Blocks to appear in the category. Specifying this field will override
         * all existing blocks in the category. The ordering of the blocks is
         * determined by the ordering of this array.
         */ blocks ? : ToolboxBlockDefinition [ ] ; /**
         * Ordering of category groups
         */ groups ? : string [ ] ; } export interface ToolboxBlockDefinition { /**
         * Internal id used to refer to this block or snippet, must be unique
         */ name : string ; /**
         * Group label used to categorize block.  Blocks are arranged with other
         * blocks that share the same group.
         */ group ? : string ; /**
         * Indicates an advanced API. Advanced APIs appear after basic ones in the
         * toolbox
         */ advanced ? : boolean ; /**
         * The weight for the block. Blocks are arranged in order of they appear in the category
         * definition's array but the weight can be specified in the case that other APIs are
         * dynamically added to the category (eg. loops.forever())
         */ weight ? : number ; /**
         * Description of code to appear in the hover text
         */ jsDoc ? : string ; /**
         * TypeScript snippet of code to insert when dragged into editor
         */ snippet ? : string ; /**
         * Python snippet of code to insert when dragged into editor
         */ pySnippet ? : string ; /**
         * TypeScript name used for highlighting the snippet, uses name if not defined
         */ snippetName ? : string ; /**
         * Python name used for highlighting the snippet, uses name if not defined
         */ pySnippetName ? : string ; /**
         * Display just the snippet and nothing else. Should be set to true for
         * language constructs (eg. for-loops) and to false for function
         * calls (eg. Math.random())
         */ snippetOnly ? : boolean ; /**
         * The return type of the block. This is used to determine the shape of the block rendered.
         */ retType ? : string ; /**
         * The block definition in XML for the blockly toolbox.
         */ blockXml ? : string ; /**
         * The Blockly block id used to identify this block.
         */ blockId ? : string ; } export let initExtensionsAsync = opts => Promise . resolve < ExtensionResult > ( { } ) ; export let initFieldExtensionsAsync = opts => Promise . resolve < FieldExtensionResult > ( { } ) ; export interface NativeHostMessage { name ? : string ; download ? : string ; save ? : string ; cmd ? : string ; } export let HELP_IMAGE_URI = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAyNiAyNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTMiIGN5PSIxMyIgcj0iMTMiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xNy45NTIgOS4xODQwMkMxNy45NTIgMTAuMjU2IDE3LjgxNiAxMS4wNzIgMTcuNTQ0IDExLjYzMkMxNy4yODggMTIuMTkyIDE2Ljc1MiAxMi43OTIgMTUuOTM2IDEzLjQzMkMxNS4xMiAxNC4wNzIgMTQuNTc2IDE0LjU4NCAxNC4zMDQgMTQuOTY4QzE0LjA0OCAxNS4zMzYgMTMuOTIgMTUuNzM2IDEzLjkyIDE2LjE2OFYxNi45NkgxMS44MDhDMTEuNDI0IDE2LjQ2NCAxMS4yMzIgMTUuODQgMTEuMjMyIDE1LjA4OEMxMS4yMzIgMTQuNjg4IDExLjM4NCAxNC4yODggMTEuNjg4IDEzLjg4OEMxMS45OTIgMTMuNDg4IDEyLjUzNiAxMi45NjggMTMuMzIgMTIuMzI4QzE0LjEwNCAxMS42NzIgMTQuNjI0IDExLjE2OCAxNC44OCAxMC44MTZDMTUuMTM2IDEwLjQ0OCAxNS4yNjQgOS45NjgwMiAxNS4yNjQgOS4zNzYwMkMxNS4yNjQgOC4yMDgwMiAxNC40MTYgNy42MjQwMiAxMi43MiA3LjYyNDAyQzExLjc2IDcuNjI0MDIgMTAuNzUyIDcuNzM2MDIgOS42OTYgNy45NjAwMkw5LjE0NCA4LjA4MDAyTDkgNi4wODgwMkMxMC40ODggNS41NjAwMiAxMS44NCA1LjI5NjAyIDEzLjA1NiA1LjI5NjAyQzE0LjczNiA1LjI5NjAyIDE1Ljk2OCA1LjYwODAyIDE2Ljc1MiA2LjIzMjAyQzE3LjU1MiA2Ljg0MDAyIDE3Ljk1MiA3LjgyNDAyIDE3Ljk1MiA5LjE4NDAyWk0xMS40IDIyVjE4LjY0SDE0LjE4NFYyMkgxMS40WiIgZmlsbD0iIzU5NUU3NCIvPgo8L3N2Zz4K' ; let _initEditorExtensionsPromise ; export function initEditorExtensionsAsync ( ) { if ( ! _initEditorExtensionsPromise ) { _initEditorExtensionsPromise = Promise . resolve ( ) ; if ( pxt . appTarget && pxt . appTarget . appTheme && pxt . appTarget . appTheme . extendFieldEditors ) { const opts = { } ; _initEditorExtensionsPromise = _initEditorExtensionsPromise . then ( ( ) => pxt . BrowserUtils . loadBlocklyAsync ( ) ) . then ( ( ) => pxt . BrowserUtils . loadScriptAsync ( "fieldeditors.js" ) ) . then ( ( ) => pxt . editor . initFieldExtensionsAsync ( opts ) ) . then ( res => { if ( res . fieldEditors ) res . fieldEditors . forEach ( fi => { pxt . blocks . registerFieldEditor ( fi . selector , fi . editor , fi . validator ) ; } ) ; } ) ; } } return _initEditorExtensionsPromise ; } }