/// <reference path="../pxtlib.d.ts" />
import * as Blockly from "blockly";
interface BlockDefinition {
    codeCard?: any;
    init: () => void;
    getVars?: () => any[];
    renameVar?: (oldName: string, newName: string) => void;
    customContextMenu?: any;
    getProcedureCall?: () => string;
    renameProcedure?: (oldName: string, newName: string) => void;
    defType_?: string;
    onchange?: (event: any) => void;
    mutationToDom?: () => Element;
    domToMutation?: (xmlElement: Element) => void;
}
export declare function isTupleType(type: string): string[];
export declare function builtinBlocks(): pxt.Map<{
    block: BlockDefinition;
    symbol?: pxtc.SymbolInfo;
}>;
export declare const buildinBlockStatements: pxt.Map<boolean>;
export declare let cachedBlockInfo: pxtc.BlocksInfo;
export declare function blockSymbol(type: string): pxtc.SymbolInfo;
export declare function injectBlocks(blockInfo: pxtc.BlocksInfo): pxtc.SymbolInfo[];
export declare function hasArrowFunction(fn: pxtc.SymbolInfo): boolean;
export declare function cleanBlocks(): void;
/**
 * Used by pxtrunner to initialize blocks in the docs
 */
export declare function initializeAndInject(blockInfo: pxtc.BlocksInfo): void;
/**
 * Used by main app to initialize blockly blocks.
 * Blocks are injected separately by called injectBlocks
 */
export declare function initialize(blockInfo: pxtc.BlocksInfo): void;
export declare function setOutputCheck(block: Blockly.Block, retType: string, info: pxtc.BlocksInfo): void;
export declare function getFixedInstanceDropdownValues(apis: pxtc.ApisInfo, qName: string): pxtc.SymbolInfo[];
export declare function generateIcons(instanceSymbols: pxtc.SymbolInfo[]): void;
/**
 * Blockly variable fields can't be set directly; you either have to use the
 * variable ID or set the value of the model and not the field
 */
export declare function setVarFieldValue(block: Blockly.Block, fieldName: string, newName: string): void;
export {};
