[
    {
        "type": "com.google.appinventor.components.runtime.AccelerometerSensor",
        "name": "AccelerometerSensor",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "Non-visible component that can detect shaking and measure acceleration approximately in three dimensions using SI units (m\/s<sup>2<\/sup>).  The components are: <ul>\n<li> <strong>xAccel<\/strong>: 0 when the phone is at rest on a flat      surface, positive when the phone is tilted to the right (i.e.,      its left side is raised), and negative when the phone is tilted      to the left (i.e., its right size is raised).<\/li>\n <li> <strong>yAccel<\/strong>: 0 when the phone is at rest on a flat      surface, positive when its bottom is raised, and negative when      its top is raised. <\/li>\n <li> <strong>zAccel<\/strong>: Equal to -9.8 (earth's gravity in meters per      second per second when the device is at rest parallel to the ground      with the display facing up,      0 when perpendicular to the ground, and +9.8 when facing down.       The value can also be affected by accelerating it with or against      gravity. <\/li><\/ul>",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/sensors\/accelerometer\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/accelerometersensor.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "LegacyMode",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MinimumInterval",
                "editorType": "non_negative_integer",
                "defaultValue": "400",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Sensitivity",
                "editorType": "accelerometer_sensitivity",
                "defaultValue": "2",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Available",
                "description": "Available property getter method (read-only property).",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If true, the sensor will generate events.  Otherwise, no events\n are generated even if the device is accelerated or shaken.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "LegacyMode",
                "description": "Prior to the release that added this property the AccelerometerSensor component passed through sensor values directly as received from the Android system. However these values do not compensate for tablets that default to Landscape mode, requiring the MIT App Inventor programmer to compensate. However compensating would result in incorrect results in Portrait mode devices such as phones. We now detect Landscape mode tablets and perform the compensation. However if your project is already compensating for the change, you will now get incorrect results. Although our preferred solution is for you to update your project, you can also just set this property to \u201ctrue\u201d and our compensation code will be deactivated. Note: We recommend that you update your project as we may remove this property in a future release.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "MinimumInterval",
                "description": "The minimum interval, in milliseconds, between phone shakes",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Sensitivity",
                "description": "A number that encodes how sensitive the accelerometer is. The choices are: 1 = weak, 2 = moderate,  3 = strong.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "XAccel",
                "description": "Returns the acceleration in the X-dimension in SI units (m\/s^2).\n The sensor must be enabled to return meaningful values.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "YAccel",
                "description": "Returns the acceleration in the Y-dimension in SI units (m\/s^2).\n The sensor must be enabled to return meaningful values.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ZAccel",
                "description": "Returns the acceleration in the Z-dimension in SI units (m\/s^2).\n The sensor must be enabled to return meaningful values.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AccelerationChanged",
                "description": "Indicates the acceleration changed in the X, Y, and\/or Z dimensions.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "xAccel",
                        "type": "number"
                    },
                    {
                        "name": "yAccel",
                        "type": "number"
                    },
                    {
                        "name": "zAccel",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Shaking",
                "description": "Indicates the device started being shaken or continues to be shaken.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.ActivityStarter",
        "name": "ActivityStarter",
        "external": "false",
        "version": "6",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "CONNECTIVITY",
        "helpString": "A component that can launch an activity using the <code>StartActivity<\/code> method.<p>Activities that can be launched include: <ul> \n<li> starting other App Inventor for Android apps <\/li> \n<li> starting the camera application <\/li> \n<li> performing web search <\/li> \n<li> opening a browser to a specified web page<\/li> \n<li> opening the map application to a specified location<\/li><\/ul> \nYou can also launch activities that return text data.  See the documentation on using the Activity Starter for examples.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/activityStarter.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Action",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ActivityClass",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ActivityPackage",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DataType",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DataUri",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ExtraKey",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ExtraValue",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ResultName",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Action",
                "description": "Returns the action that will be used to start the activity.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ActivityClass",
                "description": "Returns the class part of the specific component that will be started.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ActivityPackage",
                "description": "Returns the package part of the specific component that will be started.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DataType",
                "description": "Returns the MIME type to pass to the activity.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DataUri",
                "description": "Returns the data URI that will be used to start the activity.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ExtraKey",
                "description": "Returns the extra key that will be passed to the activity.\nDEPRECATED: New code should use Extras property instead.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ExtraValue",
                "description": "Returns the extra value that will be passed to the activity.\nDEPRECATED: New code should use Extras property instead.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Extras",
                "description": "Specifies the list of key-value pairs that will be passed as extra data to the activity.",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Result",
                "description": "Returns the result from the activity.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ResultName",
                "description": "Returns the name that will be used to retrieve a result from the activity.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ResultType",
                "description": "Returns the MIME type from the activity.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ResultUri",
                "description": "Returns the URI from the activity.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "ActivityCanceled",
                "description": "Event raised if this ActivityStarter returns because the activity was canceled.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ActivityError",
                "description": "The ActivityError event is no longer used. Please use the Screen.ErrorOccurred event instead.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AfterActivity",
                "description": "Event raised after this ActivityStarter returns.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "result",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "ResolveActivity",
                "description": "Returns the name of the activity that corresponds to this ActivityStarter, or an empty string if no corresponding activity can be found.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "StartActivity",
                "description": "Start the activity corresponding to this ActivityStarter.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.AdAmazon",
        "name": "AdAmazon",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "AdAmazon component allows you to monetize your app. You must have a valid publisher id that can be obtained from https:\/\/developer.amazon.com. If your publisher id is invalid, the AdAmazon banner will not display on the emulator or the device.",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/amazon-banner\/",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/amazon.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "PublisherId",
                "editorType": "string",
                "defaultValue": "AmazonPublisherId",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RefreshAd",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TestMode",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "PublisherId",
                "description": "Sets the Amazon Ad Publisher Id and refreshes the ad.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RefreshAd",
                "description": "Refreshes the ad.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TestMode",
                "description": "Turns the debugging on \/ off based on enabled parameter.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdDismissed",
                "description": "Event to detect that a ad was dismissed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdExpanded",
                "description": "Event to detect that a ad was expanded.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdFailedToLoad",
                "description": "Event to detect that the try to load a ad was not successful.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errCode",
                        "type": "text"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdLoaded",
                "description": "Event to detect that a ad was loaded.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.AdAmazonInterstitial",
        "name": "AdAmazonInterstitial",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "An interstitial ad is a full-page ad. AdAmazonInterstitial component allows you to monetize your app. You must have a valid Amazon Application Key. If your application key is invalid, the ad will not display on the emulator or the device. Warning: Make sure you're in test mode during development to avoid being disabled for clicking your own ads. ",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/amazon-interstitial\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/amazon.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ApplicationKey",
                "editorType": "string",
                "defaultValue": "ApplicationKey",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CommissionInterstitialAdsNetwork",
                "editorType": "commission_interstitial_ads_network",
                "defaultValue": "unity",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableDebug",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableGeoLocationTargeting",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableTesting",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TargetAge",
                "editorType": "integer",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ApplicationKey",
                "description": "Enter Application Key. Go to Amazon Developer Portal and sign-in for your ApplicationKey",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "CommissionInterstitialAdsNetwork",
                "description": "Sets the ad network used to take the commission.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "EnableDebug",
                "description": "",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableGeoLocationTargeting",
                "description": "If set to true, uses latitude and longitude coordinates as part of an ad request",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableTesting",
                "description": "For debugging \/ development purposes flag all ad requests as tests, but set to false for production builds",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TargetAge",
                "description": "You can pass age information to the Amazon Mobile Ad Network to target specific age groups. If set as 0, Age Targetting will not be used",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdClosed",
                "description": "Triggered when the close button of the interstitial ad is clicked. It's important to remember only one interstitial ad can be shown at a time. The previous ad has to be dismissed before a new ad can be shown.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdCollapsed",
                "description": "After a user clicks on the close ad button on an expanded ad, this callback is called immediately after collapsing the ad. This callback can be used to do things like resume your app or restart audio.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdExpanded",
                "description": "This callback is called each time an ad is successfully loaded. You can use this to log metrics on ad views and assist with initial integration. Detailed information about the ad that loaded can be obtained from the AdProperties object.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdFailedToLoad",
                "description": "Whenever an ad fails to be retrieved, the event is called, returning the error message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "error",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdFailedToShow",
                "description": "Called when an an attempt was made to display the ad, but the ad was not ready to display",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdLoaded",
                "description": "Triggered each time an ad is successfully loaded. But you don't have to display the ad right after it's loaded. For example, set a flag to true and then at a transition point, if flag=true, then display the ad.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "LoadAd",
                "description": "Loads a new ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowInterstitialAd",
                "description": "It will show the Interstitial Ad",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.AdMobInterstitial",
        "name": "AdMobInterstitial",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "An interstitial ad is a full-page ad. AdMobInterstitial component allows you to monetize your app. You must have a valid AdMob account and AdUnitId that can be obtained from http:\/\/www.google.com\/AdMob . If your id is invalid, the AdMobInterstitial will not display on the emulator or the device. Warning: Make sure you're in test mode during development to avoid being disabled for clicking your own ads. ",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/admob-interstitial\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/admob.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AdEnabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AdUnitID",
                "editorType": "string",
                "defaultValue": "ca-app-pub-3940256099942544/1033173712",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CommissionInterstitialAdsNetwork",
                "editorType": "commission_interstitial_ads_network",
                "defaultValue": "unity",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ConsentDevelopmentMode",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ConsentMessage",
                "editorType": "string",
                "defaultValue": "Can we continue to use your data to tailor ads for you?",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ConsentTitle",
                "editorType": "string",
                "defaultValue": "Data Protection",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TargetAge",
                "editorType": "non_negative_integer",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TargetForChildren",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TargetGender",
                "editorType": "gender_options",
                "defaultValue": "ALL",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TestMode",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AdEnabled",
                "description": "This property must be set to true to receive ads.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AdUnitID",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "CommissionInterstitialAdsNetwork",
                "description": "Sets the ad network used to take the commission.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ConsentDevelopmentMode",
                "description": "If enabled you will see the consent dialog no matter if you are located in Europe or not. Please use this option only in development.  If this setting is enabled ALL taken consents will not be saved.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ConsentMessage",
                "description": "The message for the consent dialog.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ConsentTitle",
                "description": "The title for the consent dialog.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PersonalizedResult",
                "description": "Returns the current personalized consent. If true user has consent to personalized ads.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "TargetAge",
                "description": "Leave 0 for targeting ALL ages",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TargetForChildren",
                "description": "Indicate whether you want Google to treat your content as child-directed when you make an ad request. Info here: https:\/\/developers.google.com\/mobile-ads-sdk\/docs\/admob\/android\/targeting#child-directed_setting",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TargetGender",
                "description": "",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "TestMode",
                "description": "If you want to test the component then that this property to true. Then you will receive test ads.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdClosed",
                "description": "Called when an ad was closed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdFailedToLoad",
                "description": "Called when an ad request failed to load. The message will display the error code and error message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorCode",
                        "type": "number"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdFailedToShow",
                "description": "Called when an an attempt was made to display the ad, but the ad was not ready to display.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdLeftApplication",
                "description": "Called when an ad leaves the application (e.g., to go to the browser).",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdLoaded",
                "description": "Called when an ad request was loaded.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdOpened",
                "description": "Called when an ad was opened.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnConsentChanged",
                "description": "Event triggered when the consent was changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "personalized",
                        "type": "boolean"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "LoadAd",
                "description": "Load a new AdMob Interstitial ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RevokeConsent",
                "description": "Deletes the user's consent. Useful if you want to test the consent dialog in development.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowInterstitialAd",
                "description": "It will show the Interstitial Ad",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.AdmobBanner",
        "name": "AdmobBanner",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "AdMob Banner component",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/admob.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AdEnabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AdUnitId",
                "editorType": "string",
                "defaultValue": "ca-app-pub-3940256099942544/6300978111",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ConsentDevelopmentMode",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ConsentMessage",
                "editorType": "string",
                "defaultValue": "Can we continue to use your data to tailor ads for you?",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ConsentTitle",
                "editorType": "string",
                "defaultValue": "Data Protection",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TestMode",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AdEnabled",
                "description": "This property must be set to true to receive ads.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AdUnitId",
                "description": "Set Ad Unit ID",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ConsentDevelopmentMode",
                "description": "If enabled you will see the consent dialog no matter if you are located in Europe or not. Please use this option only in development.  If this setting is enabled ALL taken consents will not be saved.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ConsentMessage",
                "description": "The message for the consent dialog.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ConsentTitle",
                "description": "The title for the consent dialog.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PersonalizedResult",
                "description": "Returns the current personalized consent. If true user has consent to personalized ads.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TestMode",
                "description": "If you want to test the component then that this property to true. Then you will receive test ads.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdClosed",
                "description": "Called when an ad was closed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdFailedToLoad",
                "description": "Called when an ad request failed to load. The message will display the error code and error message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorCode",
                        "type": "number"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdLoaded",
                "description": "Called when an ad request was loaded.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdOpened",
                "description": "Called when an ad was opened.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnConsentChanged",
                "description": "Event triggered when the consent was changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "personalized",
                        "type": "boolean"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "LoadAd",
                "description": "Load a new AdMob Banner ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RevokeConsent",
                "description": "Deletes the user's consent. Useful if you want to test the consent dialog in development.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.AdmobRewardedVideo",
        "name": "AdmobRewardedVideo",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "add description in OdeMessage ",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/admob.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AdEnabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AdUnitId",
                "editorType": "string",
                "defaultValue": "ca-app-pub-3940256099942544/5224354917",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ConsentDevelopmentMode",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ConsentMessage",
                "editorType": "string",
                "defaultValue": "Can we continue to use your data to tailor ads for you?",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ConsentTitle",
                "editorType": "string",
                "defaultValue": "Data Protection",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TestMode",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AdEnabled",
                "description": "This property must be set to true to receive ads.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AdUnitId",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ConsentDevelopmentMode",
                "description": "If enabled you will see the consent dialog no matter if you are located in Europe or not. Please use this option only in development.  If this setting is enabled ALL taken consents will not be saved.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ConsentMessage",
                "description": "The message for the consent dialog.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ConsentTitle",
                "description": "The title for the consent dialog.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PersonalizedResult",
                "description": "Returns the current personalized consent. If true user has consent to personalized ads.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "TestMode",
                "description": "If you want to test the component, that this property to true. After it you will receive test ads.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdClosed",
                "description": "Called when an ad was closed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdFailedToLoad",
                "description": "Called when an ad request failed to load. The message will display the error code and error message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorCode",
                        "type": "number"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdLeftApplication",
                "description": "Called when an ad leaves the application (e.g., to go to the browser).",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdLoaded",
                "description": "Called when an ad request was loaded.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdOpened",
                "description": "Called when an ad was opened.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdVideoCompleted",
                "description": "Called when an video ad was completed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdVideoStarted",
                "description": "Called when an video ad started to show content.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnConsentChanged",
                "description": "Event triggered when the consent was changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "personalized",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "Rewarded",
                "description": "User watched video and should be rewarded.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "type",
                        "type": "text"
                    },
                    {
                        "name": "amount",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "LoadAd",
                "description": "Load a new AdMob Rewarded Video ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RevokeConsent",
                "description": "Deletes the user's consent. Useful if you want to test the consent dialog in development.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowAd",
                "description": "It will show the Video",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Audio",
        "name": "Audio",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "Component for Audio",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/audio.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ShowUI",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "GetAudioMode",
                "description": "Returns the current audio mode as string. Possible returns are \"NORMAL\", \"RINGTONE\", \"CALL\" or \"COMMUNICATION\".",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ShowUI",
                "description": "If set to true you will see system ui.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "VolumeAlarm",
                "description": "Returns the current volume index in percent.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "VolumeMusic",
                "description": "Returns the current volume index in percent.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "VolumeRing",
                "description": "Returns the current volume index in percent.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "ErrorOccurred",
                "description": "Event triggered when a error occurred.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "IsSoundEffectsEnabled",
                "description": "Returns true whether a component should have sound effects enabled for events such as clicking and touching.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "RingerModeNormal",
                "description": "Sets the ringer mode to \"normal\".",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RingerModeSilent",
                "description": "Sets the ringer mode to \"silent\".",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RingerModeVibrate",
                "description": "Sets the ringer mode to \"vibrate\".",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SoundEffectsEnabled",
                "description": "Set whether a component should have sound effects enabled for events such as clicking and touching.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "enabled",
                        "type": "boolean"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.AudioPicker",
        "name": "AudioPicker",
        "external": "false",
        "version": "6",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "A special-purpose button. When the user taps an audio picker, the device's audio gallery appears, and the user can choose an audio file.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BorderShadow",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HTMLFormat",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Shape",
                "editorType": "button_shape",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowFeedback",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TouchColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Returns the button's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BorderShadow",
                "description": "Returns true if the button have a outside border shadow on click.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If set, user can tap check box to cause action.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "If set, button text is displayed in bold.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "If set, button text is displayed in italics.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "Point size for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "Font family for button text.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HTMLFormat",
                "description": "If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Image to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Selection",
                "description": "Path to the file containing the audio file that was selected.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Shape",
                "description": "Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ShowFeedback",
                "description": "Specifies if a visual feedback should be shown for a button that as an image as background.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Text to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Left, center, or right.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Color for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TouchColor",
                "description": "Set the buttons touch color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterPicking",
                "description": "Event to be raised after the picker activity returns its\n result and the properties have been filled in.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "selection",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "BeforePicking",
                "description": "Event to raise when the button of the component is clicked or the list is shown\n using the Open block.  This event occurs before the list of items is displayed, and\n can be used to prepare the list before it is shown.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GotFocus",
                "description": "Indicates the cursor moved over the button so it is now possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Indicates the cursor moved away from the button so it is now no longer possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchDown",
                "description": "Indicates that the button was pressed down.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchUp",
                "description": "Indicates that a button has been released.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ButtonClick",
                "description": "Perform a button click as function.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Open",
                "description": "Opens the picker, as though the user clicked on it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromFontAwesome",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/fontawesome.com\/cheatsheet Use as example for a heart icon just 'f004'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromMaterialFont",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/material.io\/icons",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromPicture",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "picture",
                        "type": "text"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Ball",
        "name": "Ball",
        "external": "false",
        "version": "6",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ANIMATION",
        "helpString": "<p>A round 'sprite' that can be placed on a <code>Canvas<\/code>, where it can react to touches and drags, interact with other sprites (<code>ImageSprite<\/code>s and other <code>Ball<\/code>s) and the edge of the Canvas, and move according to its property values.<\/p><p>For example, to have a <code>Ball<\/code> move 4 pixels toward the top of a <code>Canvas<\/code> every 500 milliseconds (half second), you would set the <code>Speed<\/code> property to 4 [pixels], the <code>Interval<\/code> property to 500 [milliseconds], the <code>Heading<\/code> property to 90 [degrees], and the <code>Enabled<\/code> property to <code>True<\/code>.<\/p><p>The difference between a <code>Ball<\/code> and an <code>ImageSprite<\/code> is that the latter can get its appearance from an image file, while a <code>Ball<\/code>'s appearance can be changed only by varying its <code>PaintColor<\/code> and <code>Radius<\/code> properties.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Heading",
                "editorType": "float",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Interval",
                "editorType": "non_negative_integer",
                "defaultValue": "100",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "OriginAtCenter",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PaintColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Radius",
                "editorType": "non_negative_integer",
                "defaultValue": "5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Speed",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "X",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Y",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Z",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Enabled",
                "description": "Controls whether the Ball moves and can be interacted with through collisions, dragging, touching, and flinging.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Heading",
                "description": "Sets heading in which sprite should move.  In addition to changing the\n local variables",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Interval",
                "description": "The interval in milliseconds at which the Ball's position is updated.  For example, if the interval is 50 and the speed is 10, then every 50 milliseconds the sprite will move 10 pixels in the heading direction.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "OriginAtCenter",
                "description": "Whether the x- and y-coordinates should represent the center of the Ball (<code>true<\/code>) or its left and top edges (<code>false<\/code>).",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "PaintColor",
                "description": "The color of the Ball.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Radius",
                "description": "The distance from the edge of the Ball to its center.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Speed",
                "description": "The number of pixels that the Ball should move every interval, if enabled.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Whether the Ball is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "X",
                "description": "The horizontal coordinate of the Ball, increasing as the Ball moves right. If the property OriginAtCenter is true, the coodinate is for the center of the Ball; otherwise, it is for the leftmost point of the Ball.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Y",
                "description": "The vertical coordinate of the Ball, increasing as the Ball moves down. If the property OriginAtCenter is true, the coodinate is for the center of the Ball; otherwise, it is for the uppermost point of the Ball.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Z",
                "description": "Sets the layer of the sprite, indicating whether it will appear in\n front of or behind other sprites.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "CollidedWith",
                "description": "Event handler called when two enabled sprites (Balls or ImageSprites)\n collide. Note that checking for collisions with a rotated ImageSprite currently\n checks against its unrotated position. Therefore, collision\n checking will be inaccurate for tall narrow or short wide sprites that are\n rotated.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "other",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "Dragged",
                "description": "Event handler called when a Ball is dragged. On all calls, the starting coordinates are where the screen was first touched, and the \"current\" coordinates describe the endpoint of the current line segment. On the first call within a given drag, the \"previous\" coordinates are the same as the starting coordinates; subsequently, they are the \"current\" coordinates from the prior call. Note that the Ball won't actually move anywhere in response to the Dragged event unless MoveTo is explicitly called. For smooth movement, each of its coordinates should be set to the sum of its initial value and the difference between its current and previous values.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "startX",
                        "type": "number"
                    },
                    {
                        "name": "startY",
                        "type": "number"
                    },
                    {
                        "name": "prevX",
                        "type": "number"
                    },
                    {
                        "name": "prevY",
                        "type": "number"
                    },
                    {
                        "name": "currentX",
                        "type": "number"
                    },
                    {
                        "name": "currentY",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "EdgeReached",
                "description": "Event handler called when the Ball reaches an edge of the screen. If Bounce is then called with that edge, the Ball will appear to bounce off of the edge it reached. Edge here is represented as an integer that indicates one of eight directions north (1), northeast (2), east (3), southeast (4), south (-1), southwest (-2), west (-3), and northwest (-4).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "edge",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Flung",
                "description": "Event handler called when a fling gesture (quick swipe) is made on an enabled Ball. This provides the x and y coordinates of the start of the fling (relative to the upper left of the canvas), the speed (pixels per millisecond), the heading (0-360 degrees), and the x and y velocity components of the fling's vector.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "speed",
                        "type": "number"
                    },
                    {
                        "name": "heading",
                        "type": "number"
                    },
                    {
                        "name": "xvel",
                        "type": "number"
                    },
                    {
                        "name": "yvel",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "NoLongerCollidingWith",
                "description": "Event handler called when a pair of sprites (Balls and ImageSprites) are no longer colliding.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "other",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "TouchDown",
                "description": "Event handler called when the user begins touching an enabled Ball (placing their finger on a Ball and leaving it there). This provides the x and y coordinates of the touch, relative to the upper left of the canvas.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "TouchUp",
                "description": "Event handler called when the user stops touching an enabled Ball (lifting their finger after a TouchDown event). This provides the x and y coordinates of the touch, relative to the upper left of the canvas.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Touched",
                "description": "Event handler called when the user touches an enabled Ball and then immediately lifts their finger. The provided x and y coordinates are relative to the upper left of the canvas.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Bounce",
                "description": "Makes the Ball bounce, as if off a wall. For normal bouncing, the edge argument should be the one returned by EdgeReached.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "edge",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "CollidingWith",
                "description": "Indicates whether a collision has been registered between this Ball and the passed sprite (Ball or ImageSprite).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "other",
                        "type": "component"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "MoveIntoBounds",
                "description": "Moves the Ball back in bounds if part of it extends out of bounds, having no effect otherwise. If the Ball is too wide to fit on the canvas, this aligns the left side of the Ball with the left side of the canvas. If the Ball is too tall to fit on the canvas, this aligns the top side of the Ball with the top side of the canvas.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "MoveTo",
                "description": "Sets the x and y coordinates of the Ball. If CenterAtOrigin is true, the center of the Ball will be placed here. Otherwise, the top left edge of the Ball will be placed at the specified coordinates.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "PointInDirection",
                "description": "Sets the heading of the Ball toward the point with the coordinates (x, y).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "PointTowards",
                "description": "Turns the Ball to point towards a designated target sprite (Ball or ImageSprite). The new heading will be parallel to the line joining the centerpoints of the two sprites.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "target",
                        "type": "component"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.BarcodeScanner",
        "name": "BarcodeScanner",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "Component for using the Barcode Scanner to read a barcode",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/barcodeScanner.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "UseExternalScanner",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Result",
                "description": "Text result of the previous scan.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "UseExternalScanner",
                "description": "If true App Inventor will look for and use an external scanning program such as \"Bar Code Scanner.\"",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterScan",
                "description": "Indicates that the scanner has read a (text) result and provides the result",
                "deprecated": "false",
                "params": [
                    {
                        "name": "result",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "DoScan",
                "description": "Begins a barcode scan, using the camera. When the scan is complete, the AfterScan event will be raised.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.BatteryManager",
        "name": "BatteryManager",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "Battery Manager",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/batterymanager.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "StartMonitoring",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BatteryHealth",
                "description": "Returns battery health. It can be: COLD, DEAD, GOOD, OVERHEAT, OVER_VOLTAGE, UNKNOWN",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "BatteryLevel",
                "description": "Returns battery percentage level",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "BatteryPlugged",
                "description": "Indicating whether the device is plugged in to a power source. Can be USB, AC or UNKNOWN",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "BatteryPresent",
                "description": "Indicating whether a battery is present",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "BatteryTemperature",
                "description": "Indicating battery temperature in Centigrade",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "BatteryVoltage",
                "description": "Indicating battery voltage in Volts",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "StartMonitoring",
                "description": "Starts or stops monitoring battery data. StartMonitoring only when you need to get information.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "GetBatteryInfo",
                "description": "Returns a list showing battery info for the specified key. Key can be: HEALTH, LEVEL, PLUGGED, PRESENT, STATUS, CHARGE_STATUS, TECHNOLOGY, TEMPERATURE, VOLTAGE. If key is empty, then all battery info is returned.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "key",
                        "type": "text"
                    }
                ],
                "returnType": "list"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Billing",
        "name": "Billing",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MONETIZATION_GENERAL",
        "helpString": "In-App Purchases component by Pavitra.",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/in-app-billing\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/billing.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "SuppressToast",
                "editorType": "boolean",
                "defaultValue": "true",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TestMode",
                "editorType": "boolean",
                "defaultValue": "false",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "IsIabServiceAvailable",
                "description": "Check Play Market services availability.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "IsOneTimePurchaseSupported",
                "description": "Is one time purchase supported.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "IsSubscriptionUpdateSupported",
                "description": "Is subscription update supported.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ReadyToPurchase",
                "description": "Whether In-app billing service is ready to purchase.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "SuppressToast",
                "description": "Do not use this block anymore. This block is deprecated and does nothing and will be removed in the future!",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "true"
            },
            {
                "name": "TestMode",
                "description": "Whether it is testing mode enabled or not.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterPurchase",
                "description": "After purchase event.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "productId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ErrorOccurred",
                "description": "Error occurred event.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GotOwnedPurchases",
                "description": "Got Owned Purchases",
                "deprecated": "false",
                "params": [
                    {
                        "name": "ownedProducts",
                        "type": "list"
                    },
                    {
                        "name": "ownedSubscriptions",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "GotProductDetails",
                "description": "Got Product Details",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    },
                    {
                        "name": "productId",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "description",
                        "type": "text"
                    },
                    {
                        "name": "currency",
                        "type": "text"
                    },
                    {
                        "name": "price",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GotSubscriptionDetails",
                "description": "Got Subscription Details",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    },
                    {
                        "name": "isSubscription",
                        "type": "boolean"
                    },
                    {
                        "name": "subscriptionId",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "description",
                        "type": "text"
                    },
                    {
                        "name": "currency",
                        "type": "text"
                    },
                    {
                        "name": "price",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Consume",
                "description": "Do not use this block anymore. This block is deprecated and does nothing and will be removed in the future!",
                "deprecated": "true",
                "params": [
                    {
                        "name": "productId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Initialize",
                "description": "Do not use this block anymore. This block is deprecated and does nothing and will be removed in the future!",
                "deprecated": "true",
                "params": [
                    {
                        "name": "licenseKey",
                        "type": "text"
                    },
                    {
                        "name": "merchantId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "IsPurchased",
                "description": "Returns true if the product with the specific id is purchased.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "productId",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "IsSubscribed",
                "description": "Returns true if the product is subscribed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "subscriptionId",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "LoadOwnedPurchases",
                "description": "Load Owned Purchases from Google.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ProductDetails",
                "description": "Get product details from the specific product id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "productId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Purchase",
                "description": "Purchase a product with the given product id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "productId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Subscribe",
                "description": "Subscribe a product with the given product id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "subscriptionId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SubscriptionDetails",
                "description": "Get subscription details from the given id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "subscriptionId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UpdateSubscription",
                "description": "Do not use this block anymore. This block is deprecated and does nothing and will be removed in the future!",
                "deprecated": "true",
                "params": [
                    {
                        "name": "subscriptionId",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.BluetoothAdmin",
        "name": "BluetoothAdmin",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "CONNECTIVITY",
        "helpString": "BluetoothAdmin component to control the Bluetooth.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/bluetoothAdmin.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "UseCodes",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "UseCodes",
                "description": "Use codes instead of strings in returns for ScanMode and State.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterPairing",
                "description": "Event triggers when Pairing has finished.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "address",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AfterScanning",
                "description": "Event triggers when Scanning has finished.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "pairedDevices",
                        "type": "any"
                    },
                    {
                        "name": "newDevices",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "AfterUnpairing",
                "description": "Event triggers when Unpairing has finished.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "address",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ErrorOccurred",
                "description": "Event triggers when an error occurred.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "StateChanged",
                "description": "Event triggers when the bluetooth state changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "state",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Disable",
                "description": "Disable Bluetooth",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Enable",
                "description": "Enable Bluetooth",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "HasBluetooth",
                "description": "Returns if the device has Bluetooth",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "MacAddress",
                "description": "Returns the Bluetooth MacAddress.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Pair",
                "description": "Pair Bluetooth device.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "address",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Scan",
                "description": "Scan Bluetooth devices. Caution: Performing device discovery is a heavy procedure for the Bluetooth adapter and will consume a lot of its resources. If you already hold a connection with a device, then performing discovery can significantly reduce the bandwidth available for the connection, so you should not perform discovery while connected.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ScanMode",
                "description": "Returns the scan mode of the Bluetooth Adapter",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "State",
                "description": "Returns the state of the Bluetooth Adapter.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Toggle",
                "description": "Toggle Bluetooth",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Unpair",
                "description": "Unpair Bluetooth device.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "address",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ValidateMacAddress",
                "description": "Returns true if the MacAddress is valid.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "macAddress",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "ValidateUserMacAddress",
                "description": "Returns true if the User MacAddress is valid.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.BluetoothClient",
        "name": "BluetoothClient",
        "external": "false",
        "version": "6",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "CONNECTIVITY",
        "helpString": "Bluetooth client component",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/bluetoothClient.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "CharacterEncoding",
                "editorType": "string",
                "defaultValue": "UTF-8",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DelimiterByte",
                "editorType": "non_negative_integer",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HighByteFirst",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Secure",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AddressesAndNames",
                "description": "The addresses and names of paired Bluetooth devices",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Available",
                "description": "Whether Bluetooth is available on the device",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "CharacterEncoding",
                "description": "Sets the character encoding to use when sending and receiving text.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DelimiterByte",
                "description": "Sets the delimiter byte to use when passing a negative number for the\n numberOfBytes parameter when calling ReceiveText, ReceiveSignedBytes, or\n ReceiveUnsignedBytes.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "Whether Bluetooth is enabled",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "HighByteFirst",
                "description": "Returns true if numbers are sent and received with the most significant\n byte first.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "IsConnected",
                "description": "Returns true if a connection to a Bluetooth device has been made.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Secure",
                "description": "Whether to invoke SSP (Simple Secure Pairing), which is supported on devices with Bluetooth v2.1 or higher. When working with embedded Bluetooth devices, this property may need to be set to False. For Android 2.0-2.2, this property setting will be ignored.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "BluetoothError",
                "description": "The BluetoothError event is no longer used. Please use the Screen.ErrorOccurred event instead.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "functionName",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "BytesAvailableToReceive",
                "description": "Returns an estimate of the number of bytes that can be received without blocking",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "Connect",
                "description": "Connect to the Bluetooth device with the specified address and the Serial Port Profile (SPP). Returns true if the connection was successful.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "address",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "ConnectWithUUID",
                "description": "Connect to the Bluetooth device with the specified address and UUID. Returns true if the connection was successful.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "address",
                        "type": "text"
                    },
                    {
                        "name": "uuid",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "Disconnect",
                "description": "Disconnect from the connected Bluetooth device.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "IsDevicePaired",
                "description": "Checks whether the Bluetooth device with the specified address is paired.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "address",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "ReceiveSigned1ByteNumber",
                "description": "Receive a signed 1-byte number from the connected Bluetooth device.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ReceiveSigned2ByteNumber",
                "description": "Receive a signed 2-byte number from the connected Bluetooth device.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ReceiveSigned4ByteNumber",
                "description": "Receive a signed 4-byte number from the connected Bluetooth device.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ReceiveSignedBytes",
                "description": "Receive multiple signed byte values from the connected Bluetooth device. If numberOfBytes is less than 0, read until a delimiter byte value is received.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "numberOfBytes",
                        "type": "number"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "ReceiveText",
                "description": "Receive text from the connected Bluetooth device. If numberOfBytes is less than 0, read until a delimiter byte value is received.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "numberOfBytes",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "ReceiveUnsigned1ByteNumber",
                "description": "Receive an unsigned 1-byte number from the connected Bluetooth device.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ReceiveUnsigned2ByteNumber",
                "description": "Receive a unsigned 2-byte number from the connected Bluetooth device.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ReceiveUnsigned4ByteNumber",
                "description": "Receive a unsigned 4-byte number from the connected Bluetooth device.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ReceiveUnsignedBytes",
                "description": "Receive multiple unsigned byte values from the connected Bluetooth device. If numberOfBytes is less than 0, read until a delimiter byte value is received.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "numberOfBytes",
                        "type": "number"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "RemoveNameFromAddress",
                "description": "Remove the Name from a Bluetooth Address and Name String.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "addressAndName",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "Send1ByteNumber",
                "description": "Send a 1-byte number to the connected Bluetooth device.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "number",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Send2ByteNumber",
                "description": "Send a 2-byte number to the connected Bluetooth device.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "number",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Send4ByteNumber",
                "description": "Send a 4-byte number to the connected Bluetooth device.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "number",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SendBytes",
                "description": "Send a list of byte values to the connected Bluetooth device.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "list",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "SendText",
                "description": "Send text to the connected Bluetooth device.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.BluetoothServer",
        "name": "BluetoothServer",
        "external": "false",
        "version": "5",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "CONNECTIVITY",
        "helpString": "Bluetooth server component",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/bluetoothServer.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "CharacterEncoding",
                "editorType": "string",
                "defaultValue": "UTF-8",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DelimiterByte",
                "editorType": "non_negative_integer",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HighByteFirst",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Secure",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Available",
                "description": "Whether Bluetooth is available on the device",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "CharacterEncoding",
                "description": "Sets the character encoding to use when sending and receiving text.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DelimiterByte",
                "description": "Sets the delimiter byte to use when passing a negative number for the\n numberOfBytes parameter when calling ReceiveText, ReceiveSignedBytes, or\n ReceiveUnsignedBytes.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "Whether Bluetooth is enabled",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "HighByteFirst",
                "description": "Returns true if numbers are sent and received with the most significant\n byte first.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "IsAccepting",
                "description": "Returns true if this BluetoothServer component is accepting an\n incoming connection.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "IsConnected",
                "description": "Returns true if a connection to a Bluetooth device has been made.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Secure",
                "description": "Whether to invoke SSP (Simple Secure Pairing), which is supported on devices with Bluetooth v2.1 or higher. When working with embedded Bluetooth devices, this property may need to be set to False. For Android 2.0-2.2, this property setting will be ignored.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "BluetoothError",
                "description": "The BluetoothError event is no longer used. Please use the Screen.ErrorOccurred event instead.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "functionName",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ConnectionAccepted",
                "description": "Indicates that a bluetooth connection has been accepted.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AcceptConnection",
                "description": "Accept an incoming connection with the Serial Port Profile (SPP).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "serviceName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AcceptConnectionWithUUID",
                "description": "Accept an incoming connection with a specific UUID.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "serviceName",
                        "type": "text"
                    },
                    {
                        "name": "uuid",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "BytesAvailableToReceive",
                "description": "Returns an estimate of the number of bytes that can be received without blocking",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "Disconnect",
                "description": "Disconnect from the connected Bluetooth device.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ReceiveSigned1ByteNumber",
                "description": "Receive a signed 1-byte number from the connected Bluetooth device.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ReceiveSigned2ByteNumber",
                "description": "Receive a signed 2-byte number from the connected Bluetooth device.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ReceiveSigned4ByteNumber",
                "description": "Receive a signed 4-byte number from the connected Bluetooth device.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ReceiveSignedBytes",
                "description": "Receive multiple signed byte values from the connected Bluetooth device. If numberOfBytes is less than 0, read until a delimiter byte value is received.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "numberOfBytes",
                        "type": "number"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "ReceiveText",
                "description": "Receive text from the connected Bluetooth device. If numberOfBytes is less than 0, read until a delimiter byte value is received.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "numberOfBytes",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "ReceiveUnsigned1ByteNumber",
                "description": "Receive an unsigned 1-byte number from the connected Bluetooth device.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ReceiveUnsigned2ByteNumber",
                "description": "Receive a unsigned 2-byte number from the connected Bluetooth device.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ReceiveUnsigned4ByteNumber",
                "description": "Receive a unsigned 4-byte number from the connected Bluetooth device.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ReceiveUnsignedBytes",
                "description": "Receive multiple unsigned byte values from the connected Bluetooth device. If numberOfBytes is less than 0, read until a delimiter byte value is received.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "numberOfBytes",
                        "type": "number"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "Send1ByteNumber",
                "description": "Send a 1-byte number to the connected Bluetooth device.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "number",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Send2ByteNumber",
                "description": "Send a 2-byte number to the connected Bluetooth device.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "number",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Send4ByteNumber",
                "description": "Send a 4-byte number to the connected Bluetooth device.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "number",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SendBytes",
                "description": "Send a list of byte values to the connected Bluetooth device.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "list",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "SendText",
                "description": "Send text to the connected Bluetooth device.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "StopAccepting",
                "description": "Stop accepting an incoming connection.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Button",
        "name": "Button",
        "external": "false",
        "version": "12",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "Button with the ability to detect clicks.  Many aspects of its appearance can be changed, as well as whether it is clickable (<code>Enabled<\/code>), can be changed in the Designer or in the Blocks Editor.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BorderShadow",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HTMLFormat",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Shape",
                "editorType": "button_shape",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowFeedback",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TouchColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Returns the button's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BorderShadow",
                "description": "Returns true if the button have a outside border shadow on click.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If set, user can tap check box to cause action.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "If set, button text is displayed in bold.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "If set, button text is displayed in italics.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "Point size for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "Font family for button text.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HTMLFormat",
                "description": "If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Image to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Shape",
                "description": "Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ShowFeedback",
                "description": "Specifies if a visual feedback should be shown for a button that as an image as background.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Text to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Left, center, or right.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Color for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TouchColor",
                "description": "Set the buttons touch color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "User tapped and released the button.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GotFocus",
                "description": "Indicates the cursor moved over the button so it is now possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "User held the button down.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Indicates the cursor moved away from the button so it is now no longer possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchDown",
                "description": "Indicates that the button was pressed down.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchUp",
                "description": "Indicates that a button has been released.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ButtonClick",
                "description": "Perform a button click as function.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromFontAwesome",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/fontawesome.com\/cheatsheet Use as example for a heart icon just 'f004'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromMaterialFont",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/material.io\/icons",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromPicture",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "picture",
                        "type": "text"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Camcorder",
        "name": "Camcorder",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "A component to record a video using the device's camcorder.After the video is recorded, the name of the file on the phone containing the clip is available as an argument to the AfterRecording event. The file name can be used, for example, to set the source property of a VideoPlayer component.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/camcorder.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [
            {
                "name": "AfterRecording",
                "description": "Indicates that a video was recorded with the camera and provides the path to\n the stored picture.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "clip",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "RecordVideo",
                "description": "Records a video, then raises the AfterRecoding event.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Camera",
        "name": "Camera",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "A component to take a picture using the device's camera. After the picture is taken, the name of the file on the phone containing the picture is available as an argument to the AfterPicture event. The file name can be used, for example, to set the Picture property of an Image component.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/camera.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [
            {
                "name": "UseFront",
                "description": "Specifies whether the front-facing camera should be used (when available). If the device does not have a front-facing camera, this option will be ignored and the camera will open normally.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "true"
            }
        ],
        "events": [
            {
                "name": "AfterPicture",
                "description": "Returns the taken picture.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "image",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "HasFlash",
                "description": "Returns true if your device has a flash.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "TakePicture",
                "description": "Take a picture with the camera of your device.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ToggleLight",
                "description": "Toggle the flash of your device to on or off.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Canvas",
        "name": "Canvas",
        "external": "false",
        "version": "14",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ANIMATION",
        "helpString": "<p>A two-dimensional touch-sensitive rectangular panel on which drawing can be done and sprites can be moved.<\/p> <p>The <code>BackgroundColor<\/code>, <code>PaintColor<\/code>, <code>BackgroundImage<\/code>, <code>Width<\/code>, and <code>Height<\/code> of the Canvas can be set in either the Designer or in the Blocks Editor.  The <code>Width<\/code> and <code>Height<\/code> are measured in pixels and must be positive.<\/p><p>Any location on the Canvas can be specified as a pair of (X, Y) values, where <ul> <li>X is the number of pixels away from the left edge of the Canvas<\/li><li>Y is the number of pixels away from the top edge of the Canvas<\/li><\/ul>.<\/p> <p>There are events to tell when and where a Canvas has been touched or a <code>Sprite<\/code> (<code>ImageSprite<\/code> or <code>Ball<\/code>) has been dragged.  There are also methods for drawing points, lines, and circles.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BackgroundImage",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ExtendMovesOutsideCanvas",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "LineWidth",
                "editorType": "non_negative_float",
                "defaultValue": "2.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PaintColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "The color of the canvas background.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BackgroundImage",
                "description": "The name of a file containing the background image for the canvas",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ExtendMovesOutsideCanvas",
                "description": "Determines whether moves can extend beyond the canvas borders.   Default is false. This should normally be false, and the property is provided for backwards compatibility.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "The font size of text drawn on the canvas.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Set the canvas height\n\n The height can only be set to >0 or -1 (automatic) or -2 (fill parent) or\n to a value less then or equal to LENGTH_PERCENT_TAG (which is later\n converted to pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "LineWidth",
                "description": "The width of lines drawn on the canvas.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PaintColor",
                "description": "The color in which lines are drawn",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Determines the alignment of the text drawn by DrawText() or DrawAngle() with respect to the point specified by that command: point at the left of the text, point at the center of the text, or point at the right of the text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Set the canvas width\n\n The width can only be set to >0 or -1 (automatic) or -2 (fill parent)\n or to a value less then or equal to LENGTH_PERCENT_TAG (which is later\n converted to pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Dragged",
                "description": "When the user does a drag from one point (prevX, prevY) to\n another (x, y).  The pair (startX, startY) indicates where the\n user first touched the screen, and \"draggedAnySprite\" indicates whether a\n sprite is being dragged.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "startX",
                        "type": "number"
                    },
                    {
                        "name": "startY",
                        "type": "number"
                    },
                    {
                        "name": "prevX",
                        "type": "number"
                    },
                    {
                        "name": "prevY",
                        "type": "number"
                    },
                    {
                        "name": "currentX",
                        "type": "number"
                    },
                    {
                        "name": "currentY",
                        "type": "number"
                    },
                    {
                        "name": "draggedAnySprite",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "Flung",
                "description": "When a fling gesture (quick swipe) is made on the canvas: provides\n the (x,y) position of the start of the fling, relative to the upper\n left of the canvas. Also provides the speed (pixels per millisecond) and heading\n (0-360 degrees) of the fling, as well as the x velocity and y velocity\n components of the fling's vector. The value \"flungSprite\" is true if a sprite\n was located near the the starting point of the fling gesture.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "speed",
                        "type": "number"
                    },
                    {
                        "name": "heading",
                        "type": "number"
                    },
                    {
                        "name": "xvel",
                        "type": "number"
                    },
                    {
                        "name": "yvel",
                        "type": "number"
                    },
                    {
                        "name": "flungSprite",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "Scale",
                "description": "This event is invoked when two-finger pinches. ScaleFactor is the ratio of the average distance between two-fingers from current and previous scale event.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "scaleFactor",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "TouchDown",
                "description": "When the user begins touching the canvas (places finger on canvas and\n leaves it there): provides the (x,y) position of the touch, relative\n to the upper left of the canvas",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "TouchUp",
                "description": "When the user stops touching the canvas (lifts finger after a\n TouchDown event): provides the (x,y) position of the touch, relative\n to the upper left of the canvas",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Touched",
                "description": "When the user touches the canvas and then immediately lifts finger: provides\n the (x,y) position of the touch, relative to the upper left of the canvas.  TouchedAnySprite\n is true if the same touch also touched a sprite, and false otherwise.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "touchedAnySprite",
                        "type": "boolean"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Clear",
                "description": "Clears anything drawn on this Canvas but not any background color or image.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "DrawArc",
                "description": "Draw an arc on Canvas, by drawing an arc from a specified oval (specified by left, top, right & bottom). Start angle is 0 when heading to the right, and increase when rotate clockwise. When useCenter is true, a sector will be drawed instead of an arc. When fill is true, a filled arc (or sector) will be drawed instead of just an outline.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "left",
                        "type": "number"
                    },
                    {
                        "name": "top",
                        "type": "number"
                    },
                    {
                        "name": "right",
                        "type": "number"
                    },
                    {
                        "name": "bottom",
                        "type": "number"
                    },
                    {
                        "name": "startAngle",
                        "type": "number"
                    },
                    {
                        "name": "sweepAngle",
                        "type": "number"
                    },
                    {
                        "name": "useCenter",
                        "type": "boolean"
                    },
                    {
                        "name": "fill",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "DrawCircle",
                "description": "Draws a circle (filled in) with the given radius centered at the given coordinates on the canvas",
                "deprecated": "false",
                "params": [
                    {
                        "name": "centerX",
                        "type": "number"
                    },
                    {
                        "name": "centerY",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "fill",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "DrawLine",
                "description": "Draws a line between the given coordinates on the canvas.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x1",
                        "type": "number"
                    },
                    {
                        "name": "y1",
                        "type": "number"
                    },
                    {
                        "name": "x2",
                        "type": "number"
                    },
                    {
                        "name": "y2",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "DrawPoint",
                "description": "Draws a point at the given coordinates on the canvas.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "DrawPolygon",
                "description": "Creates a polygon with with specified number of sides from a radius.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "centerX",
                        "type": "number"
                    },
                    {
                        "name": "centerY",
                        "type": "number"
                    },
                    {
                        "name": "numSides",
                        "type": "number"
                    },
                    {
                        "name": "polyRadius",
                        "type": "number"
                    },
                    {
                        "name": "cornerRadius",
                        "type": "number"
                    },
                    {
                        "name": "rotation",
                        "type": "number"
                    },
                    {
                        "name": "fill",
                        "type": "boolean"
                    },
                    {
                        "name": "clearCanvas",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "DrawShape",
                "description": "Draws a shape on the canvas. pointList should be a list contains sub-lists with two number which represents a coordinate. The first point and last point does not need to be the same. e.g. ((x1 y1) (x2 y2) (x3 y3)) When fill is true, the shape will be filled.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "pointList",
                        "type": "list"
                    },
                    {
                        "name": "fill",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "DrawText",
                "description": "Draws the specified text relative to the specified coordinates using the values of the FontSize and TextAlignment properties.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "DrawTextAtAngle",
                "description": "Draws the specified text starting at the specified coordinates at the specified angle using the values of the FontSize and TextAlignment properties.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "angle",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GetBackgroundPixelColor",
                "description": "Gets the color of the specified point. This includes the background and any drawn points, lines, or circles but not sprites.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetPixelColor",
                "description": "Gets the color of the specified point.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "Save",
                "description": "Saves a picture of this Canvas to the device's external storage. If an error occurs, the Screen's ErrorOccurred event will be called.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "SaveAs",
                "description": "Saves a picture of this Canvas to the device's external storage in the file named fileName. fileName must end with one of .jpg, .jpeg, or .png, which determines the file type.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "fileName",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "SetBackgroundPixelColor",
                "description": "Sets the color of the specified point. This differs from DrawPoint by having an argument for color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.CheckBox",
        "name": "CheckBox",
        "external": "false",
        "version": "6",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "Checkbox that raises an event when the user clicks on it. There are many properties affecting its appearance that can be set in the Designer or Blocks Editor.",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/user-interface\/checkbox\/",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00FFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CheckboxColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Checked",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "textArea",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Returns the checkbox's background color as an alpha-red-green-blue\n integer.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CheckboxColor",
                "description": "Change the checkbox component color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Checked",
                "description": "Returns true if the checkbox is checked.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "Returns true if the checkbox is active and clickable.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "Returns true if the checkbox's text should be bold.\n If bold has been requested, this property will return true, even if the\n font does not support bold.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "Returns true if the checkbox's text should be italic.\n If italic has been requested, this property will return true, even if the\n font does not support italic.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "Returns the checkbox's text's font size, measured in sp(scale-independent pixels).",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "Returns the checkbox's text's font face as default, serif, sans\n serif, or monospace.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Returns the text displayed by the checkbox.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Returns the checkbox's text color as an alpha-red-green-blue\n integer.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Changed",
                "description": "Default Changed event handler.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Click",
                "description": "Indicates a user has clicked on the checkbox.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GotFocus",
                "description": "Default GotFocus event handler.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Default LostFocus event handler.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Circle",
        "name": "Circle",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MAPS",
        "helpString": "Circle",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Description",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Draggable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableInfobox",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FillColor",
                "editorType": "color",
                "defaultValue": "&HFFF34336",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FillOpacity",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Latitude",
                "editorType": "latitude",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Longitude",
                "editorType": "longitude",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Radius",
                "editorType": "non_negative_float",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeOpacity",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeWidth",
                "editorType": "integer",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Title",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Description",
                "description": "The description displayed in the info window that appears when the user clicks on the map feature.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Draggable",
                "description": "The Draggable property is used to set whether or not the user can drag the Marker by long-pressing and then dragging the marker to a new location.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableInfobox",
                "description": "Enable or disable the infobox window display when the user taps the feature.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FillColor",
                "description": "The paint color used to fill in the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FillOpacity",
                "description": "The opacity of the interior of the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Latitude",
                "description": "The latitude of the center of the circle.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Longitude",
                "description": "The longitude of the center of the circle.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Radius",
                "description": "The radius of the circle in meters.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeColor",
                "description": "The paint color used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeOpacity",
                "description": "The opacity of the stroke used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeWidth",
                "description": "The width of the stroke used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Title",
                "description": "The title displayed in the info window that appears when the user clicks on the map feature.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Type",
                "description": "",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "The user clicked on the feature.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Drag",
                "description": "The user dragged the map feature.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "The user long-pressed on the feature. This event will only trigger if Draggable is false.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StartDrag",
                "description": "The user started a drag operation.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StopDrag",
                "description": "The user stopped a drag operation.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "DistanceToFeature",
                "description": "Compute the distance, in meters, between two map features.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "mapFeature",
                        "type": "component"
                    },
                    {
                        "name": "centroids",
                        "type": "boolean"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "DistanceToPoint",
                "description": "Compute the distance, in meters, between a map feature and a latitude, longitude point.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    },
                    {
                        "name": "centroid",
                        "type": "boolean"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "HideInfobox",
                "description": "Hide the infobox if it is shown. If the infobox is not visible this function has no effect.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetLocation",
                "description": "Set the center of the Circle.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ShowInfobox",
                "description": "Show the infobox for the feature. This will show the infobox even if",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Clock",
        "name": "Clock",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "<p>Non-visible component that provides the instant in time using the internal clock on the phone. It can fire a timer at regularly set intervals and perform time calculations, manipulations, and conversions.<\/p> <p>Methods to convert an instant to text are also available. Acceptable patterns are empty string, MM\/DD\/YYYY HH:mm:ss a, or MMM d, yyyyHH:mm. The empty string will provide the default format, which is \"MMM d, yyyy HH:mm:ss a\" for FormatDateTime \"MMM d, yyyy\" for FormatDate. To see all possible format, please see <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/text\/SimpleDateFormat.html\" _target=\"_blank\">here<\/a>. <\/p> ",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/clock.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "TimerAlwaysFires",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TimerEnabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TimerInterval",
                "editorType": "non_negative_integer",
                "defaultValue": "1000",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "TimerAlwaysFires",
                "description": "Will fire even when application is not showing on the screen if true",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TimerEnabled",
                "description": "Fires timer if true",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TimerInterval",
                "description": "Interval between timer events in ms",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Timer",
                "description": "Timer has gone off.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AddDays",
                "description": "An instant in time some days after the argument",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    },
                    {
                        "name": "quantity",
                        "type": "number"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "AddDuration",
                "description": "An instant in time some duration after the argument",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    },
                    {
                        "name": "quantity",
                        "type": "number"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "AddHours",
                "description": "An instant in time some hours after the argument",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    },
                    {
                        "name": "quantity",
                        "type": "number"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "AddMinutes",
                "description": "An instant in time some minutes after the argument",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    },
                    {
                        "name": "quantity",
                        "type": "number"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "AddMonths",
                "description": "An instant in time some months after the argument",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    },
                    {
                        "name": "quantity",
                        "type": "number"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "AddSeconds",
                "description": "An instant in time some seconds after the argument",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    },
                    {
                        "name": "quantity",
                        "type": "number"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "AddWeeks",
                "description": "An instant in time some weeks after the argument",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    },
                    {
                        "name": "quantity",
                        "type": "number"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "AddYears",
                "description": "An instant in time some years after the argument",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    },
                    {
                        "name": "quantity",
                        "type": "number"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "DayOfMonth",
                "description": "The day of the month",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "Duration",
                "description": "Milliseconds elapsed between instants",
                "deprecated": "false",
                "params": [
                    {
                        "name": "start",
                        "type": "InstantInTime"
                    },
                    {
                        "name": "end",
                        "type": "InstantInTime"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "DurationToDays",
                "description": "convert duration to days",
                "deprecated": "false",
                "params": [
                    {
                        "name": "duration",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "DurationToHours",
                "description": "convert duration to hours",
                "deprecated": "false",
                "params": [
                    {
                        "name": "duration",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "DurationToMinutes",
                "description": "convert duration to minutes",
                "deprecated": "false",
                "params": [
                    {
                        "name": "duration",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "DurationToSeconds",
                "description": "convert duration to seconds",
                "deprecated": "false",
                "params": [
                    {
                        "name": "duration",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "DurationToWeeks",
                "description": "convert duration to weeks",
                "deprecated": "false",
                "params": [
                    {
                        "name": "duration",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "FormatDate",
                "description": "Text representing the date of an instant in the specified pattern",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    },
                    {
                        "name": "pattern",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "FormatDateTime",
                "description": "Text representing the date and time of an instant in the specified pattern",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    },
                    {
                        "name": "pattern",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "FormatTime",
                "description": "Text representing the time of an instant",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetMillis",
                "description": "The instant in time measured as milliseconds since 1970.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "Hour",
                "description": "The hour of the day",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "MakeDate",
                "description": "Allows the user to set the clock to be a date value.\nValid values for the month field are 1-12 and 1-31 for the day field.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "year",
                        "type": "number"
                    },
                    {
                        "name": "month",
                        "type": "number"
                    },
                    {
                        "name": "day",
                        "type": "number"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "MakeInstant",
                "description": "An instant in time specified by MM\/dd\/YYYY hh:mm:ss or MM\/dd\/YYYY or hh:mm",
                "deprecated": "false",
                "params": [
                    {
                        "name": "from",
                        "type": "text"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "MakeInstantFromMillis",
                "description": "An instant in time specified by the milliseconds since 1970.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "millis",
                        "type": "number"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "MakeInstantFromParts",
                "description": "Allows the user to set the date and time to be displayed when the clock opens.\nValid values for the month field are 1-12 and 1-31 for the day field.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "year",
                        "type": "number"
                    },
                    {
                        "name": "month",
                        "type": "number"
                    },
                    {
                        "name": "day",
                        "type": "number"
                    },
                    {
                        "name": "hour",
                        "type": "number"
                    },
                    {
                        "name": "minute",
                        "type": "number"
                    },
                    {
                        "name": "second",
                        "type": "number"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "MakeTime",
                "description": "Allows the user to set the time of the clock - Valid format is hh:mm:ss",
                "deprecated": "false",
                "params": [
                    {
                        "name": "hour",
                        "type": "number"
                    },
                    {
                        "name": "minute",
                        "type": "number"
                    },
                    {
                        "name": "second",
                        "type": "number"
                    }
                ],
                "returnType": "InstantInTime"
            },
            {
                "name": "Minute",
                "description": "The minute of the hour",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "Month",
                "description": "The month of the year represented as a number from 1 to 12)",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "MonthName",
                "description": "The name of the month",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "Now",
                "description": "The current instant in time read from phone's clock",
                "deprecated": "false",
                "params": [],
                "returnType": "InstantInTime"
            },
            {
                "name": "Second",
                "description": "The second of the minute",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "SystemTime",
                "description": "The phone's internal time",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "Weekday",
                "description": "The day of the week represented as a number from 1 (Sunday) to 7 (Saturday)",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "WeekdayName",
                "description": "The name of the day of the week",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "Year",
                "description": "The year",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ],
                "returnType": "number"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.CloudDB",
        "name": "CloudDB",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EXPERIMENTAL",
        "helpString": "Non-visible component that communicates with CloudDB server to store and retrieve information.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/cloudDB.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "DefaultRedisServer",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ProjectID",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RedisPort",
                "editorType": "integer",
                "defaultValue": "6381",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RedisServer",
                "editorType": "string",
                "defaultValue": "DEFAULT",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Token",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UseSSL",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "DefaultRedisServer",
                "description": "The Default Redis Server to use.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ProjectID",
                "description": "Gets the ProjectID for this CloudDB project.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "RedisPort",
                "description": "The Redis Server port to use. Defaults to 6381",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "RedisServer",
                "description": "The Redis Server to use to store data. A setting of \"DEFAULT\" means that the MIT server will be used.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Token",
                "description": "This field contains the authentication token used to login to the backed Redis server. For the \"DEFAULT\" server, do not edit this value, the system will fill it in for you. A system administrator may also provide a special value to you which can be used to share data between multiple projects from multiple people. If using your own Redis server, set a password in the server's config and enter it here.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "UseSSL",
                "description": "Set to true to use SSL to talk to CloudDB\/Redis server. This should be set to True for the \"DEFAULT\" server.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "CloudDBError",
                "description": "Indicates that an error occurred while communicating with the CloudDB Redis server.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "DataChanged",
                "description": "Indicates that the data in the CloudDB project has changed.\n Launches an event with the tag and value that have been updated.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "value",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "FirstRemoved",
                "description": "Event triggered by the \"RemoveFirstFromList\" function. The argument \"value\" is the object that was the first in the list, and which is now removed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "value",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "GotValue",
                "description": "Indicates that a GetValue request has succeeded.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "value",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "TagList",
                "description": "Event triggered when we have received the list of known tags. Used with the \"GetTagList\" Function.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "value",
                        "type": "list"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "AppendValueToList",
                "description": "Append a value to the end of a list atomically. If two devices use this function simultaneously, both will be appended and no data lost.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "itemToAdd",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "ClearTag",
                "description": "Remove the tag from CloudDB",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "CloudConnected",
                "description": "returns True if we are on the network and will likely be able to connect to the CloudDB server.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "GetTagList",
                "description": "Get the list of tags for this application. When complete a \"TagList\" event will be triggered with the list of known tags.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GetValue",
                "description": "Get the Value for a tag, doesn't return the value but will cause a GotValue event to fire when the value is looked up.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "valueIfTagNotThere",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "RemoveFirstFromList",
                "description": "Return the first element of a list and atomically remove it. If two devices use this function simultaneously, one will get the first element and the the other will get the second element, or an error if there is no available element. When the element is available, the \"FirstRemoved\" event will be triggered.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "StoreValue",
                "description": "Store a value at a tag.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "valueToStore",
                        "type": "any"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.ContactPicker",
        "name": "ContactPicker",
        "external": "false",
        "version": "12",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SOCIAL",
        "helpString": "A button that, when clicked on, displays a list of the contacts to choose among. After the user has made a selection, the following properties will be set to information about the chosen contact: <ul>\n<li> <code>ContactName<\/code>: the contact's name <\/li>\n <li> <code>EmailAddress<\/code>: the contact's primary email address <\/li>\n <li> <code>ContactUri<\/code>: the contact's URI on the device <\/li>\n<li> <code>EmailAddressList<\/code>: a list of the contact's email addresses <\/li>\n <li> <code>PhoneNumber<\/code>: the contact's primary phone number (on Later Android Verisons)<\/li>\n <li> <code>PhoneNumberList<\/code>: a list of the contact's phone numbers (on Later Android Versions)<\/li>\n <li> <code>Picture<\/code>: the name of the file containing the contact's image, which can be used as a <code>Picture<\/code> property value for the <code>Image<\/code> or <code>ImageSprite<\/code> component.<\/li><\/ul>\n<\/p><p>Other properties affect the appearance of the button (<code>TextAlignment<\/code>, <code>BackgroundColor<\/code>, etc.) and whether it can be clicked on (<code>Enabled<\/code>).\n<\/p><p>The ContactPicker component might not work on all phones. For example, on Android systems before system 3.0, it cannot pick phone numbers, and the list of email addresses will contain only one email.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BorderShadow",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HTMLFormat",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Shape",
                "editorType": "button_shape",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowFeedback",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TouchColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Returns the button's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BorderShadow",
                "description": "Returns true if the button have a outside border shadow on click.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ContactName",
                "description": "Name property getter method.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ContactUri",
                "description": "URI that specifies the location of the contact on the device.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "EmailAddress",
                "description": "EmailAddress property getter method.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "EmailAddressList",
                "description": "EmailAddressList property getter method.",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If set, user can tap check box to cause action.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "If set, button text is displayed in bold.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "If set, button text is displayed in italics.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "Point size for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "Font family for button text.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HTMLFormat",
                "description": "If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Image to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PhoneNumber",
                "description": "PhoneNumber property getter method.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "PhoneNumberList",
                "description": "PhoneNumberList property getter method.",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Picture",
                "description": "Picture URI for this contact, which can be\n used to retrieve the contact's photo and other fields.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Shape",
                "description": "Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ShowFeedback",
                "description": "Specifies if a visual feedback should be shown for a button that as an image as background.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Text to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Left, center, or right.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Color for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TouchColor",
                "description": "Set the buttons touch color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterPicking",
                "description": "Event to be raised after the picker activity returns its\n result and the properties have been filled in.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "selection",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "BeforePicking",
                "description": "Event to raise when the button of the component is clicked or the list is shown\n using the Open block.  This event occurs before the list of items is displayed, and\n can be used to prepare the list before it is shown.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GotFocus",
                "description": "Indicates the cursor moved over the button so it is now possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Indicates the cursor moved away from the button so it is now no longer possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchDown",
                "description": "Indicates that the button was pressed down.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchUp",
                "description": "Indicates that a button has been released.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ButtonClick",
                "description": "Perform a button click as function.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Open",
                "description": "Opens the picker, as though the user clicked on it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ViewContact",
                "description": "view a contact via its URI",
                "deprecated": "false",
                "params": [
                    {
                        "name": "uri",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "WithIconFromFontAwesome",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/fontawesome.com\/cheatsheet Use as example for a heart icon just 'f004'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromMaterialFont",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/material.io\/icons",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromPicture",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "picture",
                        "type": "text"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.DatePicker",
        "name": "DatePicker",
        "external": "false",
        "version": "8",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "<p>A button that, when clicked on, launches a popup dialog to allow the user to select a date.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BorderShadow",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HTMLFormat",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Shape",
                "editorType": "button_shape",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowFeedback",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TouchColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Returns the button's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BorderShadow",
                "description": "Returns true if the button have a outside border shadow on click.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Day",
                "description": "the Day of the month that was last picked using the DatePicker.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If set, user can tap check box to cause action.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "If set, button text is displayed in bold.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "If set, button text is displayed in italics.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "Point size for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "Font family for button text.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HTMLFormat",
                "description": "If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Image to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Instant",
                "description": "the instant of the date that was last picked using the DatePicker.",
                "type": "InstantInTime",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Month",
                "description": "the number of the Month that was last picked using the DatePicker. Note that months start in 1 = January, 12 = December.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "MonthInText",
                "description": "Returns the name of the Month that was last picked using the DatePicker, in textual format.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Shape",
                "description": "Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ShowFeedback",
                "description": "Specifies if a visual feedback should be shown for a button that as an image as background.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Text to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Left, center, or right.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Color for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TouchColor",
                "description": "Set the buttons touch color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Year",
                "description": "the Year that was last picked using the DatePicker",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterDateSet",
                "description": "Event that runs after the user chooses a Date in the dialog",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GotFocus",
                "description": "Indicates the cursor moved over the button so it is now possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Indicates the cursor moved away from the button so it is now no longer possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchDown",
                "description": "Indicates that the button was pressed down.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchUp",
                "description": "Indicates that a button has been released.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ButtonClick",
                "description": "Perform a button click as function.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LaunchPicker",
                "description": "Launches the DatePicker popup.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetDateToDisplay",
                "description": "Allows the user to set the date to be displayed when the date picker opens.\nValid values for the month field are 1-12 and 1-31 for the day field.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "year",
                        "type": "number"
                    },
                    {
                        "name": "month",
                        "type": "number"
                    },
                    {
                        "name": "day",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetDateToDisplayFromInstant",
                "description": "Allows the user to set the date from the instant to be displayed when the date picker opens.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ]
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromFontAwesome",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/fontawesome.com\/cheatsheet Use as example for a heart icon just 'f004'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromMaterialFont",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/material.io\/icons",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromPicture",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "picture",
                        "type": "text"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Decoration",
        "name": "Decoration",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "Component for Decoration",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/decoration.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [],
        "methods": [
            {
                "name": "SetMargin",
                "description": "Margin is a way for a component to enforce some distance from others components. By specifying margin for a component, we say that keep this much distance from this component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "values",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SetPadding",
                "description": "The padding around the component. Padding is the space inside the border, between the border and the actual component content. Use single number like 5 to specify padding for top, left, bottom, righ. You can also use 4 different numbers like 5,0,10,0 for top, left, bottom right.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "values",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SetShape",
                "description": "This block allows you to create a rectangle or round shape for the visible component. You can use Color for backgroundColor and borderColor.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "backgroundColor",
                        "type": "number"
                    },
                    {
                        "name": "borderColor",
                        "type": "number"
                    },
                    {
                        "name": "isRound",
                        "type": "boolean"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.DeviceTools",
        "name": "DeviceTools",
        "external": "false",
        "version": "5",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "Component for DeviceTools",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/devicetools.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ShowSuccessToast",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AndroidVersion",
                "description": "Get the android version of device.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ApiVersion",
                "description": "The user-visible SDK version of the framework.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Board",
                "description": "The name of the underlying board, like \"goldfish\".",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "BootloaderVersion",
                "description": "The system bootloader version number.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Brand",
                "description": "The consumer-visible brand with which the product\/hardware will be associated, if any.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "BuildNumber",
                "description": "Get the build number(Software) of the device.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "CountryCode",
                "description": "The result is the code of your country.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "DeviceName",
                "description": "The name of the industrial design.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Fingerprint",
                "description": "A string that uniquely identifies this build.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "GetDeviceId",
                "description": "Returns the unique device specific 'AndroidID'. Developed by Cian.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Hardware",
                "description": "The name of the hardware (from the kernel command line or \/proc).",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Id",
                "description": "Either a changelist number, or a label like \"M4-rc20\".",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "LanguageCode",
                "description": "The result is the code of your device language.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Manufacturer",
                "description": "The manufacturer of the product\/hardware.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ModelName",
                "description": "The end-user-visible name for the end product.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Product",
                "description": "The name of the overall product.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "RadioVersion",
                "description": "Returns the version string for the radio firmware. May return null (if, for instance, the radio is not currently on).",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Serial",
                "description": "DEPRECATED. DO NOT USE THIS ANYMORE. USE 'Get Serial' INSTEAD!",
                "type": "text",
                "rw": "read-only",
                "deprecated": "true"
            },
            {
                "name": "ShowSuccessToast",
                "description": "Returns true if 'Show Success Toast' is enabled.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Tags",
                "description": "Comma-separated tags describing the build, like \"unsigned,debug\".",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Type",
                "description": "The type of build, like \"user\" or \"eng\".",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotIMEI",
                "description": "Event to get the IMEI after it was requested.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imei",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GotSerial",
                "description": "Event to get the serial number after it was requested.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "serial",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "CheckForDangerousAPK",
                "description": "Returns TRUE if one of 12 known patching or root emulating packages is installed. The name of the package is not returned, so the user does not know which package name to change. Developed by Cian.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "Copy",
                "description": "Copy text to clipboard. In case 'Show Success Toast' is true, the toast with your message will be shown after copying a text to the clipboard.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "successToastMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ExternalStorageAvailable",
                "description": "Available size of external storage in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ExternalStorageTotal",
                "description": "Total external storage size in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ExternalStorageUsed",
                "description": "Size of used-external-storage in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "GetIMEI",
                "description": "Get the IMEI of the device. The result will be then at the 'Got IMEI' event.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GetSerial",
                "description": "A hardware serial number, if available. Alphanumeric only, case-insensitive. For apps targeting SDK higher than N_MR1 this field is set to UNKNOWN.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "InternalStorageAvailable",
                "description": "Size of available internal storage in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "InternalStorageTotal",
                "description": "Total size of internal storage in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "InternalStorageUsed",
                "description": "Size of used-internal-storage in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "MemoryFree",
                "description": "Total free RAM size in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "MemoryTotal",
                "description": "Total RAM size in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "MemoryUsed",
                "description": "Size of used-memory in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "Parse",
                "description": "Parse a text between two strings. Example: text = abcdef, start = a, end = d, result = bc. If there is a problem the 'if Text Not Found' will be returned.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "start",
                        "type": "text"
                    },
                    {
                        "name": "end",
                        "type": "text"
                    },
                    {
                        "name": "ifTextNotFound",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "Paste",
                "description": "Paste text from clipboard. In case 'Show Success Toast' is true, the toast with your message will be shown after pasting a text from the clipboard.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "successToastMessage",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "isADBDebuggingEnabled",
                "description": "This returns TRUE if ADB debugging is enabled, which could be a sign of hacking your app, or a compromised device. Developed by Cian.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "isEmulator",
                "description": "Returns TRUE if the device operating on an emulator. Developed by Cian.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "isPlayStoreInstalled",
                "description": "Returns TRUE if the app was installed from Play Store. Developed by Cian.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Download",
        "name": "Download",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "CONNECTIVITY",
        "helpString": "The Download component is a non-visible component that allows users to download any file to the device",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/download.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AllowedOverRoaming",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Description",
                "editorType": "string",
                "defaultValue": "Downloading file..",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DownloadUrl",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RequiresCharging",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RequiresDeviceIdle",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SaveFileAs",
                "editorType": "string",
                "defaultValue": "NewFile.png",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ScanningByMediaScanner",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowNotification",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SuppressWarnings",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Title",
                "editorType": "string",
                "defaultValue": "Download..",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AllowedOverRoaming",
                "description": "Set whether this download may proceed over a roaming connection.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Description",
                "description": "Set the description that you will see in the download notification.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DownloadUrl",
                "description": "Set here the url to the file that you want to download.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RequiresCharging",
                "description": "Specify that to run this download, the device needs to be plugged in. Works only for devices with api >= 24.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RequiresDeviceIdle",
                "description": "Specify that to run, the download needs the device to be in idle mode. Idle mode is a loose definition provided by the system, which means that the device is not in use, and has not been in use for some time. Works only for devices with api >= 24.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SaveFileAs",
                "description": "Set here the new filename for the file that you want to download.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ScanningByMediaScanner",
                "description": "If the file to be downloaded is to be scanned by MediaScanner.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowNotification",
                "description": "Control whether a system notification is posted by the download manager while this download is running or when it is completed.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SuppressWarnings",
                "description": "If false you will see a toast message with a error message when a error is occurred.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Title",
                "description": "Set the title that you will see in the download notification.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "isDownloadManagerAvailable",
                "description": "This function is deprecated. Do not use it anymore. We will remove it in the future. Since we support min API 14 the download manager is by default available. The download manager was added in API 9.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "true"
            }
        ],
        "events": [
            {
                "name": "DownloadComplete",
                "description": "Event to detect if the download is successful finished. You can use the \"filePath\" to use the downloaded file into your app. The \"fileSize\" will be returned in bytes.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "filePath",
                        "type": "text"
                    },
                    {
                        "name": "fileName",
                        "type": "text"
                    },
                    {
                        "name": "fileSize",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "DownloadProgress",
                "description": "Get the progress (in percentage) of the current download task.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "progress",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GotFileSize",
                "description": "Event to detect file size is ready to be used.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "NotificationClicked",
                "description": "Event to detect when the user clicks on a running download, either from a system notification or from the downloads UI.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "Download",
                "description": "Start the download process of the given download url.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GetFileSize",
                "description": "Get the file size (in bytes) of a file that is stored online or on your device. The block detect automatic if it is a online path or not. You will get the result in the \"Got File Size\" event.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "path",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShowDownload",
                "description": "You can open the download folder with this block.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.EmailPicker",
        "name": "EmailPicker",
        "external": "false",
        "version": "6",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SOCIAL",
        "helpString": "An EmailPicker is a kind of text box.  If the user begins entering the name or email address of a contact, the phone will show a dropdown menu of choices that complete the entry.  If there are many contacts, the dropdown can take several seconds to appear, and can show intermediate results while the matches are being computed. <p>The initial contents of the text box and the contents< after user entry is in the <code>Text<\/code> property.  If the <code>Text<\/code> property is initially empty, the contents of the <code>Hint<\/code> property will be faintly shown in the text box as a hint to the user.<\/p>\n <p>Other properties affect the appearance of the text box (<code>TextAlignment<\/code>, <code>BackgroundColor<\/code>, etc.) and whether it can be used (<code>Enabled<\/code>).<\/p>\n<p>Text boxes like this are usually used with <code>Button<\/code> components, with the user clicking on the button when text entry is complete.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CursorColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "CursorVisible",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Hint",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HintColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "textArea",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "The background color of the input box.  You can choose a color by name in the Designer or in the Blocks Editor.  The default background color is 'default' (shaded 3-D look).",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "CurrentPosition",
                "description": "Get the current cursor position.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "CursorColor",
                "description": "The color of the cursor.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CursorVisible",
                "description": "Makes the cursor visible (the default) or invisible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableCopyPaste",
                "description": "DEPRECATED since this feature is not working. Use 'Enabled' instead.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "true"
            },
            {
                "name": "Enabled",
                "description": "Whether the user can enter text into this input box.  By default, this is true.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "Whether the font for the text should be bold.  By default, it is not.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "Whether the text should appear in italics.  By default, it does not.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "The font size for the text.  By default, it is 14.0 points.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "The font for the text.  The value can be changed in the Designer.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Hint",
                "description": "Text that should appear faintly in the input box to provide a hint as to what the user should enter.  This can only be seen if the <code>Text<\/code> property is empty.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HintColor",
                "description": "Set a custom hint text color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "LineColor",
                "description": "Please delete this block from your project.This block is deprecated and not longer supported.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "true"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the textbox is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Returns the textbox contents.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Whether the text should be left justified, centered, or right justified.  By default, text is left justified.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "The color for the text.  You can choose a color by name in the Designer or in the Blocks Editor.  The default text color is black.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextLength",
                "description": "Returns the current text length as number.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotFocus",
                "description": "Event raised when this component is selected for input, such as by\n the user touching it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Event raised when this component is no longer selected for input, such\n as if the user touches a different text box.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnTextChanged",
                "description": "Event to detect text changes.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "RequestFocus",
                "description": "Sets the textbox active.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetCursorAt",
                "description": "Set the cursor to the given position.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetCursorAtEnd",
                "description": "Set the cursor to the end of the text.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Ev3ColorSensor",
        "name": "Ev3ColorSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EV3",
        "helpString": "A component that provides a high-level interface to a color sensor on a LEGO MINDSTORMS EV3 robot.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsEv3.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AboveRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BelowRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BottomOfRange",
                "editorType": "non_negative_integer",
                "defaultValue": "30",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ColorChangedEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Mode",
                "editorType": "lego_ev3_color_sensor_mode",
                "defaultValue": "reflected",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SensorPort",
                "editorType": "lego_ev3_sensor_port",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TopOfRange",
                "editorType": "non_negative_integer",
                "defaultValue": "60",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "WithinRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AboveRangeEventEnabled",
                "description": "Whether the AboveRange event should fire when the light level goes above the TopOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BelowRangeEventEnabled",
                "description": "Whether the BelowRange event should fire when the light level goes below the BottomOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BottomOfRange",
                "description": "The bottom of the range used for the BelowRange, WithinRange, and AboveRange events.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ColorChangedEventEnabled",
                "description": "Whether the ColorChanged event should fire when the Mode property is set to \"color\" and the detected color changes.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Mode",
                "description": "Specifies the mode of the sensor.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SensorPort",
                "description": "The sensor port that the sensor is connected to.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TopOfRange",
                "description": "The top of the range used for the BelowRange, WithinRange, and AboveRange events.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WithinRangeEventEnabled",
                "description": "Whether the WithinRange event should fire when the light level goes between the BottomOfRange and the TopOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AboveRange",
                "description": "Light level has gone above the range.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "BelowRange",
                "description": "Light level has gone below the range.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ColorChanged",
                "description": "Called when the detected color has changed. The ColorChanged event will occur if the Mode property is set to \"color\" and the ColorChangedEventEnabled property is set to True.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "colorCode",
                        "type": "number"
                    },
                    {
                        "name": "colorName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "WithinRange",
                "description": "Light level has gone within the range.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "GetColorCode",
                "description": "It returns the color code from 0 to 7 corresponding to no color, black, blue, green, yellow, red, white and brown.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "GetColorName",
                "description": "Return the color name in one of \"No Color\", \"Black\", \"Blue\", \"Green\", \"Yellow\", \"Red\", \"White\", \"Brown\".",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "GetLightLevel",
                "description": "It returns the light level in percentage, or -1 when the light level cannot be read.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "SetAmbientMode",
                "description": "Make the sensor read the light level without reflected light.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetColorMode",
                "description": "Enter the color detection mode.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetReflectedMode",
                "description": "Make the sensor read the light level with reflected light.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Ev3Commands",
        "name": "Ev3Commands",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EV3",
        "helpString": "A component that provides a low-level interface to a LEGO MINDSTORMS EV3 robot, with functions to send system or direct commands to EV3 robots.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsEv3.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "GetBatteryCurrent",
                "description": "Get the battery current.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "GetBatteryVoltage",
                "description": "Get the battery voltage.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "GetFirmwareBuild",
                "description": "Get the firmware build on EV3.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "GetFirmwareVersion",
                "description": "Get the firmware version on EV3.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "GetHardwareVersion",
                "description": "Get the hardware version of EV3.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "GetOSBuild",
                "description": "Get the OS build on EV3.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "GetOSVersion",
                "description": "Get the OS version on EV3.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "KeepAlive",
                "description": "Keep the EV3 brick from shutdown for a period of time.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "minutes",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Ev3GyroSensor",
        "name": "Ev3GyroSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EV3",
        "helpString": "A component that provides a high-level interface to a gyro sensor on a LEGO MINDSTORMS EV3 robot.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsEv3.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Mode",
                "editorType": "lego_ev3_gyro_sensor_mode",
                "defaultValue": "angle",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SensorPort",
                "editorType": "lego_ev3_sensor_port",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SensorValueChangedEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Mode",
                "description": "Specifies the mode of the sensor.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SensorPort",
                "description": "The sensor port that the sensor is connected to.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SensorValueChangedEventEnabled",
                "description": "Whether the SensorValueChanged event should fire when the sensor value changed.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "SensorValueChanged",
                "description": "Called then the sensor value changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "sensorValue",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "GetSensorValue",
                "description": "Returns the current angle or rotation speed based on current mode, or -1 if the value cannot be read from sensor.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "SetAngleMode",
                "description": "Measures the orientation of the sensor.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetRateMode",
                "description": "Measures the angular velocity of the sensor.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Ev3Motors",
        "name": "Ev3Motors",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EV3",
        "helpString": "A component that provides both high- and low-level interfaces to a LEGO MINDSTORMS EV3 robot, with functions that can control the motors.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsEv3.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableSpeedRegulation",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MotorPorts",
                "editorType": "string",
                "defaultValue": "ABC",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ReverseDirection",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StopBeforeDisconnect",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TachoCountChangedEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "WheelDiameter",
                "editorType": "float",
                "defaultValue": "4.32",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableSpeedRegulation",
                "description": "Specifies whether to keep motor rotation at constant speed.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MotorPorts",
                "description": "The motor ports that the motors are connected to. The ports are specified by a sequence of port letters.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ReverseDirection",
                "description": "Set whether the direction of motors is reversed or not.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StopBeforeDisconnect",
                "description": "Whether to stop the motor before disconnecting.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TachoCountChangedEventEnabled",
                "description": "Whether the TachoCountChanged event should fire when the angle is changed.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WheelDiameter",
                "description": "Specifies the diameter of the wheels attached on motors.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "TachoCountChanged",
                "description": "Called when the tacho count has changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tachoCount",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "GetTachoCount",
                "description": "Get the current tacho count.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ResetTachoCount",
                "description": "Set the current tacho count to zero.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RotateInDistance",
                "description": "Rotate the motors in a distance.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    },
                    {
                        "name": "distance",
                        "type": "number"
                    },
                    {
                        "name": "useBrake",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "RotateInDuration",
                "description": "Rotate the motors in a period of time.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    },
                    {
                        "name": "milliseconds",
                        "type": "number"
                    },
                    {
                        "name": "useBrake",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "RotateInTachoCounts",
                "description": "Rotate the motors in a number of tacho counts.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    },
                    {
                        "name": "tachoCounts",
                        "type": "number"
                    },
                    {
                        "name": "useBrake",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "RotateIndefinitely",
                "description": "Start to rotate the motors.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "RotateSyncInDistance",
                "description": "Rotate the motors at the same speed for a distance in cm.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    },
                    {
                        "name": "distance",
                        "type": "number"
                    },
                    {
                        "name": "turnRatio",
                        "type": "number"
                    },
                    {
                        "name": "useBrake",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "RotateSyncInDuration",
                "description": "Rotate the motors at the same speed in a period of time.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    },
                    {
                        "name": "milliseconds",
                        "type": "number"
                    },
                    {
                        "name": "turnRatio",
                        "type": "number"
                    },
                    {
                        "name": "useBrake",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "RotateSyncInTachoCounts",
                "description": "Rotate the motors at the same speed in a number of tacho counts.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    },
                    {
                        "name": "tachoCounts",
                        "type": "number"
                    },
                    {
                        "name": "turnRatio",
                        "type": "number"
                    },
                    {
                        "name": "useBrake",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "RotateSyncIndefinitely",
                "description": "Start to rotate the motors at the same speed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    },
                    {
                        "name": "turnRatio",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Stop",
                "description": "Stop the motors of the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "useBrake",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "ToggleDirection",
                "description": "Toggle the direction of motors.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Ev3Sound",
        "name": "Ev3Sound",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EV3",
        "helpString": "A component that provides a high-level interface to sound functionalities on LEGO MINDSTORMS EV3 robot.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsEv3.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "PlayTone",
                "description": "Make the robot play a tone.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "volume",
                        "type": "number"
                    },
                    {
                        "name": "frequency",
                        "type": "number"
                    },
                    {
                        "name": "milliseconds",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "StopSound",
                "description": "Stop any sound on the robot.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Ev3TouchSensor",
        "name": "Ev3TouchSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EV3",
        "helpString": "A component that provides a high-level interface to a touch sensor on a LEGO MINDSTORMS EV3 robot.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsEv3.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PressedEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ReleasedEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SensorPort",
                "editorType": "lego_ev3_sensor_port",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PressedEventEnabled",
                "description": "Specifies whether the Pressed event should fire when the touch sensor is\n pressed.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ReleasedEventEnabled",
                "description": "Whether the Released event should fire when the touch sensor is released.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SensorPort",
                "description": "The sensor port that the sensor is connected to.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Pressed",
                "description": "Called when the touch sensor is pressed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Released",
                "description": "Called when the touch sensor is pressed.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "IsPressed",
                "description": "Returns true if the touch sensor is pressed.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Ev3UI",
        "name": "Ev3UI",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EV3",
        "helpString": "A component that provides a high-level interface to a LEGO MINDSTORMS EV3 robot, with functions to draw graphs on EV3 screen.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsEv3.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "DrawCircle",
                "description": "Draw a circle on the screen.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "color",
                        "type": "number"
                    },
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "fill",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "DrawIcon",
                "description": "Draw a built-in icon on screen.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "color",
                        "type": "number"
                    },
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "type",
                        "type": "number"
                    },
                    {
                        "name": "no",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "DrawLine",
                "description": "Draw a line on the screen.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "color",
                        "type": "number"
                    },
                    {
                        "name": "x1",
                        "type": "number"
                    },
                    {
                        "name": "y1",
                        "type": "number"
                    },
                    {
                        "name": "x2",
                        "type": "number"
                    },
                    {
                        "name": "y2",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "DrawPoint",
                "description": "Draw a point on the screen.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "color",
                        "type": "number"
                    },
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "DrawRect",
                "description": "Draw a rectangle on the screen.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "color",
                        "type": "number"
                    },
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    },
                    {
                        "name": "fill",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "FillScreen",
                "description": "Fill the screen with a color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Ev3UltrasonicSensor",
        "name": "Ev3UltrasonicSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EV3",
        "helpString": "A component that provides a high-level interface to an ultrasonic sensor on a LEGO MINDSTORMS EV3 robot.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsEv3.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AboveRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BelowRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BottomOfRange",
                "editorType": "non_negative_integer",
                "defaultValue": "30",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SensorPort",
                "editorType": "lego_ev3_sensor_port",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TopOfRange",
                "editorType": "non_negative_integer",
                "defaultValue": "90",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Unit",
                "editorType": "lego_ev3_ultrasonic_sensor_mode",
                "defaultValue": "cm",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "WithinRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AboveRangeEventEnabled",
                "description": "Whether the AboveRange event should fire when the distance goes above the TopOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BelowRangeEventEnabled",
                "description": "Whether the BelowRange event should fire when the distance goes below the BottomOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BottomOfRange",
                "description": "The bottom of the range used for the BelowRange, WithinRange, and AboveRange events.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SensorPort",
                "description": "The sensor port that the sensor is connected to.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TopOfRange",
                "description": "The top of the range used for the BelowRange, WithinRange, and AboveRange events.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Unit",
                "description": "Specifies the unit of distance.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WithinRangeEventEnabled",
                "description": "Whether the WithinRange event should fire when the distance goes between the BottomOfRange and the TopOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AboveRange",
                "description": "Called when the detected distance has gone above the range.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "BelowRange",
                "description": "Called when the detected distance has gone below the range.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "WithinRange",
                "description": "Called when the detected distance has gone within the range.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "GetDistance",
                "description": "Returns the current distance in centimeters as a value between 0 and 254, or -1 if the distance can not be read.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "SetCmUnit",
                "description": "Measure the distance in centimeters.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetInchUnit",
                "description": "Measure the distance in inches.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.FAB",
        "name": "FAB",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "INTERNAL",
        "helpString": "Floating Button Component to make a Floating Action Button on the right bottom of the screen",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/fab.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Color",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Icon",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MarginBottom",
                "editorType": "non_negative_integer",
                "defaultValue": "8",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MarginRight",
                "editorType": "non_negative_integer",
                "defaultValue": "8",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Size",
                "editorType": "size",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UseAnimation",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Color",
                "description": "Returns Color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Icon",
                "description": "Returns Icon Path",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "IsCreated",
                "description": "Is FAB created?",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "MarginBottom",
                "description": "Set Bottom Margin in dp, Default = 16",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MarginRight",
                "description": "Set Right Margin in dp, Default = 16",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Size",
                "description": "Set FAB Size.\nSet it to 1 for Normal size, 2 for Mini.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UseAnimation",
                "description": "Are animations on?",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Is FAB visible?",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "FAB Clicked",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "FAB Long Clicked",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "Create",
                "description": "Create FAB",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.FeatureCollection",
        "name": "FeatureCollection",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MAPS",
        "helpString": "A FeatureColletion contains one or more map features as a group. Any events fired on a feature in the collection will also trigger the corresponding event on the collection object. FeatureCollections can be loaded from external resources as a means of populating a Map with content.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "FeaturesFromGeoJSON",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Source",
                "editorType": "geojson_type",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Features",
                "description": "The list of features placed on this map. This list also includes any features created by calls to FeatureFromDescription",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FeaturesFromGeoJSON",
                "description": "Loads a collection of features from the given string. If the string is not valid GeoJSON, the ErrorLoadingFeatureCollection error will be run with url = <string>.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Source",
                "description": "Gets or sets the source URL used to populate the feature collection. If the feature collection was not loaded from a URL, this will be the empty string.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "FeatureClick",
                "description": "The user clicked on a map feature.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "feature",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "FeatureDrag",
                "description": "The user dragged a map feature.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "feature",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "FeatureLongClick",
                "description": "The user long-pressed on a map feature.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "feature",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "FeatureStartDrag",
                "description": "The user started dragging a map feature.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "feature",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "FeatureStopDrag",
                "description": "The user stopped dragging a map feature.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "feature",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "GotFeatures",
                "description": "A GeoJSON document was successfully read from url. The features specified in the document are provided as a list in features.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    },
                    {
                        "name": "features",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "LoadError",
                "description": "An error was encountered while processing a GeoJSON document at the given url. The responseCode parameter will contain an HTTP status code and the errorMessage parameter will contain a detailed error message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    },
                    {
                        "name": "responseCode",
                        "type": "number"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "FeatureFromDescription",
                "description": "Convert a feature description into an App Inventor map feature. Currently the only\n supported conversion is from a GeoJSON point to Marker component. If the feature has\n properties, they will be mapped into App Inventor properties using the following mapping:\n\n description becomes Description;\n draggable becomes Draggable;\n infobox becomes EnableInfobox;\n fill becomes FillColor;\n fill-opacity becomes FillOpacity;\n image becomes ImageAsset;\n stroke becomes StrokeColor;\n stroke-opacity becomes StrokeOpacity;\n stroke-width becomes StrokeWidth;\n title becomes Title;\n visible becomes Visible",
                "deprecated": "false",
                "params": [
                    {
                        "name": "description",
                        "type": "list"
                    }
                ],
                "returnType": "any"
            },
            {
                "name": "LoadFromURL",
                "description": "<p>Load a feature collection in <a href=\"https:\/\/en.wikipedia.org\/wiki\/GeoJSON\">GeoJSON<\/a> format from the given url. On success, the event GotFeatures will be raised with the given url and a list of the features parsed from the GeoJSON as a list of (key, value) pairs. On failure, the LoadError event will be raised with any applicable HTTP response code and error message.<\/p>",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.File",
        "name": "File",
        "external": "false",
        "version": "5",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "STORAGE",
        "helpString": "Non-visible component for storing and retrieving files. Use this component to write or read files on your device. The default behaviour is to write files to the private data directory associated with your App. The Companion is special cased to write files to \/sdcard\/Makeroid\/data to facilitate debugging. If the file path starts with a slash (\/), then the file is created relative to \/sdcard. For example writing a file to \/myFile.txt will write the file in \/sdcard\/myFile.txt.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/file.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [
            {
                "name": "AfterFileSaved",
                "description": "Event indicating that the contents of the file have been written.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "fileName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AfterUnzip",
                "description": "Event indicating that the zip file have been created.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AfterZip",
                "description": "Event indicating that the zip file have been created.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "DirectoryCreated",
                "description": "Event indicating that there was a directory created. The return value is 'true' or 'false'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "isDirectoryCreated",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "GotText",
                "description": "Event indicating that the contents from the file have been read.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OnZipFailure",
                "description": "Event indicating that there was any failure on zip or unzip a file.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "AppendToFile",
                "description": "Appends text to the end of a file storage, creating the file if it does not exist. See the help text under SaveFile for information about where files are written.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "fileName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Copy",
                "description": "Copy file",
                "deprecated": "false",
                "params": [
                    {
                        "name": "input",
                        "type": "text"
                    },
                    {
                        "name": "output",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "CreateDirectory",
                "description": "Create a new directory.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "directory",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Delete",
                "description": "Deletes a file from storage. Prefix the filename with \/ to delete a specific file in the SD card, for instance \/myFile.txt. will delete the file \/sdcard\/myFile.txt. If the file does not begin with a \/, then the file located in the programs private storage will be deleted. Starting the file with \/\/ is an error because assets files cannot be deleted.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "fileName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Exists",
                "description": "Check whether a file exists",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "FileSize",
                "description": "Get file size",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetFileName",
                "description": "Get file name",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetFreeSpace",
                "description": "Get Free Space",
                "deprecated": "false",
                "params": [
                    {
                        "name": "path",
                        "type": "text"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetTotalSpace",
                "description": "Get total space",
                "deprecated": "false",
                "params": [
                    {
                        "name": "path",
                        "type": "text"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "IsDirectory",
                "description": "Check whether the path is a directory",
                "deprecated": "false",
                "params": [
                    {
                        "name": "path",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "IsFile",
                "description": "Check whether the path is a file",
                "deprecated": "false",
                "params": [
                    {
                        "name": "path",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "Move",
                "description": "Move file",
                "deprecated": "false",
                "params": [
                    {
                        "name": "input",
                        "type": "text"
                    },
                    {
                        "name": "output",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "ReadFrom",
                "description": "Reads text from a file in storage. Prefix the filename with \/ to read from a specific file on the SD card. for instance \/myFile.txt will read the file \/sdcard\/myFile.txt. To read assets packaged with an application (also works for the Companion) start the filename with \/\/ (two slashes). If a filename does not start with a slash, it will be read from the applications private storage (for packaged apps) and from \/sdcard\/AppInventor\/data for the Companion.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "fileName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SaveFile",
                "description": "Saves text to a file. If the filename begins with a slash (\/) the file is written to the sdcard. For example writing to \/myFile.txt will write the file to \/sdcard\/myFile.txt. If the filename does not start with a slash, it will be written in the programs private data directory where it will not be accessible to other programs on the phone. There is a special exception for the AI Companion where these files are written to \/sdcard\/AppInventor\/data to facilitate debugging. Note that this block will overwrite a file if it already exists.\n\nIf you want to add content to a file use the append block.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "fileName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Unzip",
                "description": "Unzip a file with or without a password. If you dont need a passwort then let it empty.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "targetZipFilePath",
                        "type": "text"
                    },
                    {
                        "name": "destinationFolderPath",
                        "type": "text"
                    },
                    {
                        "name": "password",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Zip",
                "description": "Create a zip file with or without a password.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "targetPath",
                        "type": "text"
                    },
                    {
                        "name": "destinationFilePath",
                        "type": "text"
                    },
                    {
                        "name": "password",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.FingerPrint",
        "name": "FingerPrint",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "Component to check for a FingerScanner and read fingerprints from the scanner",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/sensors\/fingerprint\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/fingerprint.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "DialogHelpText",
                "editorType": "string",
                "defaultValue": "Scan your finger",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DialogTitle",
                "editorType": "string",
                "defaultValue": "Sign in with your fingerprint",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "LightTheme",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UseDialog",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "DialogHelpText",
                "description": "Sets the dialog help text",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DialogTitle",
                "description": "Sets the dialog title",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "LightTheme",
                "description": "Sets the current theme",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UseDialog",
                "description": "Whether to use a dialog",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "OnAuthenticationError",
                "description": "Triggers when there is a Authentication Error",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorId",
                        "type": "number"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OnAuthenticationFailed",
                "description": "Triggers when the Authentication Failed",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnAuthenticationHelp",
                "description": "Triggers when there is a Authentication Help",
                "deprecated": "false",
                "params": [
                    {
                        "name": "helpId",
                        "type": "number"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OnAuthenticationSucceeded",
                "description": "Trigger when the Authentication Succeeded",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "Authenticate",
                "description": "Authenticate the user with a Fingerprint scanner",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "CancelScan",
                "description": "Cancel the current Fingerprint Scan",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "HasFingerPrintScanner",
                "description": "True if hardware is present and functional, false otherwise",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "HasFingersAdded",
                "description": "True if at least one fingerprint is enrolled, false otherwise",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.FirebaseDB",
        "name": "FirebaseDB",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "GOOGLE",
        "helpString": "Non-visible component that communicates with a Firebase to store and retrieve information.",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/google\/firebase-database\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/firebaseDB.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "DefaultURL",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DeveloperBucket",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FirebaseToken",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FirebaseURL",
                "editorType": "FirbaseURL",
                "defaultValue": "DEFAULT",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Persist",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ProjectBucket",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "DefaultURL",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "DeveloperBucket",
                "description": "Getter for the DeveloperBucket.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FirebaseToken",
                "description": "Returns the FirebaseToken from this FirebaseDB.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FirebaseURL",
                "description": "Gets the URL for this FirebaseDB.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Persist",
                "description": "If true, variables will retain their values when off-line and the App exits. Values will be uploaded to Firebase the next time the App is run while connected to the network. This is useful for applications which will gather data while not connected to the network. Note: AppendValue and RemoveFirst will not work correctly when off-line, they require a network connection.<br\/><br\/> <i>Note<\/i>: If you set Persist on any Firebase component, on any screen, it makes all Firebase components on all screens persistent. This is a limitation of the low level Firebase library. Also be aware that if you want to set persist to true, you should do so before connecting the Companion for incremental development.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ProjectBucket",
                "description": "Gets the ProjectBucket for this FirebaseDB.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "DataChanged",
                "description": "Indicates that the data in the Firebase has changed.\n Launches an event with the tag and value that have been updated.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "value",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "FirebaseError",
                "description": "Indicates that the communication with the Firebase signaled an error.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "FirstRemoved",
                "description": "Event triggered by the \"RemoveFirst\" function. The argument \"value\" is the object that was the first in the list, and which is now removed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "value",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "GotValue",
                "description": "Indicates that a GetValue request has succeeded.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "value",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "TagList",
                "description": "Event triggered when we have received the list of known tags. Used with the \"GetTagList\" Function.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "value",
                        "type": "list"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "AppendValue",
                "description": "Append a value to the end of a list atomically. If two devices use this function simultaneously, both will be appended and no data lost.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "valueToAdd",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "ClearTag",
                "description": "Remove the tag from Firebase",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GetTagList",
                "description": "Get the list of tags for this application. When complete a \"TagList\" event will be triggered with the list of known tags.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GetValue",
                "description": "GetValue asks Firebase to get the value stored under the given tag.\n It will pass valueIfTagNotThere to GotValue if there is no value stored\n under the tag.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "valueIfTagNotThere",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "GoOffline",
                "description": "Take the database offline",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GoOnline",
                "description": "Take the database online",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RemoveFirst",
                "description": "Return the first element of a list and atomically remove it. If two devices use this function simultaneously, one will get the first element and the the other will get the second element, or an error if there is no available element. When the element is available, the \"FirstRemoved\" event will be triggered.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "StoreValue",
                "description": "Asks Firebase to store the given value under the given tag.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "valueToStore",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "Unauthenticate",
                "description": "If you are having difficulty with the Companion and you are switching between different Firebase accounts, you may need to use this function to clear internal Firebase caches. You can just use the \"Do It\" function on this block in the blocks editor. Note: You should not normally need to use this block as part of an application.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Form",
        "name": "Form",
        "external": "false",
        "version": "42",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "LAYOUT_GENERAL",
        "helpString": "Top-level component containing all other components in the program",
        "helpUrl": "",
        "showOnPalette": "false",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AboutScreen",
                "editorType": "textArea",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AboutScreenBackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AboutScreenLightTheme",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AboutScreenTitle",
                "editorType": "string",
                "defaultValue": "About this application",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AccentColor",
                "editorType": "color",
                "defaultValue": "&HFFFF4081",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AlignHorizontal",
                "editorType": "horizontal_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AlignVertical",
                "editorType": "vertical_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AppId",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AppName",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BackgroundImage",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CloseScreenAnimation",
                "editorType": "screen_animation",
                "defaultValue": "default",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HighQuality",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Icon",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "KeepScreenOn",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "MinSdk",
                "editorType": "min_sdk",
                "defaultValue": "19",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "NavigationBarColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "OpenScreenAnimation",
                "editorType": "screen_animation",
                "defaultValue": "default",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PackageName",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "PrimaryColor",
                "editorType": "color",
                "defaultValue": "&HFF3F51B5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PrimaryColorDark",
                "editorType": "color",
                "defaultValue": "&HFF303F9F",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RTLSupport",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ReceiveSharedText",
                "editorType": "receive_types",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ScreenOrientation",
                "editorType": "screen_orientation",
                "defaultValue": "unspecified",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Scrollable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowListsAsJson",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ShowNavBar",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "experimental",
                "editorArgs": []
            },
            {
                "name": "ShowOptionsMenu",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowStatusBar",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Sizing",
                "editorType": "sizing",
                "defaultValue": "Responsive",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SplashEnabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "SplashIcon",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Theme",
                "editorType": "theme",
                "defaultValue": "AppTheme",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Title",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TitleBarFontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TitleBarSubTitle",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TitleBarTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TitleVisible",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TutorialURL",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "VersionCode",
                "editorType": "non_negative_integer",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "VersionName",
                "editorType": "string",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AboutScreen",
                "description": "Information about the screen.  It appears when \"About this Application\" is selected from the system menu. Use it to inform people about your app.  In multiple screen apps, each screen has its own AboutScreen info.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AboutScreenBackgroundColor",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AboutScreenLightTheme",
                "description": "",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AboutScreenTitle",
                "description": "Define the title of the about application option.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "AccentColor",
                "description": "This is the accent color used for highlights and other user interface accents.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "AlignHorizontal",
                "description": "A number that encodes how contents of the screen are aligned  horizontally. The choices are: 1 = left aligned, 2 = horizontally centered,  3 = right aligned.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AlignVertical",
                "description": "A number that encodes how the contents of the arrangement are aligned vertically. The choices are: 1 = aligned at the top, 2 = vertically centered, 3 = aligned at the bottom. Vertical alignment has no effect if the screen is scrollable.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AppId",
                "description": "The unique APP_ID for the user (which is generated by GWT and stored in Datastore)",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "AppName",
                "description": "This is the display name of the installed application in the phone.If the AppName is blank, it will be set to the name of the project when the project is built.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "BackgroundColor",
                "description": "BackgroundColor property getter method.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BackgroundImage",
                "description": "The screen background image.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CloseScreenAnimation",
                "description": "The animation for closing current screen and returning  to the previous screen. Valid options are default, fade, zoom, slidehorizontal, slidevertical, and none",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DrawerArrowIconColor",
                "description": "Set the drawer arrow icon color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Screen height (y-size).",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "HighQuality",
                "description": "If set to true, pictures will be loaded in high quality.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Icon",
                "description": "Specifies the name of the application icon.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "IsCompanion",
                "description": "This block will return true, if you are running your project current in the companion application. Else it will return false.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "IsSideMenuAdded",
                "description": "Returns true if a side menu is added to the screen.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "IsSideMenuOpen",
                "description": "Returns true if a side menu is current open. Else it will return false.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "KeepScreenOn",
                "description": "Keep the device's screen turned on and bright.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MinSdk",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "NavigationBarColor",
                "description": "Set navigation bar color. This will work starting from API Level 21 (Android Lollipop)",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "NavigationBarLightIcons",
                "description": "This option tells the system to use dark navigation bar icons, useful for lighter colored navigation bars. Works only for devices with API >= 26.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "NavigationIconColor",
                "description": "Set the navigation icon color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "OpenScreenAnimation",
                "description": "The animation for switching to another screen. Valid options are default, fade, zoom, slidehorizontal, slidevertical, and none",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "OptionsMenuIconColor",
                "description": "Set the options menu icon color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PackageName",
                "description": "Set a custom PackageName for the app",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "PrimaryColor",
                "description": "This is the primary color used for Material UI elements, such as the ActionBar.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "PrimaryColorDark",
                "description": "This is the primary color used for darker elements in Material UI.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "RTLSupport",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ReceiveSharedText",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ScreenOrientation",
                "description": "The requested screen orientation, specified as a text value.  Commonly used values are landscape, portrait, sensor, user and unspecified.  See the Android developer documentation for ActivityInfo.Screen_Orientation for the complete list of possible settings.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Scrollable",
                "description": "When checked, there will be a vertical scrollbar on the screen, and the height of the application can exceed the physical height of the device. When unchecked, the application height is constrained to the height of the device.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowListsAsJson",
                "description": "If false, lists will be converted to strings using Lisp notation, i.e., as symbols separated by spaces, e.g., (a 1 b2 (c d). If true, lists will appear as in Json or Python, e.g.  [\"a\", 1, \"b\", 2, [\"c\", \"d\"]].  This property appears only in Screen 1, and the value for Screen 1 determines the behavior for all screens. The property defaults to \"false\" meaning that the App Inventor programmer must explicitly set it to \"true\" if JSON\/Python syntax is desired. At some point in the future we will alter the system so that new projects are created with this property set to \"true\" by default. Existing projects will not be impacted. The App Inventor programmer can also set it back to \"false\" in newer projects if desired.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ShowNavBar",
                "description": "Show\/Hide Navigation Bar",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowOptionsMenu",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ShowStatusBar",
                "description": "The status bar is the topmost bar on the screen. This property reports whether the status bar is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowTitlebarBackButton",
                "description": "If true it will show in the TitleBar a back button only if no side menu was added. If a side menu was added it will remove the \u2018hamburger\u2019-menu icon but the side menu can still be opened.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Sizing",
                "description": "If set to fixed,  screen layouts will be created for a single fixed-size screen and autoscaled. If set to responsive, screen layouts will use the actual resolution of the device.  See the documentation on responsive design in App Inventor for more information. This property appears on Screen1 only and controls the sizing for all screens in the app.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SplashEnabled",
                "description": "If set to true the user will see a splash screen while the app is loading the content.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SplashIcon",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "StatusBarColor",
                "description": "Set status bar color. This will work starting from API Level 21 (Android Lollipop",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StatusbarLightIcons",
                "description": "This option tells the system to use dark statusbar icons, useful for lighter colored status bars. Works only for devices with API >= 23.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Theme",
                "description": "Sets the theme used by the application.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Title",
                "description": "The caption for the form, which apears in the title bar",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitleBarColor",
                "description": "Set title bar color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitleBarFontTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TitleBarSubTitle",
                "description": "Set the TitleBar's subtitle.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitleBarTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "TitleVisible",
                "description": "The title bar is the top gray bar on the screen. This property reports whether the title bar is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitlebarTextColor",
                "description": "Set a custom color for the TitleBar text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TutorialURL",
                "description": "A URL to use to populate the Tutorial Sidebar while editing a project. Used as a teaching aid.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "VersionCode",
                "description": "An integer value which must be incremented each time a new Android Application Package File (APK) is created for the Google Play Store.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "VersionName",
                "description": "A string which can be changed to allow Google Play Store users to distinguish between different versions of the App.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Screen width (x-size).",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "isKeyboardVisible",
                "description": "Returns the status of the keyboard. If the keyboard is visible then the result is true.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "BackPressed",
                "description": "Device back button pressed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ErrorOccurred",
                "description": "Event raised when an error occurs. Only some errors will raise this condition.  For those errors, the system will show a notification by default.  You can use this event handler to prescribe an error behavior different than the default.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "functionName",
                        "type": "text"
                    },
                    {
                        "name": "errorNumber",
                        "type": "number"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GotReceivedShared",
                "description": "Event to detect that a user shared content to your app throw the sharing dialog of any other app. Type stand for integer. 0 = nothing shared, 1 = audio, 2 = image, 3 = text or 4 = video",
                "deprecated": "false",
                "params": [
                    {
                        "name": "type",
                        "type": "number"
                    },
                    {
                        "name": "value",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Initialize",
                "description": "Screen starting",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "KeyboardVisiblityChanged",
                "description": "Event will be invoked if the keyboard was visible or invisible.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "isKeyboardVisible",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "MenuInitialize",
                "description": "Event to detect when the menu has loaded. Set here your blocks like TitleBarIcon or AddMenuItem.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "MenuItemSelected",
                "description": "Event to detect when a menu item has been selected.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "menuItem",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OnAppPause",
                "description": "The system calls this method as the first indication that the user is leaving your activity (though it does not always mean the activity is being destroyed).",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnAppResume",
                "description": "When the activity enters the Resumed state, it comes to the foreground, and then the system invokes this event.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnAppStop",
                "description": "When your activity is no longer visible to the user, it has entered the Stopped state, and the system invokes this event.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OtherScreenClosed",
                "description": "Event raised when another screen has closed and control has returned to this screen.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "otherScreenName",
                        "type": "text"
                    },
                    {
                        "name": "result",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "PermissionDenied",
                "description": "Event to handle when the app user has denied a needed permission.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "functionName",
                        "type": "text"
                    },
                    {
                        "name": "permissionName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PermissionGranted",
                "description": "Event to handle when the app user has granted a needed permission. This event is only run when permission is\n granted in response to the AskForPermission method.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "permissionName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ScreenOrientationChanged",
                "description": "Screen orientation changed",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SideMenuClosed",
                "description": "Event will be invoked if the side menu was closed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SideMenuOpened",
                "description": "Event will be invoked if the side menu was opened.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TitleBarIconSelected",
                "description": "The event returns the 'icon' or 'name' of the selected icon.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "icon",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "TitlebarBackButtonClicked",
                "description": "Event to detect when a menu item has been selected.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AddMenuItem",
                "description": "Add a new item to the menu. Use the 'make a list' block.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "menuItem",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "AddMenuItemWithIcon",
                "description": "Add a new item with a icon on the left side to the menu. This function does not use the make a list block. If you want more items with icon then use this block again.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "menuItem",
                        "type": "text"
                    },
                    {
                        "name": "menuIcon",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AddTitleBarIcon",
                "description": "Add a new action icon to the TitleBar. You will see a toast message on a long click with your choosen name. Add this block to the \"MenuInitialize\" event.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "icon",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ArePermissionsGranted",
                "description": "Returns true if ALL needed app permissions were granted, else false.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "AskForPermission",
                "description": "Ask the user to grant access to a dangerous permission.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "permissionName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "CanWriteSystemSettings",
                "description": "Returns true if the app can write system settings, else it returns false. It will return true automatic for devices with android version below 6 (API 23).",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "HideKeyboard",
                "description": "Hide the keyboard.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LockSideMenu",
                "description": "Use this block to lock the side menu. This means the user can not open the side menu until the side menu  unlock block is used.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "MoveTaskToBack",
                "description": "Move task to back. That means it will minimize your current app.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OpenAppSettings",
                "description": "Opens the settings screen of the app. Useful if 'Are Permissions Granted' has returned false.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OpenSystemWriteSettings",
                "description": "Opens the app's system settings page. This works only for devices with android 6+.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RemoveSideMenu",
                "description": "Remove a first created side menu. This block will be usefull if you need to update a side menu dynamically. You can use this block too to test a side menu in the companion. Add then this block above of the 'Side Menu' block.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RemoveTitleBarIcons",
                "description": "Remove all added action icons from the TitleBar.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ResetMenu",
                "description": "Reset the menu back to its default",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowAboutApplication",
                "description": "Show the dialog which shows when pressing the \"About This Application\" button in the menu.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowKeyboard",
                "description": "Show the keyboard",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SideMenu",
                "description": "Create a Side Menu. Set to \"layout\" your layout that will be then your side menu. Use as example a vertical arrangement. Your choosen layout will be then removed from the screen and only visible in the side menu.\"Information\": This block works on companion only if you add a side menu on button click.Don\u2019t add it in companion on \"screen initialize event\". Else the companion will crash.Do NOT use this block with the Side Menu Layout component",
                "deprecated": "false",
                "params": [
                    {
                        "name": "layout",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "SideMenuClose",
                "description": "If you had set your side menu then you can use this block to close it as example with a button click.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SideMenuOpen",
                "description": "If you had set your side menu then you can use this block to open it as example with a button click.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TaskDescription",
                "description": "Sets information describing the task with this activity for presentation inside the Recents System UI. You will see the settings if the device API is >= 21 and you minimize the app.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "UnlockSideMenu",
                "description": "Use this block to unlock the side menu. This means the user can now open again the side menu.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "VersionCode",
                "description": "This block will returns the version code",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "VersionName",
                "description": "This block will returns the version name",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.FusiontablesControl",
        "name": "FusiontablesControl",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "STORAGE",
        "helpString": "<p>A non-visible component that communicates with Google Fusion Tables. Fusion Tables let you store, share, query and visualize data tables; this component lets you query, create, and modify these tables.<\/p> <p>This component uses the <a href=\"https:\/\/developers.google.com\/fusiontables\/docs\/v2\/getting_started\" target=\"_blank\">Fusion Tables API V2.0<\/a>. <p>Applications using Fusion Tables must authentication to Google's servers. There are two ways this can be done. The first way uses an API Key which you the developer obtain (see below). With this approach end-users must also login to access a Fusion Table. The second approach is to use a Service Account. With this approach you create credentials and a special \"Service Account Email Address\" which you obtain from the <a href=\"https:\/\/code.google.com\/apis\/console\/\" target=\"_blank\">Google APIs Console<\/a>. You then tell the Fusion Table Control the name of the Service Account Email address and upload the secret key as an asset to your application and set the KeyFile property to point at this file. Finally you check the \"UseServiceAuthentication\" checkbox in the designer. When using a Service Account, end-users do not need to login to use Fusion Tables, your service account authenticates all access.<\/p> <p>To get an API key, follow these instructions.<\/p> <ol><li>Go to your <a href=\"https:\/\/code.google.com\/apis\/console\/\" target=\"_blank\">Google APIs Console<\/a> and login if necessary.<\/li><li>Select the <i>Services<\/i> item from the menu on the left.<\/li><li>Choose the <i>Fusiontables<\/i> service from the list provided and turn it on.<\/li><li>Go back to the main menu and select the <i>API Access<\/i> item. <\/li><\/ol><p>Your API Key will be near the bottom of that pane in the section called \"Simple API Access\".You will have to provide that key as the value for the <i>ApiKey<\/i> property in your Fusiontables app.<\/p><p>Once you have an API key, set the value of the <i>Query<\/i> property to a valid Fusiontables SQL query and call <i>SendQuery<\/i> to execute the query.  App Inventor will send the query to the Fusion Tables server and the <i>GotResult<\/i> block will fire when a result is returned from the server.Query results will be returned in CSV format, and can be converted to list format using the \"list from csv table\" or \"list from csv row\" blocks.<\/p><p>Note that you do not need to worry about UTF-encoding the query. But you do need to make sure the query follows the syntax described in <a href=\"https:\/\/developers.google.com\/fusiontables\/docs\/v2\/getting_started\" target=\"_blank\">the reference manual<\/a>, which means that things like capitalization for names of columns matters, and that single quotes must be used around column names if there are spaces in them.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/fusiontables.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ApiKey",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "KeyFile",
                "editorType": "asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "LoadingDialogMessage",
                "editorType": "string",
                "defaultValue": "Please wait loading...",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Query",
                "editorType": "string",
                "defaultValue": "show tables",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ServiceAccountEmail",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowLoadingDialog",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UseServiceAuthentication",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ApiKey",
                "description": "Setter for the app developer's API key.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "KeyFile",
                "description": "Specifies the path of the private key file.  This key file is used to get access to the FusionTables API.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "LoadingDialogMessage",
                "description": "Setter for the loading dialog's message.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Query",
                "description": "The query to send to the Fusion Tables API. <p>For legal query formats and examples, see the <a href=\"https:\/\/developers.google.com\/fusiontables\/docs\/v2\/getting_started\" target=\"_blank\">Fusion Tables API v2.0 reference manual<\/a>.<\/p> <p>Note that you do not need to worry about UTF-encoding the query. But you do need to make sure it follows the syntax described in the reference manual, which means that things like capitalization for names of columns matters, and that single quotes need to be used around column names if there are spaces in them.<\/p>",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ServiceAccountEmail",
                "description": "The Service Account Email Address when service account authentication is in use.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowLoadingDialog",
                "description": "Setter for the loading dialog's visibility.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UseServiceAuthentication",
                "description": "Indicates whether a service account should be used for authentication",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotResult",
                "description": "Indicates that the Fusion Tables query has finished processing, with a result.  The result of the query will generally be returned in CSV format, and can be converted to list format using the \"list from csv table\" or \"list from csv row\" blocks.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "result",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "DoQuery",
                "description": "DEPRECATED. This block is deprecated as of the end of 2012.  Use SendQuery.",
                "deprecated": "true",
                "params": []
            },
            {
                "name": "ForgetLogin",
                "description": "Forget end-users login credentials. Has no effect on service authentication",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GetRows",
                "description": "Gets all the rows from a specified fusion table. The tableId field is the id of therequired fusion table. The columns field is a comma-separeted list of the columns to retrieve.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tableId",
                        "type": "text"
                    },
                    {
                        "name": "columns",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GetRowsWithConditions",
                "description": "Gets all the rows from a fusion table that meet certain conditions. The tableId field isthe id of the required fusion table. The columns field is a comma-separated list of the columns toretrieve. The conditions field specifies what rows to retrieve from the table, for example the rows in whicha particular column value is not null.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tableId",
                        "type": "text"
                    },
                    {
                        "name": "columns",
                        "type": "text"
                    },
                    {
                        "name": "conditions",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "InsertRow",
                "description": "Inserts a row into the specified fusion table. The tableId field is the id of thefusion table. The columns is a comma-separated list of the columns to insert values into. The values field specifies what values to insert into each column.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tableId",
                        "type": "text"
                    },
                    {
                        "name": "columns",
                        "type": "text"
                    },
                    {
                        "name": "values",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SendQuery",
                "description": "Send the query to the Fusiontables server.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.GalleryViewer",
        "name": "GalleryViewer",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "VIEWS",
        "helpString": "A component that shows items in a center-locked, horizontally scrolling list",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Padding",
                "editorType": "integer",
                "defaultValue": "5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ThumbnailHeight",
                "editorType": "integer",
                "defaultValue": "100",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ThumbnailWidth",
                "editorType": "integer",
                "defaultValue": "100",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Images",
                "description": "Adds a series of images to the gallery",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Padding",
                "description": "Sets the spacing (in DIP) between images",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Selection",
                "description": "",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ThumbnailHeight",
                "description": "Sets the height of thumbnail in DIP (Density Independent Pixel)",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ThumbnailWidth",
                "description": "Sets the width of thumbnail in DIP (Density Independent Pixel)",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterPicking",
                "description": "Triggered after an image is selected. It will also report selected image name",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageName",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.GoogleAccountPicker",
        "name": "GoogleAccountPicker",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "GOOGLE",
        "helpString": "Component to pick a Google Account.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/google.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [
            {
                "name": "Picked",
                "description": "Event raised after account has been picked.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "accountName",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Pick",
                "description": "Provide an account picker to pick a Google account.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.GoogleMap",
        "name": "GoogleMap",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "GOOGLE",
        "helpString": "Visible component that show information on Google map.",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/google\/google-maps\/",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/gMap.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "CameraAngle",
                "editorType": "non_negative_float",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CameraRotation",
                "editorType": "non_negative_float",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CameraZoomLevel",
                "editorType": "non_negative_float",
                "defaultValue": "15",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Theme",
                "editorType": "google_map_theme",
                "defaultValue": "standard",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "CameraAngle",
                "description": "Move the map's camera to the specified tilt, the angle (in degrees) from the nadir (directly facing the Earth). Must be a value between 0.0 and 90.0",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CameraRotation",
                "description": "Move the map's camera to the specified bearing, the direction that the camera is pointing in (in degrees clockwise from north).",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CameraZoomLevel",
                "description": "Move the map's camera to the specified zoom level.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "CompassEnabled",
                "description": "Indicates whether the compass widget is currently enabled in the map ui",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "MapCameraChangedListenerEnabled",
                "description": "Indicates if the map camera's position changed listener is currently enabled",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "MapClickListenerEnabled",
                "description": "Indicates if the mapClick event listener is currently enabled",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "MapLongClickListenerEnabled",
                "description": "Indicates if the map longClick listener is currently enabled",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "MapType",
                "description": "Indicates the current map type",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "MyLocationEnabled",
                "description": "Indicates whether my locaiton UI control is currently enabled for the Google map.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "RotateEnabled",
                "description": "Indicates whether the capability to rotate a map on the ui is currently enabled",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ScrollEnabled",
                "description": "Indicates whether the capability to scroll a map on the ui is currently enabled",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Style",
                "description": "Sets the style of the map from json. Just use a text field and paste there the json data. Create a custom map style at https:\/\/mapstyle.withgoogle.com\/. Set the theme to \"standard\" to clear the style json.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Theme",
                "description": "Sets the theme of the map. The choices are \"standard\"(default), \"silver\", \"retro\", \"dark\", \"night\", \"aubergine\", \"vintage\", \"kodular\" and \"roads-only\".",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ZoomControlEnabled",
                "description": "Indicates whether the zoom widget on the map ui is currently enabled",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ZoomGestureEnabled",
                "description": "Indicates whether the zoom gesture is currently enabled",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "CameraPositionChanged",
                "description": "Called after the camera position of a map has changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "lat",
                        "type": "number"
                    },
                    {
                        "name": "lng",
                        "type": "number"
                    },
                    {
                        "name": "bearing",
                        "type": "number"
                    },
                    {
                        "name": "tilt",
                        "type": "number"
                    },
                    {
                        "name": "zoom",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "FinishedDraggingCircle",
                "description": "Event been raised after the action of moving a draggable circle is finished. Possible a user drag the center of the circle or drag the radius marker of the circle",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "centerLat",
                        "type": "number"
                    },
                    {
                        "name": "centerLng",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "InfoWindowClicked",
                "description": "When the marker's infowindow is clicked, returning marker's id",
                "deprecated": "false",
                "params": [
                    {
                        "name": "markerId",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "MapIsReady",
                "description": "Indicates that the map has been rendered and ready for adding markers or changing other settings. Please add or updating markers within this event",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnLocationChanged",
                "description": "Triggers this event when user location has changed. Only works when EnableMylocation is set to true",
                "deprecated": "false",
                "params": [
                    {
                        "name": "lat",
                        "type": "number"
                    },
                    {
                        "name": "lng",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "OnMapClick",
                "description": "Called when the user makes a tap gesture on the map",
                "deprecated": "false",
                "params": [
                    {
                        "name": "lat",
                        "type": "number"
                    },
                    {
                        "name": "lng",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "OnMapLongClick",
                "description": "Called when the user makes a long-press gesture on the map",
                "deprecated": "false",
                "params": [
                    {
                        "name": "lat",
                        "type": "number"
                    },
                    {
                        "name": "lng",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "OnMarkerClick",
                "description": "When a marker is clicked",
                "deprecated": "false",
                "params": [
                    {
                        "name": "markerId",
                        "type": "number"
                    },
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "OnMarkerDrag",
                "description": "When a marker is been dragged",
                "deprecated": "false",
                "params": [
                    {
                        "name": "markerId",
                        "type": "number"
                    },
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "OnMarkerDragEnd",
                "description": "When the user drags a marker and finish the action, returning marker's id and it's latest position",
                "deprecated": "false",
                "params": [
                    {
                        "name": "markerId",
                        "type": "number"
                    },
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "OnMarkerDragStart",
                "description": "When a marker starts been dragged",
                "deprecated": "false",
                "params": [
                    {
                        "name": "markerId",
                        "type": "number"
                    },
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "OnPointOfInterestClick",
                "description": "This event will be invoked when a user clicks on a point of interest. This can be a shop, coffee-bar or else.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "lat",
                        "type": "number"
                    },
                    {
                        "name": "lng",
                        "type": "number"
                    },
                    {
                        "name": "placeName",
                        "type": "text"
                    },
                    {
                        "name": "placeID",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "AddCircle",
                "description": "Create a circle overlay on the map UI with specified latitude and longitude for center. \"hue\" (min 0, max 360) and \"alpha\" (min 0, max 255) are used to set color and transparency level of the circle, \"strokeWidth\" and \"strokeColor\" are for the perimeter of the circle. Returning a unique id of the circle for future reference to events raised by moving this circle. If the circle isset to be draggable, two default markers will appear on the map: one in the center of the circle, another on the perimeter.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "lat",
                        "type": "number"
                    },
                    {
                        "name": "lng",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "alpha",
                        "type": "number"
                    },
                    {
                        "name": "hue",
                        "type": "number"
                    },
                    {
                        "name": "strokeWidth",
                        "type": "number"
                    },
                    {
                        "name": "strokeColor",
                        "type": "number"
                    },
                    {
                        "name": "draggable",
                        "type": "boolean"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "AddMarkers",
                "description": "Adding a list of YailLists for markers. The representation of a maker in the inner YailList is composed of: lat(double) [required], long(double) [required], Color, title(String), snippet(String), draggable(boolean). Return a list of unqiue ids for the added  markers. Note that the markers ids are not meant to persist after  the app is closed, but for temporary references to the markers within the program only. Return an empty list if any error happen in the input",
                "deprecated": "false",
                "params": [
                    {
                        "name": "markers",
                        "type": "list"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "AddMarkersFromJson",
                "description": "Adding a list of markers that are represented as JsonArray.  The inner JsonObject represents a markerand is composed of name-value pairs. Name fields for a marker are: \"lat\" (type double) [required], \"lng\"(type double) [required], \"color\"(type int)[in hue value ranging from 0~360], \"title\"(type String), \"snippet\"(type String), \"draggable\"(type boolean)",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonString",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AddMarkersHue",
                "description": "Adding a list of YailList for markers. The inner YailList represents a marker and is composed of lat(Double) [required], long(Double) [required], color(int)[in hue value ranging from 0-360], title(String), snippet(String), draggable(boolean). Return a list of unique ids for the markers that are added",
                "deprecated": "false",
                "params": [
                    {
                        "name": "markers",
                        "type": "list"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "AddPolyline",
                "description": "This block will return the unique id of the new added polyline. Create a new polyline on the map. Use for 'points' a list of lat, lng pairs. A integer for the 'width' (in pixel) and a valid color for the 'color' parameter.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "points",
                        "type": "list"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "BoundCamera",
                "description": "Transforms the camera such that the specified latitude\/longitude bounds are centered on screen at the greatest possible zoom level. Need to specify both latitudes and longitudes for both northeast location and southwest location of the bounding box",
                "deprecated": "false",
                "params": [
                    {
                        "name": "neLat",
                        "type": "number"
                    },
                    {
                        "name": "neLng",
                        "type": "number"
                    },
                    {
                        "name": "swLat",
                        "type": "number"
                    },
                    {
                        "name": "swLng",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "EnableCompass",
                "description": "Enables\/disables the compass widget on the map's ui. Call this only after event \"MapIsReady\" is received",
                "deprecated": "false",
                "params": [
                    {
                        "name": "enable",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "EnableMapCameraPosChangeListener",
                "description": "Enable\/Disable to listen to map's camera position changed event",
                "deprecated": "false",
                "params": [
                    {
                        "name": "enabled",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "EnableMapClickListener",
                "description": "Enable\/Disable to listen to map's click event",
                "deprecated": "false",
                "params": [
                    {
                        "name": "enabled",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "EnableMapLongClickListener",
                "description": "Enable\/disable to listen to map's long click event",
                "deprecated": "false",
                "params": [
                    {
                        "name": "enabled",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "EnableMyLocation",
                "description": "Enable or disable my location widget control for Google Map. One can call GetMyLocation() to obtain the current location after enable this.\"",
                "deprecated": "false",
                "params": [
                    {
                        "name": "enabled",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "EnableRotate",
                "description": "Enables\/disables the capability to rotate a map on the ui. Call this only after the event \"MapIsReady\" is received.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "enable",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "EnableScroll",
                "description": "Enables\/disables the capability to scroll a map on the ui. Call this only after the event \"MapIsReady\" is received",
                "deprecated": "false",
                "params": [
                    {
                        "name": "enable",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "EnableZoomControl",
                "description": "Enables\/disables the zoom widget on the map's ui. Call this only after the event \"MapIsReady\" is received",
                "deprecated": "false",
                "params": [
                    {
                        "name": "enable",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "EnableZoomGesture",
                "description": "Enables\/disables zoom gesture on the map ui. Call this only after the event  \"MapIsReady\" is received.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "enable",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "GetAllCircleIDs",
                "description": "Get all circles Ids. A short cut to get all the references for the eixisting circles",
                "deprecated": "false",
                "params": [],
                "returnType": "list"
            },
            {
                "name": "GetAllMarkerID",
                "description": "Get all the existing markers's Ids",
                "deprecated": "false",
                "params": [],
                "returnType": "list"
            },
            {
                "name": "GetAllPolylineIds",
                "description": "This will return a list with all available polyline id's.",
                "deprecated": "false",
                "params": [],
                "returnType": "list"
            },
            {
                "name": "GetMarkers",
                "description": "Add a list of markers composed of name-value pairs. Name fields for a marker are: \"lat\" (type double) [required], \"lng\"(type double) [required], \"color\"(type int)[in hue value ranging from 0~360], \"title\"(type String), \"snippet\"(type String), \"draggable\"(type boolean)",
                "deprecated": "false",
                "params": [],
                "returnType": "list"
            },
            {
                "name": "GetMyLocation",
                "description": "Get current location using Google Map Service. Return a YailList with first item beingthe latitude, the second item being the longitude, and last time being the accuracy of the reading.",
                "deprecated": "false",
                "params": [],
                "returnType": "list"
            },
            {
                "name": "GetPointsFromJson",
                "description": "Convert a JsonArray of points (lat, lng pairs) to a list.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonString",
                        "type": "text"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "MoveCamera",
                "description": "Move the map's camera to the specified position and zoom level",
                "deprecated": "false",
                "params": [
                    {
                        "name": "lat",
                        "type": "number"
                    },
                    {
                        "name": "lng",
                        "type": "number"
                    },
                    {
                        "name": "zoom",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "RemoveCircle",
                "description": "Remove a circle for the map. Returns true if successfully removed, false if the circle does not exist with the specified id",
                "deprecated": "false",
                "params": [
                    {
                        "name": "circleId",
                        "type": "number"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "RemoveMarker",
                "description": "Remove a marker from the map",
                "deprecated": "false",
                "params": [
                    {
                        "name": "markerId",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "RemovePolyline",
                "description": "Use this block to remove a polyline from the map. It will return true if it was successful.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "polylineId",
                        "type": "number"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "SetMapType",
                "description": "Set the layer of Google map. Default layer is \"normal\", other choices including \"hybrid\",\"satellite\", and \"terrain\"",
                "deprecated": "false",
                "params": [
                    {
                        "name": "layerName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UpdateCircle",
                "description": "Set the property of an existing circle. Properties include: \"alpha\"(number, value ranging from 0~255), \"color\" (nimber, hue value ranging 0~360), \"radius\"(number in meters)",
                "deprecated": "false",
                "params": [
                    {
                        "name": "circleId",
                        "type": "number"
                    },
                    {
                        "name": "propertyName",
                        "type": "text"
                    },
                    {
                        "name": "value",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "UpdateMarker",
                "description": "Set the property of a marker, note that the marker has to be added first or else will throw an exception! Properties include: \"color\"(hue value ranging from 0~360), \"title\", \"snippet\", \"draggable\"(give either true or false as the value).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "markerId",
                        "type": "number"
                    },
                    {
                        "name": "propertyName",
                        "type": "text"
                    },
                    {
                        "name": "value",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "UpdatePolyline",
                "description": "Update any polyline with the given id. You can change the property values for 'width' (in pixel), 'color' or 'points (a list of lat, lng pairs).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "polylineId",
                        "type": "number"
                    },
                    {
                        "name": "propertyName",
                        "type": "text"
                    },
                    {
                        "name": "points",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "addOverlay",
                "description": "Add overlay.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "addPolygon",
                "description": "A Polygon is an enclosed shape that can be used to mark areas on the map.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latMin",
                        "type": "number"
                    },
                    {
                        "name": "latMax",
                        "type": "number"
                    },
                    {
                        "name": "lonMin",
                        "type": "number"
                    },
                    {
                        "name": "lonMax",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "addTileOverlay",
                "description": "Add title overlay.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "clearAllPolygons",
                "description": "Clear all Polygons.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "drawCentralSquare",
                "description": "Draw central square.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "getBoundingBox",
                "description": "Get bounding box.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitudeInDegrees",
                        "type": "number"
                    },
                    {
                        "name": "longitudeInDegrees",
                        "type": "number"
                    },
                    {
                        "name": "halfSideInKm",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "getMapCenter",
                "description": "Get map center. If a error occures the output will be '-999'.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "getZoomLevelInfo",
                "description": "Deprecated block! Don't use this anymore. Use instead 'Camera Zoom Level'.",
                "deprecated": "true",
                "params": [],
                "returnType": "number"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.GoogleShortlink",
        "name": "GoogleShortlink",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "INTERNAL",
        "helpString": "A component to create Short links with the Google API",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/google.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ApiKey",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ApiKey",
                "description": "Set here your api key to use the service. How to get a api key? Read here more: \"https:\/\/goo.gl\/AFks2R\"",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "DefaultApiKey",
                "description": "Don't use this default api key for your final app's. This default api key is only for development mode. Sponsored by NMD (Next Mobile Development).",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotResponse",
                "description": "Event to detect when a link was converted.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    },
                    {
                        "name": "responseContent",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "ShortToUrl",
                "description": "Convert a short link from google into a normal link. Powerd by Google.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UrlToShort",
                "description": "Convert a link into a short link. Powerd by Google.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.GoogleSpreadsheet",
        "name": "GoogleSpreadsheet",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "DEPRECATED",
        "helpString": "Component for GoogleSpreadsheet",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/spreadsheet.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ApiEndpoint",
                "editorType": "string",
                "defaultValue": "Enter the Cloudstitch API Endpoint",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SheetName",
                "editorType": "string",
                "defaultValue": "Enter Spreadsheet name",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ApiEndpoint",
                "description": "The Cloudstitch API endpoint.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SheetName",
                "description": "The Google spreadsheet name",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterAction",
                "description": "Triggered after an actions such as storing data has occurred.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "wasSuccess",
                        "type": "boolean"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "action",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "GetCellData",
                "description": "For the given columnName and rowNumber, retrieves the spreadsheet cell data",
                "deprecated": "false",
                "params": [
                    {
                        "name": "columnName",
                        "type": "text"
                    },
                    {
                        "name": "rowNumber",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetColumnData",
                "description": "Retrieves all data for an entire column",
                "deprecated": "false",
                "params": [
                    {
                        "name": "columnName",
                        "type": "text"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "GetRowData",
                "description": "Retrieves data for a specific row number",
                "deprecated": "false",
                "params": [
                    {
                        "name": "rowNumber",
                        "type": "number"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "GetSpreadsheetData",
                "description": "For the given ApiEndpoint and Spreadsheet, retrieves all data from the spreadsheet.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StoreData",
                "description": "Stores data into spreadsheet. dataToStore must be in json format. Will trigger AfterAction",
                "deprecated": "false",
                "params": [
                    {
                        "name": "dataToStore",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.GravitySensor",
        "name": "GravitySensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "<p>Non-visible component that measures the force of gravity in m\/s2 that is applied to a device on all three physical axes (x, y, z).<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/gravitysensor.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Available",
                "description": "",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MaximumRange",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "XAccel",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "YAccel",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ZAccel",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GravityChanged",
                "description": "Indicates that the gravity sensor data has changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "xAccel",
                        "type": "number"
                    },
                    {
                        "name": "yAccel",
                        "type": "number"
                    },
                    {
                        "name": "zAccel",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.GridView",
        "name": "GridView",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "LAYOUT_GENERAL",
        "helpString": "Component for GridView",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/gridview.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Columns",
                "editorType": "integer",
                "defaultValue": "4",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ElementsFromString",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Padding",
                "editorType": "integer",
                "defaultValue": "2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StretchEnabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ThumbnailHeight",
                "editorType": "integer",
                "defaultValue": "155",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ThumbnailWidth",
                "editorType": "integer",
                "defaultValue": "155",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Specifies the background color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Columns",
                "description": "Returns number of columns for this component",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Elements",
                "description": "List of elements to be used for GridView",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ElementsFromString",
                "description": "The elements specified as a string with the items separated by commas such as: Cheese,Fruit,Bacon,Radish. Each word before the comma will be an element in the list.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "Sets the font size of the elements",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Padding",
                "description": "The amount of padding (in DIP) on left, top, right, bottom",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Selection",
                "description": "Set the selection to the GridView",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StretchEnabled",
                "description": "Control how items are stretched to fill their space",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Specifies the checkbox's text color as an alpha-red-green-blue\n integer.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ThumbnailHeight",
                "description": "Sets the thumbnail height in DIP (Density Independent Pixels)",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ThumbnailWidth",
                "description": "Sets the thumbnail width in DIP (Density Independent Pixels)",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterPicking",
                "description": "Triggers after an item from this component has been selected",
                "deprecated": "false",
                "params": [
                    {
                        "name": "item",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "ClearGridView",
                "description": "Clears the items from the component",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.GyroscopeSensor",
        "name": "GyroscopeSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "<p>Non-visible component that can measure angular velocity in three dimensions in units of degrees per second.<\/p><p>In order to function, the component must have its <code>Enabled<\/code> property set to True, and the device must have a gyroscope sensor.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/gyroscopesensor.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Available",
                "description": "Indicates whether a gyroscope sensor is available.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "Enabled property getter method.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "XAngularVelocity",
                "description": "The angular velocity around the X axis, in degrees per second.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "YAngularVelocity",
                "description": "The angular velocity around the Y axis, in degrees per second.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ZAngularVelocity",
                "description": "The angular velocity around the Z axis, in degrees per second.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GyroscopeChanged",
                "description": "Indicates that the gyroscope sensor data has changed. The timestamp parameter is the time in nanoseconds at which the event occurred.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "xAngularVelocity",
                        "type": "number"
                    },
                    {
                        "name": "yAngularVelocity",
                        "type": "number"
                    },
                    {
                        "name": "zAngularVelocity",
                        "type": "number"
                    },
                    {
                        "name": "timestamp",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.HorizontalArrangement",
        "name": "HorizontalArrangement",
        "external": "false",
        "version": "9",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "LAYOUT_GENERAL",
        "helpString": "<p>A formatting element in which to place components that should be displayed from left to right.  If you wish to have components displayed one over another, use <code>VerticalArrangement<\/code> instead.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AlignHorizontal",
                "editorType": "horizontal_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AlignVertical",
                "editorType": "vertical_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Clickable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Scrollbar",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UseRoundCard",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "isCard",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AlignHorizontal",
                "description": "A number that encodes how contents of the arrangement are aligned  horizontally. The choices are: 1 = left aligned, 2 = right aligned,  3 = horizontally centered.  Alignment has no effect if the arrangement's width is automatic.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AlignVertical",
                "description": "A number that encodes how the contents of the arrangement are aligned  vertically. The choices are: 1 = aligned at the top, 2 = vertically centered, 3 = aligned at the bottom.  Alignment has no effect if the arrangement's height is automatic.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BackgroundColor",
                "description": "Returns the component's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Clickable",
                "description": "Set the component clickable or not clickable.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FullClickable",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "true"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Returns the path of the button's image.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Scrollbar",
                "description": "Whether to display a scrollbar",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UseRoundCard",
                "description": "If enabled the card layout will have then round corners.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "isCard",
                "description": "If enabled the arrangement will be convert to a card view. You can detect clicks on it with the \"Click\" event.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "Click listener event.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "Long click listener event.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.HorizontalScrollArrangement",
        "name": "HorizontalScrollArrangement",
        "external": "false",
        "version": "7",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "LAYOUT_GENERAL",
        "helpString": "<p>A formatting element in which to place components that should be displayed from left to right.  If you wish to have components displayed one over another, use <code>VerticalArrangement<\/code> instead.<\/p><p>This version is scrollable.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/horizontalScroll.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AlignHorizontal",
                "editorType": "horizontal_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AlignVertical",
                "editorType": "vertical_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Clickable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Scrollbar",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UseRoundCard",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "isCard",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AlignHorizontal",
                "description": "A number that encodes how contents of the arrangement are aligned  horizontally. The choices are: 1 = left aligned, 2 = right aligned,  3 = horizontally centered.  Alignment has no effect if the arrangement's width is automatic.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AlignVertical",
                "description": "A number that encodes how the contents of the arrangement are aligned  vertically. The choices are: 1 = aligned at the top, 2 = vertically centered, 3 = aligned at the bottom.  Alignment has no effect if the arrangement's height is automatic.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BackgroundColor",
                "description": "Returns the component's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Clickable",
                "description": "Set the component clickable or not clickable.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FullClickable",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "true"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Returns the path of the button's image.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Scrollbar",
                "description": "Whether to display a scrollbar",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UseRoundCard",
                "description": "If enabled the card layout will have then round corners.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "isCard",
                "description": "If enabled the arrangement will be convert to a card view. You can detect clicks on it with the \"Click\" event.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "Click listener event.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "Long click listener event.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.Hygrometer",
        "name": "Hygrometer",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "A sensor component that can measure the relative ambient air humidity. Most Android devices do not have this sensor.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/hygrometer.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RefreshTime",
                "editorType": "non_negative_integer",
                "defaultValue": "1000",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Available",
                "description": "Specifies whether or not the device has an ambient air pressure sensor.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If enabled, then device will listen for changes.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Humidity",
                "description": "The relative ambient humidity as a percentage, if the sensor is available and enabled.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "RefreshTime",
                "description": "The requested minimum time in milliseconds between changes in air pressure being reported. Android is not guaranteed to honor the request. Setting this property has no effect on pre-Gingerbread devices.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "HumidityChanged",
                "description": "Called when a change is detected in the ambient air humidity (expressed as a percentage).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "humidity",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.Image",
        "name": "Image",
        "external": "false",
        "version": "5",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "Component for displaying images.  The picture to display, and other aspects of the Image's appearance, can be specified in the Designer or in the Blocks Editor. You can also add gif images.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Clickable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Picture",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ScalePictureToFit",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Animation",
                "description": "This is a limited form of animation that can attach a small number of motion types to images.  The allowable motions are ScrollRightSlow, ScrollRight, ScrollRightFast, ScrollLeftSlow, ScrollLeft, ScrollLeftFast, and Stop",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Clickable",
                "description": "Set the component clickable or not clickable.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ImageTintColor",
                "description": "Change the image tint color. You can use too alpha values if you want with the 'make a list' block. Do not forget to use the 'make color' block together with the 'make a list' block.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Picture",
                "description": "",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "The angle at which the image picture appears rotated. This rotation does not appear on the designer screen, only on the device.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ScalePictureToFit",
                "description": "Specifies whether the image should be resized to match the size of the ImageView.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Scaling",
                "description": "This property determines how the picture scales according to the Height or Width of the Image. Scale proportionally (0) preserves the picture aspect ratio. Scale to fit (1) matches the Image area, even if the aspect ratio changes.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "Event to detect that a user has done a simple \"Click\".",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "Event to detect that a user has done a simple \"Long Click\".",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "ClearImageTintColor",
                "description": "Clear the image tint color.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.ImageEditor",
        "name": "ImageEditor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ANIMATION",
        "helpString": "Non-visible component that allows users to edit images.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/imageEditor.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "SaveNewImageAs",
                "editorType": "string",
                "defaultValue": "NewImage.png",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "SaveNewImageAs",
                "description": "Save the new created image to a folder\/ name of your choice.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "BlurEffect",
                "description": "This methods creates a blur effect.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "scale",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "ColorBoostEffect",
                "description": "Color boost technique is basically based on color filtering, which is to increase the intensity of a single color channel. For example: type = green\/ blue or red; percent = 40%.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "type",
                        "type": "text"
                    },
                    {
                        "name": "percent",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "ColorFilter",
                "description": "Set a color filter to your image. For example: red = 30; green = 40; blue = 20.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "red",
                        "type": "number"
                    },
                    {
                        "name": "green",
                        "type": "number"
                    },
                    {
                        "name": "blue",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "FlipPicture",
                "description": "Flip your image vertical or horizontal. For example: type = 1 (vertical); type = 2 (horizontal).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "type",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GammaEffect",
                "description": "Set a gamma effect to your image. For example: red = 5; green = 10; blue = 20.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "red",
                        "type": "number"
                    },
                    {
                        "name": "green",
                        "type": "number"
                    },
                    {
                        "name": "blue",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GreyscaleEffect",
                "description": "Grayscale is a simple image effect that changes colors to grayscale by default.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "HighlightEffect",
                "description": "Set a highlight effect to your image.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "HueFilter",
                "description": "Change the hue of an image. For example: level = 1 or 2 or 3 or 4 etc.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "level",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "ImageRotation",
                "description": "Rotate the image to the degree you need it. For example: degree = 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "degree",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "InvertEffect",
                "description": "This effect inverts your image.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "MergeTwoImages",
                "description": "This methods creates a new side by side horizontal image.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "leftImage",
                        "type": "text"
                    },
                    {
                        "name": "rightImage",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "Pixelate",
                "description": "This methods creates a pixelate image effect. Use as example as pixelation Amount '1' for a hugh pixel effect and '99' for a almost not visible pixel effect.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "pixelationAmount",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "RoundCorner",
                "description": "Set a round corner to your image. For example: round = 45.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "round",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "ScaleCenterCrop",
                "description": "This methods creates a new scale center crop image.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "SepiaToningEffect",
                "description": "Set a sepia toning effect to your image. For example: depth = 20; red = 10; green = 20; blue = 25.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "depth",
                        "type": "number"
                    },
                    {
                        "name": "red",
                        "type": "number"
                    },
                    {
                        "name": "green",
                        "type": "number"
                    },
                    {
                        "name": "blue",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "SetBrightness",
                "description": "Change the brightness of your image. For example: value = 50 (maximum = 255=100% brightness).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "value",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "SetColorDepth",
                "description": "Change the color depth of an image as you wish. For example: bitOffset = 32 (bit) or bitOffset = 16 (bit).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "bitOffset",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "SetContrast",
                "description": "This changes the contrast of your image. For example: value = 1.0 means normal picture contrast. Below 1.0 like as example 0.7 means dark contrast, above 1.0 as example 1.5 means light contrast.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "value",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "ShadingFilter",
                "description": "Make a new image with a shading filter. For example: shadingColor = green(rgb value).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "shadingColor",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "TintColorEffect",
                "description": "That's a pretty new other cool effect. It changes the tint color of your image. For example: degree = 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "degree",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "WatermarkEffect",
                "description": "Set a watermark effect to an image and change the positon\/size or color of the text. For example: text = hello; textSize = 25; textColor = red(rgb value); textAlphaValue = 255 (255= 100% visible,127.5= 50% visible, 0= 0% visible); pointX = 50; pointY = 100; text underline(boolean) = true or false.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageA",
                        "type": "text"
                    },
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "textSize",
                        "type": "number"
                    },
                    {
                        "name": "textColor",
                        "type": "number"
                    },
                    {
                        "name": "textUnderline",
                        "type": "boolean"
                    },
                    {
                        "name": "textAlphaValue",
                        "type": "number"
                    },
                    {
                        "name": "pointX",
                        "type": "number"
                    },
                    {
                        "name": "pointY",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "isLandscape",
                "description": "Return true if image is in landscape format, else return false.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "image",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "isPortrait",
                "description": "Return true if image is in portrait format, else return false.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "image",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "isSquare",
                "description": "Return true if image is in square format (means as high as wide or as wide as high), else return false.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "image",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.ImagePicker",
        "name": "ImagePicker",
        "external": "false",
        "version": "11",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "A special-purpose button. When the user taps an image picker, the device's image gallery appears, and the user can choose an image.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BorderShadow",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HTMLFormat",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Shape",
                "editorType": "button_shape",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowFeedback",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TouchColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Returns the button's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BorderShadow",
                "description": "Returns true if the button have a outside border shadow on click.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If set, user can tap check box to cause action.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "If set, button text is displayed in bold.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "If set, button text is displayed in italics.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "Point size for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "Font family for button text.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HTMLFormat",
                "description": "If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Image to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Selection",
                "description": "Path to the file containing the image that was selected.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Shape",
                "description": "Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ShowFeedback",
                "description": "Specifies if a visual feedback should be shown for a button that as an image as background.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Text to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Left, center, or right.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Color for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TouchColor",
                "description": "Set the buttons touch color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterPicking",
                "description": "Event to be raised after the picker activity returns its\n result and the properties have been filled in.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "selection",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "BeforePicking",
                "description": "Event to raise when the button of the component is clicked or the list is shown\n using the Open block.  This event occurs before the list of items is displayed, and\n can be used to prepare the list before it is shown.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GotFocus",
                "description": "Indicates the cursor moved over the button so it is now possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Indicates the cursor moved away from the button so it is now no longer possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchDown",
                "description": "Indicates that the button was pressed down.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchUp",
                "description": "Indicates that a button has been released.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ButtonClick",
                "description": "Perform a button click as function.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Open",
                "description": "Opens the picker, as though the user clicked on it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromFontAwesome",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/fontawesome.com\/cheatsheet Use as example for a heart icon just 'f004'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromMaterialFont",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/material.io\/icons",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromPicture",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "picture",
                        "type": "text"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.ImageSprite",
        "name": "ImageSprite",
        "external": "false",
        "version": "6",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ANIMATION",
        "helpString": "<p>A 'sprite' that can be placed on a <code>Canvas<\/code>, where it can react to touches and drags, interact with other sprites (<code>Ball<\/code>s and other <code>ImageSprite<\/code>s) and the edge of the Canvas, and move according to its property values.  Its appearance is that of the image specified in its <code>Picture<\/code> property (unless its <code>Visible<\/code> property is <code>False<\/code>).<\/p> <p>To have an <code>ImageSprite<\/code> move 10 pixels to the left every 1000 milliseconds (one second), for example, you would set the <code>Speed<\/code> property to 10 [pixels], the <code>Interval<\/code> property to 1000 [milliseconds], the <code>Heading<\/code> property to 180 [degrees], and the <code>Enabled<\/code> property to <code>True<\/code>.  A sprite whose <code>Rotates<\/code> property is <code>True<\/code> will rotate its image as the sprite's <code>Heading<\/code> changes.  Checking for collisions with a rotated sprite currently checks the sprite's unrotated position so that collision checking will be inaccurate for tall narrow or short wide sprites that are rotated.  Any of the sprite properties can be changed at any time under program control.<\/p> ",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Heading",
                "editorType": "float",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Interval",
                "editorType": "non_negative_integer",
                "defaultValue": "100",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Picture",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Rotates",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Speed",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "X",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Y",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Z",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Enabled",
                "description": "Controls whether the ImageSprite moves and can be interacted with through collisions, dragging, touching, and flinging.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Heading",
                "description": "Sets heading in which sprite should move.  In addition to changing the\n local variables",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "The height of the ImageSprite in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Interval",
                "description": "The interval in milliseconds at which the ImageSprite's position is updated.  For example, if the interval is 50 and the speed is 10, then every 50 milliseconds the sprite will move 10 pixels in the heading direction.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Picture",
                "description": "The picture that determines the ImageSprite's appearance.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Rotates",
                "description": "Whether the image should rotate to match the ImageSprite's heading. The sprite rotates around its centerpoint.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Speed",
                "description": "The number of pixels that the ImageSprite should move every interval, if enabled.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Whether the ImageSprite is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "The width of the ImageSprite in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "X",
                "description": "The horizontal coordinate of the left edge of the ImageSprite, increasing as the ImageSprite moves right.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Y",
                "description": "The vertical coordinate of the top edge of the ImageSprite, increasing as the ImageSprite moves down.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Z",
                "description": "Sets the layer of the sprite, indicating whether it will appear in\n front of or behind other sprites.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "CollidedWith",
                "description": "Event handler called when two enabled sprites (Balls or ImageSprites)\n collide. Note that checking for collisions with a rotated ImageSprite currently\n checks against its unrotated position. Therefore, collision\n checking will be inaccurate for tall narrow or short wide sprites that are\n rotated.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "other",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "Dragged",
                "description": "Event handler called when a ImageSprite is dragged. On all calls, the starting coordinates are where the screen was first touched, and the \"current\" coordinates describe the endpoint of the current line segment. On the first call within a given drag, the \"previous\" coordinates are the same as the starting coordinates; subsequently, they are the \"current\" coordinates from the prior call. Note that the ImageSprite won't actually move anywhere in response to the Dragged event unless MoveTo is explicitly called. For smooth movement, each of its coordinates should be set to the sum of its initial value and the difference between its current and previous values.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "startX",
                        "type": "number"
                    },
                    {
                        "name": "startY",
                        "type": "number"
                    },
                    {
                        "name": "prevX",
                        "type": "number"
                    },
                    {
                        "name": "prevY",
                        "type": "number"
                    },
                    {
                        "name": "currentX",
                        "type": "number"
                    },
                    {
                        "name": "currentY",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "EdgeReached",
                "description": "Event handler called when the ImageSprite reaches an edge of the screen. If Bounce is then called with that edge, the ImageSprite will appear to bounce off of the edge it reached. Edge here is represented as an integer that indicates one of eight directions north (1), northeast (2), east (3), southeast (4), south (-1), southwest (-2), west (-3), and northwest (-4).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "edge",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Flung",
                "description": "Event handler called when a fling gesture (quick swipe) is made on an enabled ImageSprite. This provides the x and y coordinates of the start of the fling (relative to the upper left of the canvas), the speed (pixels per millisecond), the heading (0-360 degrees), and the x and y velocity components of the fling's vector.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "speed",
                        "type": "number"
                    },
                    {
                        "name": "heading",
                        "type": "number"
                    },
                    {
                        "name": "xvel",
                        "type": "number"
                    },
                    {
                        "name": "yvel",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "NoLongerCollidingWith",
                "description": "Event handler called when a pair of sprites (Balls and ImageSprites) are no longer colliding.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "other",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "TouchDown",
                "description": "Event handler called when the user begins touching an enabled ImageSprite (placing their finger on a ImageSprite and leaving it there). This provides the x and y coordinates of the touch, relative to the upper left of the canvas.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "TouchUp",
                "description": "Event handler called when the user stops touching an enabled ImageSprite (lifting their finger after a TouchDown event). This provides the x and y coordinates of the touch, relative to the upper left of the canvas.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Touched",
                "description": "Event handler called when the user touches an enabled ImageSprite and then immediately lifts their finger. The provided x and y coordinates are relative to the upper left of the canvas.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Bounce",
                "description": "Makes the ImageSprite bounce, as if off a wall. For normal bouncing, the edge argument should be the one returned by EdgeReached.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "edge",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "CollidingWith",
                "description": "Indicates whether a collision has been registered between this ImageSprite and the passed sprite (Ball or ImageSprite).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "other",
                        "type": "component"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "MoveIntoBounds",
                "description": "Moves the ImageSprite back in bounds if part of it extends out of bounds, having no effect otherwise. If the ImageSprite is too wide to fit on the canvas, this aligns the left side of the ImageSprite with the left side of the canvas. If the ImageSprite is too tall to fit on the canvas, this aligns the top side of the ImageSprite with the top side of the canvas.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "MoveTo",
                "description": "Moves the ImageSprite so that its left top corner is at the specfied x and y coordinates.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "PointInDirection",
                "description": "Sets the heading of the ImageSprite toward the point with the coordinates (x, y).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "PointTowards",
                "description": "Turns the ImageSprite to point towards a designated target sprite (Ball or ImageSprite). The new heading will be parallel to the line joining the centerpoints of the two sprites.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "target",
                        "type": "component"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularAdColonyInterstitialAd",
        "name": "KodularAdColonyInterstitialAd",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "...in ode messages file",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/adcolony-interstitial\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/adcolony.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AppID",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ZoneID",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AppID",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "UserConsent",
                "description": "If set to true the user allowed the ad network to show personalized ads. You only need to request the consent from european users.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ZoneID",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdExpiring",
                "description": "Called when the ad is expiring. You should load a new ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdFailedToLoad",
                "description": "Called when an ad request failed to load. The message will display the error code and error message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorCode",
                        "type": "number"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdLoaded",
                "description": "Called when an ad is received.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdOpened",
                "description": "Called when an ad was opened.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Error",
                "description": "Called when an ad request failed. The message will display the reason for why the ad failed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "error",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "IsEuropeanUser",
                "description": "Returns true if the current app user is located in europe. If true you must ask the user as example in a dialog if he give his consent for personalized ads.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "LoadAd",
                "description": "Loads a new ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowAd",
                "description": "Shows an ad to the user.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularAppLovin",
        "name": "KodularAppLovin",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "...in ode messages file",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/app-lovin\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/applovin.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "SdkKey",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TestMode",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "SdkKey",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TestMode",
                "description": "If you want to test the component then that this property to true. Then you will receive test ads.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UserConsent",
                "description": "If set to true the user allowed the ad network to show personalized ads. You only need to request the consent from european users.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdClosed",
                "description": "Called when an ad was closed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdFailedToLoad",
                "description": "Called when an ad request failed to load. The message will display the error code and error message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorCode",
                        "type": "number"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdLoaded",
                "description": "Called when an ad is received.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdOpened",
                "description": "Called when an ad was opened.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdStarted",
                "description": "Called when an ad was started.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Error",
                "description": "Called when an ad request failed. The message will display the reason for why the ad failed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorCode",
                        "type": "number"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "IsEuropeanUser",
                "description": "Returns true if the current app user is located in europe. If true you must ask the user as example in a dialog if he give his consent for personalized ads.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "LoadAd",
                "description": "Loads a new ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowAd",
                "description": "Shows an ad to the user.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularBottomNavigation",
        "name": "KodularBottomNavigation",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "NAVIGATION",
        "helpString": "A component that create a Bottom Navigation Menu in the app",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/bottomNavigation.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SelectedColor",
                "editorType": "color",
                "defaultValue": "&HFF3F51B5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UnselectedColor",
                "editorType": "color",
                "defaultValue": "&HFF6E6E6E",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Set the background color of the Bottom Navigation Menu",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SelectedColor",
                "description": "Set the color of the selected item of the Bottom Navigation Menu",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UnselectedColor",
                "description": "Set the color of the unselected items of the Bottom Navigation Menu",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "ItemSelected",
                "description": "Event triggers when an item was selected.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "AddItem",
                "description": "Add an item to the bottom menu",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "image",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "RemoveAllItems",
                "description": "Remove all items from the bottom menu",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RemoveItem",
                "description": "Remove an item from the bottom menu",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SelectItem",
                "description": "Select an item from the bottom menu",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "UpdateItem",
                "description": "Update an item of the bottom menu",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "image",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularChameleonAd",
        "name": "KodularChameleonAd",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "INTERNAL",
        "helpString": "write in ode",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/chameleon.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AppId",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TestMode",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UserId",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AppId",
                "description": "Input here your own Chameleon Ad 'App ID' (request one at my.kodular.io).",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "TestMode",
                "description": "If set to true, the device will receive test ads. This option must be set before you load a new ad.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UserId",
                "description": "Input here your own Chameleon Ad 'User ID' (get yours at my.kodular.io).",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdClosed",
                "description": "Event triggered when ads are closed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdFailedToLoad",
                "description": "Event triggered when ads failed to load. Here is the list with all possible error codes (int) and error messages (string): '1' = The before loaded ad was not finished. It is not allowed to load a new one. The first must be in finished loading process. '2' = Ad failed to load. No internet connection available. '3' = Please enter a valid chameleon 'App ID'. '4' = Please enter a valid chameleon 'User ID'. '5' = UNKNOWN_WEB_VIEW_ERROR. '6' = There was an error validating the SSL Certificate.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorMessage",
                        "type": "text"
                    },
                    {
                        "name": "errorCode",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "AdFailedToShow",
                "description": "Event triggered when ads failed to show. Here is the list with all possible error codes (int) and error messages (string): '1' = UNKNOWN_ERROR_ON_SHOW_AD. '2' = The ad must first be loaded. After loading finished the ad can be shown.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorMessage",
                        "type": "text"
                    },
                    {
                        "name": "errorCode",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "AdLoaded",
                "description": "Event triggered when ads are loaded.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "LoadAd",
                "description": "Load a new interstitial chameleon ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowAd",
                "description": "Show a chameleon interstitial ad after it was loaded.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularChatView",
        "name": "KodularChatView",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "VIEWS",
        "helpString": "write in ode",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/chatView.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AutomaticScrollDown",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Clickable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DoubleTap",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MessagesCornerRadius",
                "editorType": "non_negative_float",
                "defaultValue": "5",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "MessagesFontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ReceiversBackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ReceiversMessageColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ReceiversTitleColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ReceiversTypefaceMessage",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ReceiversTypefaceMessageImport",
                "editorType": "asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ReceiversTypefaceTitle",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ReceiversTypefaceTitleImport",
                "editorType": "asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Scrollbar",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SendersBackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF8BC24A",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SendersMessageColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SendersTitleColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SendersTypefaceMessage",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SendersTypefaceMessageImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "SendersTypefaceTitle",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SendersTypefaceTitleImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Swipeable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TimestampCornerRadius",
                "editorType": "non_negative_float",
                "defaultValue": "5",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TimestampFontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TimestampTextColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TitleFontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AutomaticScrollDown",
                "description": "If set to true the chat view will scroll down when a new message was send.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BackgroundColor",
                "description": "Specifies the component's background color. The background color will not be visible if an Image is being displayed.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Clickable",
                "description": "Set the component clickable or not clickable.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "DoubleTap",
                "description": "Set the component enabled for double taps or not.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Specifies the path of the component's image.  If there is both an Image and a BackgroundColor, only the Image will be visible.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MessagesCornerRadius",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "MessagesFontSize",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ReceiversBackgroundColor",
                "description": "Specifies the background color for receiver's messages.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ReceiversMessageColor",
                "description": "Specifies the color for receivers's messages.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ReceiversTitleColor",
                "description": "Specifies the color for receivers's title messages.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ReceiversTypefaceMessage",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ReceiversTypefaceMessageImport",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ReceiversTypefaceTitle",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ReceiversTypefaceTitleImport",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Scrollbar",
                "description": "Whether to display a scrollbar.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SendersBackgroundColor",
                "description": "Specifies the background color for sender's messages.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SendersMessageColor",
                "description": "Specifies the color for sender's messages.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SendersTitleColor",
                "description": "Specifies the color for sender's title messages.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SendersTypefaceMessage",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SendersTypefaceMessageImport",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SendersTypefaceTitle",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SendersTypefaceTitleImport",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Swipeable",
                "description": "If set to true you can swipe with your fingers through views.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TimestampCornerRadius",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TimestampFontSize",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TimestampTextColor",
                "description": "Specifies the color for the timestamp.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitleFontSize",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "Click listener event.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "userImage",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "timestamp",
                        "type": "text"
                    },
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "sendAsSender",
                        "type": "boolean"
                    },
                    {
                        "name": "imagePath",
                        "type": "text"
                    },
                    {
                        "name": "withImage",
                        "type": "boolean"
                    },
                    {
                        "name": "filePath",
                        "type": "text"
                    },
                    {
                        "name": "fileThumbnail",
                        "type": "text"
                    },
                    {
                        "name": "withFile",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "DoubleTapClick",
                "description": "Double tap click listener event.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "userImage",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "timestamp",
                        "type": "text"
                    },
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "sendAsSender",
                        "type": "boolean"
                    },
                    {
                        "name": "imagePath",
                        "type": "text"
                    },
                    {
                        "name": "withImage",
                        "type": "boolean"
                    },
                    {
                        "name": "filePath",
                        "type": "text"
                    },
                    {
                        "name": "fileThumbnail",
                        "type": "text"
                    },
                    {
                        "name": "withFile",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "LongClick",
                "description": "Long click listener event.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "userImage",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "timestamp",
                        "type": "text"
                    },
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "sendAsSender",
                        "type": "boolean"
                    },
                    {
                        "name": "imagePath",
                        "type": "text"
                    },
                    {
                        "name": "withImage",
                        "type": "boolean"
                    },
                    {
                        "name": "filePath",
                        "type": "text"
                    },
                    {
                        "name": "fileThumbnail",
                        "type": "text"
                    },
                    {
                        "name": "withFile",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "Swipe",
                "description": "Swipe listener event. The direction value returns '1' for right-to-left swipes, '2' for left-to-right swipes '3' for bottom-to-top swipes and '4' for top-to-bottom swipes",
                "deprecated": "false",
                "params": [
                    {
                        "name": "direction",
                        "type": "number"
                    },
                    {
                        "name": "userImage",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "timestamp",
                        "type": "text"
                    },
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "sendAsSender",
                        "type": "boolean"
                    },
                    {
                        "name": "imagePath",
                        "type": "text"
                    },
                    {
                        "name": "withImage",
                        "type": "boolean"
                    },
                    {
                        "name": "filePath",
                        "type": "text"
                    },
                    {
                        "name": "fileThumbnail",
                        "type": "text"
                    },
                    {
                        "name": "withFile",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "UserImageClick",
                "description": "Click listener event for the user image.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "userImage",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "AddComponentMessage",
                "description": "Add a new simple component message into the chat view. If you do not want a user image or title or message or timestamp, then let the field empty. Make sure that the component is VISIBLE on the screen when you try to add it here. It will be then removed automatic from the screen and only visible again in the chat view.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "userImage",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "timestamp",
                        "type": "text"
                    },
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "addAsSender",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "AddDateTimestamp",
                "description": "Add a new simple date timestamp into the chat view. You NEED to write a date, else this block will do nothing. This means the field 'date' can NOT be empty. Timestamp messages are not clickable.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "date",
                        "type": "text"
                    },
                    {
                        "name": "textColor",
                        "type": "number"
                    },
                    {
                        "name": "backgroundColor",
                        "type": "number"
                    },
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "AddFileMessage",
                "description": "Add a new simple file message into the chat view. If you do not want a user image or title or message or timestamp, then let the field empty.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "userImage",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "filePath",
                        "type": "text"
                    },
                    {
                        "name": "fileThumbnail",
                        "type": "text"
                    },
                    {
                        "name": "timestamp",
                        "type": "text"
                    },
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "addAsSender",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "AddImageMessage",
                "description": "Add a new simple image message into the chat view. If you do not want a user image or title or message or timestamp, then let the field empty.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "userImage",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "image",
                        "type": "text"
                    },
                    {
                        "name": "timestamp",
                        "type": "text"
                    },
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "addAsSender",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "AddMessage",
                "description": "Add a new simple message into the chat view. If you do not want a user image or title or message or timestamp, then let the field empty.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "userImage",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "timestamp",
                        "type": "text"
                    },
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "addAsSender",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "ClearChatView",
                "description": "Removes all messages and timestamps from the chat view.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "CountDateTimestamp",
                "description": "Returns the number of all date timestamps. Normal messages are not included.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "CountMessages",
                "description": "Returns the number of all messages. 'Date Timestamp' messages are not included.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "GetLastUsedId",
                "description": "Returns the last used id.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "RemoveMessage",
                "description": "Remove a message or timestamp from the chat view.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ScrollTo",
                "description": "Scroll to a specific message in the chat view with the given id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "UpdateMessageBackgroundColor",
                "description": "Update the background color of a chat view message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "backgroundColor",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "UpdateMessageContent",
                "description": "Update the message content of a chat view message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "textColor",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "UpdateTimestampContent",
                "description": "Update the timestamp content of a chat view message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "textColor",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "UpdateTitleContent",
                "description": "Update the title content of a chat view message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "textColor",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "UpdateUserImage",
                "description": "Update the user image of a chat view message. The image can only be updated if there was before a old image.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "userImage",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularColorUtilities",
        "name": "KodularColorUtilities",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "write in ode",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/colorUtilities.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [],
        "methods": [
            {
                "name": "ConvertHexToInt",
                "description": "Convert a hex color to a integer color. The result is returned as integer.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "hexColor",
                        "type": "text"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "ConvertIntToHex",
                "description": "Convert a integer color to a hex color. The result is returned as string.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "color",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetLuminance",
                "description": "Returns the luminance of a color as a float between 0.0 and 1.0. The result is returned as double.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "color",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "IsDarkColor",
                "description": "Returns true if the color is dark, else it returns false, means the color is light. The result is returned as boolean.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "color",
                        "type": "number"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "SetAlphaValue",
                "description": "Set a alpha value to a color. The result is returned as integer.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "color",
                        "type": "number"
                    },
                    {
                        "name": "alpha",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularDonate",
        "name": "KodularDonate",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MONETIZATION_GENERAL",
        "helpString": "...in ode messages file",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/donate\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/kodulardonate.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularDynamicCardView",
        "name": "KodularDynamicCardView",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "DYNAMIC",
        "helpString": "A component to create dynamic cardviews in Arrangements.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/cardview.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ContentPaddingBottom",
                "editorType": "non_negative_integer",
                "defaultValue": "8",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ContentPaddingLeft",
                "editorType": "non_negative_integer",
                "defaultValue": "8",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ContentPaddingRight",
                "editorType": "non_negative_integer",
                "defaultValue": "8",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ContentPaddingTop",
                "editorType": "non_negative_integer",
                "defaultValue": "8",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CornerRadius",
                "editorType": "non_negative_float",
                "defaultValue": "2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Elevation",
                "editorType": "non_negative_float",
                "defaultValue": "2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FullClickable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeWidth",
                "editorType": "non_negative_float",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TouchColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Specifies the cards's background color.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ContentPaddingBottom",
                "description": "Sets the bottom padding between the card's edges and the children of card view.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ContentPaddingLeft",
                "description": "Sets the left padding between the card's edges and the children of card view.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ContentPaddingRight",
                "description": "Sets the right padding between the card's edges and the children of card view.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ContentPaddingTop",
                "description": "Sets the top padding between the card's edges and the children of card view.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "CornerRadius",
                "description": "The corner radius from the card view.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Elevation",
                "description": "The card view elevation value.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "FullClickable",
                "description": "If set to true, the card will consume all click events. This means if you have added as example buttons into the card, then will the card consume the touch event on the button. And this means that the button would not be clickable, but only the entire card.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "StrokeColor",
                "description": "The stroke width for the card view.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "StrokeWidth",
                "description": "The stroke width for the card view.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "TouchColor",
                "description": "Set the touch color also known as ripple color to a card view component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "Event to detect that a user has done a simple click on a card view component with the specific id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "LongClick",
                "description": "Event to detect that a user has done a simple long click on a card view component with the specific id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "TouchDown",
                "description": "Event to detect that a user has done a simple touch down on a card view component with the specific id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "TouchUp",
                "description": "Event to detect that a user has done a simple touch up on a card view component with the specific id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "AddComponentToCardView",
                "description": "Add a component into the card view component with the given id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "arrangement",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "ContentPadding",
                "description": "Set the content padding of a card view component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "contentPaddingLeft",
                        "type": "number"
                    },
                    {
                        "name": "contentPaddingTop",
                        "type": "number"
                    },
                    {
                        "name": "contentPaddingRight",
                        "type": "number"
                    },
                    {
                        "name": "contentPaddingBottom",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "CreateCardView",
                "description": "Create a new card view component dynamically. Use for width\/height '-1' for wrap content or '-2' for fill parent.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "arrangement",
                        "type": "component"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "DeleteCardView",
                "description": "Remove a card view component with the given id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GetBackgroundColor",
                "description": "Get the background color of a card view component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetCardViewById",
                "description": "Returns the card view referenced by its id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "component"
            },
            {
                "name": "GetCornerRadius",
                "description": "Get the corner radius of a card view component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetElevation",
                "description": "Get the elevation of a card view component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetHeight",
                "description": "Get the height of a card view component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetWidth",
                "description": "Get the width of a card view component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "SetBackgroundColor",
                "description": "Set the background color of a card view component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "argb",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetCornerRadius",
                "description": "Set the corner radius of a card view component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetElevation",
                "description": "Set the elevation of a card view component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "value",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetHeight",
                "description": "Set the height of a card view component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetWidth",
                "description": "Set the width of a card view component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "StrokeColor",
                "description": "Set the stroke color to a card view component with the specific id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "StrokeWidth",
                "description": "Set the stroke width to a card view component with the specific id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularDynamicImage",
        "name": "KodularDynamicImage",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "DYNAMIC",
        "helpString": "A component to create dynamic image in Arrangements.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/image.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [],
        "methods": [
            {
                "name": "CreateImage",
                "description": "Create a new image component dynamically. Use for width\/height '-1' for wrap content or '-2' for fill parent.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "arrangement",
                        "type": "component"
                    },
                    {
                        "name": "path",
                        "type": "text"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "DeleteImage",
                "description": "Remove a image component with the given id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GetHeight",
                "description": "Get the Height of a image component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetImageById",
                "description": "Returns the image referenced by its id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "component"
            },
            {
                "name": "GetWidth",
                "description": "Get the Width of a image component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "RotationAngle",
                "description": "Specifies the angle of a image component with the given id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "rotationAngle",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ScalePictureToFit",
                "description": "Specifies whether a image component with the given id should be resized to match the size of the ImageView.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "scale",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "SetHeight",
                "description": "Update the Height of a image component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetWidth",
                "description": "Update the Width of a image component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "UpdateImage",
                "description": "Update a image component with the given id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "path",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularDynamicSpace",
        "name": "KodularDynamicSpace",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "DYNAMIC",
        "helpString": "A component to create dynamic space in Arrangements.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/space.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [],
        "methods": [
            {
                "name": "CreateSpace",
                "description": "Create a new space component dynamically. Use for width\/height '-1' for wrap content or '-2' for fill parent.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "arrangement",
                        "type": "component"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "DeleteSpace",
                "description": "Remove a space component with the given id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GetHeight",
                "description": "Get the Height of a space component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetSpaceById",
                "description": "Returns the space referenced by its id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "component"
            },
            {
                "name": "GetWidth",
                "description": "Get the Width of a space component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "SetHeight",
                "description": "Update the Height of a space component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetWidth",
                "description": "Update the Width of a space component.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularEncrypt",
        "name": "KodularEncrypt",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "Component which performs several encrypt\/decrypt functions",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/storage\/cryptography\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/encrypt.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AES128Key",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AES256Key",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BCryptSaltSize",
                "editorType": "integer",
                "defaultValue": "10",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PBKDF2HashByteSize",
                "editorType": "integer",
                "defaultValue": "18",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PBKDF2Iterations",
                "editorType": "integer",
                "defaultValue": "64000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PBKDF2SaltByteSize",
                "editorType": "integer",
                "defaultValue": "24",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TripleDESKey",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AES128Key",
                "description": "Set the AES-128 Key",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AES256Key",
                "description": "Set the AES-256 Key",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BCryptSaltSize",
                "description": "Set the BCrypt Salt Size",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PBKDF2HashByteSize",
                "description": "Set the PBKDF2 Hash Byte Size",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PBKDF2Iterations",
                "description": "Set the PBKDF2 number of Iterations",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PBKDF2SaltByteSize",
                "description": "Set the PBKDF2 Salt Byte Size",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TripleDESKey",
                "description": "Set the TripleDES Key",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "AES128Decode",
                "description": "Decodes the given hash using the given key through AES-128. If any exception occurs, returns empty string.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "aes128Hash",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "AES128Encode",
                "description": "Encodes the given string using the given key through AES-128. If any exception occurs, returns empty string.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "AES128GenKey",
                "description": "Generates a secure random AES 128 key",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "AES256Decode",
                "description": "Decodes the given hash using the given key through AES-256. If there are any exceptions, returns empty string",
                "deprecated": "false",
                "params": [
                    {
                        "name": "aes256Hash",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "AES256Encode",
                "description": "Encodes the given string using the given key through AES-256. If there are any exceptions, returns empty string",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "AES256GenKey",
                "description": "Generates a secure random AES 256 key",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "BCryptCreateHash",
                "description": "Generates a hash using BCrypt",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    },
                    {
                        "name": "salt",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "BCryptGenerateSalt",
                "description": "Generates a salt usable for hashing with BCrypt",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "BCryptVerifyPassword",
                "description": "Verifies if the input password is the same one as the correct hashed password using BCrypt algorithm",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    },
                    {
                        "name": "correctHash",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "Base64Decode",
                "description": "Decodes the given hash using Base64",
                "deprecated": "false",
                "params": [
                    {
                        "name": "base64Hash",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "Base64Encode",
                "description": "Encodes the given string using Base64",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "Enigma",
                "description": "Encrypts or decrypts the given string simulating an Enigma machine. Rotors can go from 1 to 8, but they cannot be repeated. Reflector can be B, C or 0 if none. Plugboard is a list with sub-list of two items containing a character each one, which replace the first character with the second one.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    },
                    {
                        "name": "rotor1",
                        "type": "number"
                    },
                    {
                        "name": "rotor2",
                        "type": "number"
                    },
                    {
                        "name": "rotor3",
                        "type": "number"
                    },
                    {
                        "name": "reflector",
                        "type": "text"
                    },
                    {
                        "name": "plugboard",
                        "type": "list"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "MD5CreateHash",
                "description": "Generates a MD5 hash",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "PBKDF2CreateHash",
                "description": "Generates a hash using PBKDF2",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "PBKDF2VerifyPassword",
                "description": "Verifies if the input password is the same one as the correct hashed password using PBKDF2 algorithm",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    },
                    {
                        "name": "correctHash",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "SHA1",
                "description": "Generates a hashed SHA-1 string",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "SHA224",
                "description": "Generates a hashed SHA-224 string",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "SHA256",
                "description": "Generates a hashed SHA-256 string",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "SHA384",
                "description": "Generates a hashed SHA-384 string",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "SHA512",
                "description": "Generates a hashed SHA-512 string",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "TripleDESDecode",
                "description": "Decodes the given hash using the given key through TripleDES",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tripleDESHash",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "TripleDESEncode",
                "description": "Encodes the given string using the given key through TripleDES",
                "deprecated": "false",
                "params": [
                    {
                        "name": "inputText",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularFacebookRewardedVideoAd",
        "name": "KodularFacebookRewardedVideoAd",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "...in ode messages file",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/facebook-rewarded\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/facebook.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "CommissionRewardedAdsNetwork",
                "editorType": "commission_rewarded_ads_network",
                "defaultValue": "unity",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PlacementID",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "CommissionRewardedAdsNetwork",
                "description": "Sets the ad network used to take the commission.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "PlacementID",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdClosed",
                "description": "Called when the user is about to return to the application after clicking on an ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdFailedToLoad",
                "description": "Called when an ad request failed to load. The message will display the error code and error message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorCode",
                        "type": "number"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdLoaded",
                "description": "Called when an ad is received.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdOpened",
                "description": "Called when an ad was opened.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdVideoCompleted",
                "description": "Called when an video ad was completed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdVideoStarted",
                "description": "Called when an video ad started to show content.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Error",
                "description": "Called when an ad request failed. message will display the reason for why the ad failed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "error",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "LoadAd",
                "description": "Loads a new ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowAd",
                "description": "Shows an ad to the user.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularFirebaseAuthentication",
        "name": "KodularFirebaseAuthentication",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "GOOGLE",
        "helpString": "Firebase Authentication",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/firebaseDB.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [
            {
                "name": "CurrentUserFailed",
                "description": "Triggers when the current Firebase User failed to load",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "CurrentUserSuccess",
                "description": "Triggers when the current Firebase User was successful loaded",
                "deprecated": "false",
                "params": [
                    {
                        "name": "userID",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "email",
                        "type": "text"
                    },
                    {
                        "name": "phoneNumber",
                        "type": "text"
                    },
                    {
                        "name": "profilePicture",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GotIdToken",
                "description": "Triggers when the 'Get Id Token' got a result. If there was a error it returns a empty text.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "idToken",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "LoginFailed",
                "description": "Triggers when the Firebase Login failed",
                "deprecated": "false",
                "params": [
                    {
                        "name": "provider",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "LoginSuccess",
                "description": "Triggers when the Firebase Login was successful",
                "deprecated": "false",
                "params": [
                    {
                        "name": "provider",
                        "type": "text"
                    },
                    {
                        "name": "userID",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "email",
                        "type": "text"
                    },
                    {
                        "name": "phoneNumber",
                        "type": "text"
                    },
                    {
                        "name": "profilePicture",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ResetPasswordEmailDone",
                "description": "Triggers when the 'Send Reset Password Email' got a result. Returns true if the reset email was send.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "SignUpFailed",
                "description": "Triggers when the Firebase Sign Up failed",
                "deprecated": "false",
                "params": [
                    {
                        "name": "provider",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SignUpSuccess",
                "description": "Triggers when the Firebase Sign Up failed",
                "deprecated": "false",
                "params": [
                    {
                        "name": "provider",
                        "type": "text"
                    },
                    {
                        "name": "userID",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "email",
                        "type": "text"
                    },
                    {
                        "name": "phoneNumber",
                        "type": "text"
                    },
                    {
                        "name": "profilePicture",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UserUpdateFailed",
                "description": "Triggers when updating of the user failed",
                "deprecated": "false",
                "params": [
                    {
                        "name": "type",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UserUpdateSuccess",
                "description": "Triggers when updating of the user was successful",
                "deprecated": "false",
                "params": [
                    {
                        "name": "type",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "EmailPasswordLogin",
                "description": "Try to let the user sign in with Email and Password",
                "deprecated": "false",
                "params": [
                    {
                        "name": "email",
                        "type": "text"
                    },
                    {
                        "name": "password",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "EmailPasswordSignUp",
                "description": "Create a new user by Email and Password",
                "deprecated": "false",
                "params": [
                    {
                        "name": "email",
                        "type": "text"
                    },
                    {
                        "name": "password",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GetCurrentUser",
                "description": "Try to get the user that is signed in",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GetIdToken",
                "description": "Get the id token from the current user.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GoogleSignIn",
                "description": "Try to let the user sign in with Google",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "IsSignedIn",
                "description": "Check if the user is signed in",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "Logout",
                "description": "Log the current user out",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "PhoneNumberSignIn",
                "description": "Try to let the user sign in with a Phone Number",
                "deprecated": "false",
                "params": [
                    {
                        "name": "phoneNumber",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SendResetPasswordEmail",
                "description": "Get the id token from the current user.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "email",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UpdateEmail",
                "description": "Try to update the email of the current user (The user must have been recently signed in)",
                "deprecated": "false",
                "params": [
                    {
                        "name": "email",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UpdatePhoneNumber",
                "description": "Try to update the phone number of the current user (The user must have been recently signed in)",
                "deprecated": "false",
                "params": [
                    {
                        "name": "phoneNumber",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UpdateProfile",
                "description": "Try to update the profile of the current user (The user must have been recently signed in)",
                "deprecated": "false",
                "params": [
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "profilePicture",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "VerifyEmail",
                "description": "Verify the Email",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "VerifyPhoneCode",
                "description": "Verify the SMS code",
                "deprecated": "false",
                "params": [
                    {
                        "name": "code",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularFirebaseRemoteConfig",
        "name": "KodularFirebaseRemoteConfig",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "GOOGLE",
        "helpString": "Firebase Remote Config",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/firebaseDB.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "CacheExpiration",
                "editorType": "non_negative_integer",
                "defaultValue": "43200",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "CacheExpiration",
                "description": "Time how long the data keeps on the device in ms",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "FetchFailed",
                "description": "Triggers when the fetch failed",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "FetchSuccess",
                "description": "Triggers when the fetch was successful",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "Fetch",
                "description": "Fetches parameter values for your app",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GetBoolean",
                "description": "Gets a boolean value corresponding to the specified key",
                "deprecated": "false",
                "params": [
                    {
                        "name": "key",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "GetNumber",
                "description": "Gets a number value corresponding to the specified key",
                "deprecated": "false",
                "params": [
                    {
                        "name": "key",
                        "type": "text"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetText",
                "description": "Gets a text value corresponding to the specified key",
                "deprecated": "false",
                "params": [
                    {
                        "name": "key",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularFirebaseStorage",
        "name": "KodularFirebaseStorage",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "GOOGLE",
        "helpString": "Firebase Storage",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/firebaseDB.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [
            {
                "name": "DeleteFailed",
                "description": "Triggers when the file could not be deleted",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "DeleteSuccess",
                "description": "Triggers when the file was successfully deleted",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "DownloadFailed",
                "description": "Triggers when the file could not be downloaded",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "DownloadSuccess",
                "description": "Triggers when the file was successfully downloaded",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    },
                    {
                        "name": "downloadedFile",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UploadFailed",
                "description": "Triggers when the file could not be uploaded",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UploadProgress",
                "description": "Triggers when the file upload progress changed",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    },
                    {
                        "name": "uploadPath",
                        "type": "text"
                    },
                    {
                        "name": "transferredBytes",
                        "type": "number"
                    },
                    {
                        "name": "totalBytes",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "UploadSuccess",
                "description": "Triggers when the file was successfully uploaded",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    },
                    {
                        "name": "uploadPath",
                        "type": "text"
                    },
                    {
                        "name": "downloadUrl",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "DeleteFile",
                "description": "Try to delete a file from Firebase Storage",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "DownloadFile",
                "description": "Try to download a file from Firebase Storage",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    },
                    {
                        "name": "toFolder",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GetBucket",
                "description": "Get the name of the Storage Bucket",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "PauseDownloads",
                "description": "Pause all the active downloads",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "PauseUploads",
                "description": "Pause all the active uploads",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ResumeDownloads",
                "description": "Resume all the active downloads",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ResumeUploads",
                "description": "Resume all the active uploads",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "UploadFile",
                "description": "Try to upload a file to Firebase Storage",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    },
                    {
                        "name": "uploadPath",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularGooglePlayGames",
        "name": "KodularGooglePlayGames",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "GOOGLE",
        "helpString": "Google Play Games component to connect to the Google Play Games services",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/gameClient.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "GooglePlayGamesAppId",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "GooglePlayGamesAppId",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotPlayer",
                "description": "Got player info",
                "deprecated": "false",
                "params": [
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "id",
                        "type": "text"
                    },
                    {
                        "name": "level",
                        "type": "number"
                    },
                    {
                        "name": "xp",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SignedIn",
                "description": "User signed in.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "SignedOut",
                "description": "User signed out.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "GetPlayer",
                "description": "Get the current player",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "IncrementAchievement",
                "description": "Increment an achievement.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "achievementId",
                        "type": "text"
                    },
                    {
                        "name": "by",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "IsSignedIn",
                "description": "Is user signed in?",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "ShowAchievements",
                "description": "Shows Achievement.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowLeaderboard",
                "description": "Shows Leaderboard.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "leaderboardId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SignIn",
                "description": "Sign in the user. useLastAccount, true: use the last signed in account if possible, false: open a screen to choose for an account",
                "deprecated": "false",
                "params": [
                    {
                        "name": "useLastAccount",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "SignOut",
                "description": "Sign out the user.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SubmitScore",
                "description": "Submits user score to leaderboard.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "leaderboardId",
                        "type": "text"
                    },
                    {
                        "name": "score",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "UnlockAchievement",
                "description": "Unlock an achievement.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "achievementId",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularImageUtilities",
        "name": "KodularImageUtilities",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "write in ode",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/imageUtilities.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [],
        "methods": [
            {
                "name": "LoadImageAsync",
                "description": "Load a new image from the given path to any component. You can load also images from the internet. Supported components: Image, Buttons, Layouts, Canvas.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "path",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularInAppUpdate",
        "name": "KodularInAppUpdate",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EXPERIMENTAL",
        "helpString": "...in ode messages file",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/in-app-update\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/inappUpdate.png",
        "androidMinSdk": 21,
        "properties": [],
        "blockProperties": [
            {
                "name": "IsUpdateAvailable",
                "description": "Returns true if a update is available for your app.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Initialized",
                "description": "Use this event to check if updates from Google Play Store are available for your app.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "UpdateCanceled",
                "description": "Event will be invoked when the update was canceled.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "UpdateDownloaded",
                "description": "Event will be invoked when the update is downloaded.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "UpdateDownloading",
                "description": "Event will be invoked when the update is still in downloading progress.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "UpdateFailed",
                "description": "Event will be invoked when there was a update fail.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "UpdateInstalled",
                "description": "Event will be invoked when the update is installed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "UpdateInstalling",
                "description": "Event will be invoked when the update is still in installing progress.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "InstallFlexibleUpdateNow",
                "description": "Use this block to install a flexible update after it was downloaded.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StartFlexibleUpdate",
                "description": "Start the process for flexible in-app updates. The update will be done in the background. Your users can still use your app in this time. After the update download is done you must restart your app.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StartImmediateUpdate",
                "description": "Start the process for immediate in-app updates. In this time your app user can NOT use your app. After the update download is done your app will be restarted automatically.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularJSON",
        "name": "KodularJSON",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "This is a non-visible component to edit or get data from JSON",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/json.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [
            {
                "name": "ErrorOccurred",
                "description": "Triggers when there is a JSON error.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "functionName",
                        "type": "text"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "AddBooleanToJSONArray",
                "description": "Add True or False to a JSON Array.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonArray",
                        "type": "text"
                    },
                    {
                        "name": "trueOrFalse",
                        "type": "boolean"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "AddBooleanToJSONObject",
                "description": "Add True or False to a JSON Object.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonObject",
                        "type": "text"
                    },
                    {
                        "name": "trueOrFalse",
                        "type": "boolean"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "AddJSONArrayToJSONArray",
                "description": "Add a JSON Array to a JSON Array.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonArray",
                        "type": "text"
                    },
                    {
                        "name": "newJsonArray",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "AddJSONObjectToJSONArray",
                "description": "Add a JSON Object to a JSON Array.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonArray",
                        "type": "text"
                    },
                    {
                        "name": "jsonObject",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "AddJSONObjectToJSONObject",
                "description": "Add a JSON Object to a JSON Object.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonObject",
                        "type": "text"
                    },
                    {
                        "name": "newJsonObject",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "AddNumberToJSONArray",
                "description": "Add a Number to a JSON Array.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonArray",
                        "type": "text"
                    },
                    {
                        "name": "number",
                        "type": "number"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "AddNumberToJSONObject",
                "description": "Add a Number to a JSON Object.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonObject",
                        "type": "text"
                    },
                    {
                        "name": "number",
                        "type": "number"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "AddTextToJSONArray",
                "description": "Add Text to a JSON Array.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonArray",
                        "type": "text"
                    },
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "AddTextToJSONObject",
                "description": "Add Text to a JSON Object.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonObject",
                        "type": "text"
                    },
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetBooleanFromJSONAray",
                "description": "Get a True or False from a JSON Array.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonArray",
                        "type": "text"
                    },
                    {
                        "name": "index",
                        "type": "number"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "boolean"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "GetBooleanFromJSONObject",
                "description": "Get a true or false value from a JSON Object.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonObject",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "boolean"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "GetJSONArrayFromJSONObject",
                "description": "Get a JSON Array from a JSON Object.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonObject",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetJSONObjectFromJSONAray",
                "description": "Get a JSON Object from a JSON Array.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonArray",
                        "type": "text"
                    },
                    {
                        "name": "index",
                        "type": "number"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetJSONObjectFromJSONObject",
                "description": "Get a JSON Object from a JSON Object.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonObject",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetLengthOfJSONArray",
                "description": "Get the length of a JSON Array.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonArray",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetNumberFromJSONAray",
                "description": "Get a Number from a JSON Array.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonArray",
                        "type": "text"
                    },
                    {
                        "name": "index",
                        "type": "number"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetNumberFromJSONObject",
                "description": "Get a number from a JSON Object.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonObject",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetTextFromJSONAray",
                "description": "Get Text from a JSON Array.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonArray",
                        "type": "text"
                    },
                    {
                        "name": "index",
                        "type": "number"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetTextFromJSONObject",
                "description": "Get text from a JSON object.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonObject",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "defaultVaue",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularKeyguardManager",
        "name": "KodularKeyguardManager",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "Component for KodularKeyguardManager",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/keyguardManager.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Description",
                "editorType": "string",
                "defaultValue": "Confirm your screen lock.",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Title",
                "editorType": "string",
                "defaultValue": "Unlock",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Description",
                "description": "Returns the keyguard manager description text.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Title",
                "description": "Returns the keyguard manager title text.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "isDeviceLocked",
                "description": "Returns whether the device is currently locked and requires a PIN, pattern or password to unlock. Works only for devices with Android 5.1+",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "isDeviceSecure",
                "description": "Returns whether the device is secured with a PIN, pattern or password. Works only for devices with Android 6+",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "isKeyguardLocked",
                "description": "Return whether the keyguard is currently locked.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "isKeyguardSecure",
                "description": "Return whether the keyguard is secured by a PIN, pattern or password or a SIM card is currently locked.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "OnAuthenticationRequest",
                "description": "Event to detect a authentication request was called.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "isAuthenticated",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "OnDissmissKeyguardRequest",
                "description": "Event to detect a dissmiss request keyguard was called.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "succeeded",
                        "type": "boolean"
                    },
                    {
                        "name": "cancelled",
                        "type": "boolean"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "RequestDismissKeyguard",
                "description": "If the device is currently locked, requests the Keyguard to be dismissed. Works only for devices with Android 8+",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowAuthenticationScreen",
                "description": "Create the Confirm Credentials screen. You can customize the title and description. Or we will provide a generic one for you if you leave it empty. Works only for devices with Android 5+",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowWhenLocked",
                "description": "Specifies whether an Activity should be shown on top of the lock screen whenever the lockscreen is up and the activity is resumed. Normally an activity will be transitioned to the stopped state if it is started while the lockscreen is up, but with this flag set the activity will remain in the resumed state visible on-top of the lock screen.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "enabled",
                        "type": "boolean"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularLottie",
        "name": "KodularLottie",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ANIMATION",
        "helpString": "A new component ",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/makeroidLottie.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AnimationSpeed",
                "editorType": "float",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Clickable",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "LoopAnimation",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Source",
                "editorType": "asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AnimationSpeed",
                "description": "Set the speed of the animation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Clickable",
                "description": "Set the component clickable or not clickable.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "LoopAnimation",
                "description": "Set to true if you want to loop the animation.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Source",
                "description": "Set the file or url of the file you want to load.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AnimationEnd",
                "description": "Triggers when the animation ends.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AnimationRepeat",
                "description": "Triggers when the animation repeated.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AnimationStart",
                "description": "Triggers when the animation starts.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Click",
                "description": "Triggers when the components was clicked.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "Triggers when the components was long clicked.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "EndFrame",
                "description": "Set the frame where you want the animation to end.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "frame",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GetCurrentFrame",
                "description": "Get the frame where the animation is now.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "GetFrameCount",
                "description": "Get the count of frames in the animation.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "IsAnimating",
                "description": "Check if the Lottie component is animating.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "PauseAnimation",
                "description": "Pause the animation on the Lottie component.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ResumeAnimation",
                "description": "Resume the animation on the Lottie component.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetCurrentFrame",
                "description": "Set the frame where you want the animation to be now.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "frame",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "StartAnimation",
                "description": "Start the animation on the Lottie component.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StartFrame",
                "description": "Set the frame where you want the animation to start.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "frame",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularPollfish",
        "name": "KodularPollfish",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MONETIZATION_GENERAL",
        "helpString": "Pollfish component",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/pollfish.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "APIKey",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SurveyMode",
                "editorType": "pollfish_options",
                "defaultValue": "Single Survey",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TestMode",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "APIKey",
                "description": "Returns value of Pollfish API Key",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SurveyMode",
                "description": "Survey mode. It can either be Single Survey or Survey Offerwall",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "TestMode",
                "description": "If you want to test the component then set this property to true and before publishing to Play Store, set back to false.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "PollfishUserNotEligible",
                "description": "Called when Pollfish user was not eligible.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "PollfishUserRejected",
                "description": "Called when Pollfish user was rejected.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SurveyClosed",
                "description": "Called when Pollfish Survey was closed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SurveyCompleted",
                "description": "Called when Pollfish survey was completed. surveyInfo is CSV list containing CPA, LOI, IR. Empty for Survey Offerwall.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "surveyInfo",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SurveyNotAvailable",
                "description": "Called when Pollfish Survey was not available.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SurveyOpened",
                "description": "Called when Survey was opened.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SurveyReceived",
                "description": "Called when device receives survey and user can be prompted to start the survey.surveyInfo is CSV list containing CPA, LOI, IR. Empty for Survey Offerwall.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "surveyInfo",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "ShowSurvey",
                "description": "Show Survey",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularResourceUtilities",
        "name": "KodularResourceUtilities",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "Component for KodularResourceUtilities",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/resourceUtilities.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ResourceFileFromAsset",
                "editorType": "asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ResourceFileFromPath",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ResourceFileFromAsset",
                "description": "Set the file which is used as resource file. The file must be stored in the assets folder.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ResourceFileFromPath",
                "description": "Set the file which is used as resource file. The file path must be valid to any file you want to use. The path can be too a link to a url.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "GetStringContentByName",
                "description": "This block is deprecated and will be removed soon. Use instead 'Get String From Asset' or 'Get String From Path'.",
                "deprecated": "true",
                "params": [
                    {
                        "name": "resourceName",
                        "type": "text"
                    },
                    {
                        "name": "ifResourceNotFoundUse",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetStringFromAsset",
                "description": "Get the text from a asset resource file. Make sure you uploaded a file at 'Resource File From Asset' property.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "resourceName",
                        "type": "text"
                    },
                    {
                        "name": "ifResourceNotFoundUse",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetStringFromPath",
                "description": "Get the text from a path resource file. Make sure you added a file path at 'Resource File From Path' property. The path can be too a link to a url.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "resourceName",
                        "type": "text"
                    },
                    {
                        "name": "ifResourceNotFoundUse",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularStartAppBanner",
        "name": "KodularStartAppBanner",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "Component for displaying banner ads from StartApp",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/kodularStartAppBanner.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AppId",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AppId",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdClicked",
                "description": "Indicates that the user has clicked on the banner ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdFailedToLoad",
                "description": "Called when an ad request failed to load. The message will display the error code and error message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorCode",
                        "type": "number"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OnFailedToReceiveAd",
                "description": "Called when an ad request failed to load.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OnReceiveAd",
                "description": "Called when an ad request succeeds.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "LoadAd",
                "description": "Load a new StartApp Banner ad.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularStartAppInterstitial",
        "name": "KodularStartAppInterstitial",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "The component for showing Interstial Ads from StartApp",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/startAppInterstitial.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AppId",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AppId",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdClicked",
                "description": "Indicates that the user has clicked on the interstial ad",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdDisplayed",
                "description": "Indicates that an Ad is shown to the user.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdFailedToLoad",
                "description": "Called when an ad request failed to load. The message will display the error code and error message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorCode",
                        "type": "number"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdFailedToShow",
                "description": "Called when an an attempt was made to display the ad, but the ad was not ready to display.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdHidden",
                "description": "Indicates that an Ad which was shown to the user is now hidden.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnFailedToReceiveAd",
                "description": "Called when an ad request failed to load.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OnReceiveAd",
                "description": "Called when an ad request failed to load. The message will display the error code and error message.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "LoadAd",
                "description": "Load a new StartApp Interstitial ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowInterstitialAd",
                "description": "It will show the Interstitial Ad",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularStateProgressBar",
        "name": "KodularStateProgressBar",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "in ode",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/stateProgressBar.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AnimationDuration",
                "editorType": "integer",
                "defaultValue": "250",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AnimationToCurrentState",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CurrentStateDescriptionColor",
                "editorType": "color",
                "defaultValue": "&HFF4CAF50",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CurrentStateNumber",
                "editorType": "state_number",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DescriptionLinesSpacing",
                "editorType": "non_negative_float",
                "defaultValue": "5.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DescriptionTopSpaceIncrementer",
                "editorType": "non_negative_float",
                "defaultValue": "10.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ElementsFromString",
                "editorType": "textArea",
                "defaultValue": "Item 1, Item 2, Item 3, Item 4, Item 5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ForegroundColor",
                "editorType": "color",
                "defaultValue": "&HFF4CAF50",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "JustifyMultilineDescription",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "MaxDescriptionLine",
                "editorType": "integer",
                "defaultValue": "2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MaxStateNumber",
                "editorType": "state_number",
                "defaultValue": "5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StateDescriptionColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StateDescriptionSize",
                "editorType": "non_negative_float",
                "defaultValue": "18.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StateDescriptionTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StateDescriptionTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "StateLineThickness",
                "editorType": "non_negative_float",
                "defaultValue": "10.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StateNumberBackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StateNumberForegroundColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StateNumberIsDescending",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StateNumberTextSize",
                "editorType": "non_negative_float",
                "defaultValue": "20.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StateNumberTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StateNumberTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "StateProgressBarHeight",
                "editorType": "non_negative_float",
                "defaultValue": "40.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AllStatesCompleted",
                "description": "If set to true all states are completed.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AnimationDuration",
                "description": "Set the animation duration in milliseconds. Example:  use 1000 for 1 second.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AnimationToCurrentState",
                "description": "If set to true the states will use a animation when they changed.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BackgroundColor",
                "description": "Change the background color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "CurrentStateDescriptionColor",
                "description": "Change the current state description color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CurrentStateNumber",
                "description": "Set the current state number.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DescriptionLinesSpacing",
                "description": "Set the description lines spacing.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DescriptionTopSpaceIncrementer",
                "description": "Set the description top space incrementer.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ElementsFromString",
                "description": "The State Progress Bar elements specified as a string with the items separated by commas such as: Item 1, Item 2, Item 3, Item 4, Item 5. Each word before the comma will be an element in the list. You can add maximum 5 items.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ForegroundColor",
                "description": "Change the foreground color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "JustifyMultilineDescription",
                "description": "If set to true justify multiline description is enabled.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MaxDescriptionLine",
                "description": "Set the maximum description line.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MaxStateNumber",
                "description": "Set the maximum state number.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "StateDescriptionColor",
                "description": "Change the state description color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StateDescriptionSize",
                "description": "Set the state description size.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StateDescriptionTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "StateDescriptionTypefaceImport",
                "description": "Set a custom font for state description typeface.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "StateLineThickness",
                "description": "Set the state line thickness.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StateNumberBackgroundColor",
                "description": "Change the state number background color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StateNumberForegroundColor",
                "description": "Change the state number foreground color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StateNumberIsDescending",
                "description": "If set to true the state number is in descending order.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StateNumberTextSize",
                "description": "Set the state number text size.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StateNumberTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "StateNumberTypefaceImport",
                "description": "Set a custom font for state number typeface.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "StateProgressBarHeight",
                "description": "Set the state progress bar height.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "ErrorOccurred",
                "description": "Event invoked when a error occurred.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "StateItemClick",
                "description": "Event invoked when a state item was clicked.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "stateNumber",
                        "type": "number"
                    },
                    {
                        "name": "isCurrentState",
                        "type": "boolean"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.KodularUnityAds",
        "name": "KodularUnityAds",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "...in ode messages file",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/unity-ads_ads\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/unityads.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "GameID",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PlacementID",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TestMode",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "GameID",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "PlacementID",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TestMode",
                "description": "If you want to test the component then that this property to true. Then you will receive test ads.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdClosed",
                "description": "Called when an ad was closed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "placementId",
                        "type": "text"
                    },
                    {
                        "name": "wasSkipped",
                        "type": "boolean"
                    },
                    {
                        "name": "wasCompleted",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "AdOpened",
                "description": "Called when an ad was opened.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "placementId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AdStarted",
                "description": "Called when an ad was started.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "placementId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Error",
                "description": "Called when an ad request failed. The message will display the reason for why the ad failed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "error",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "IsReady",
                "description": "Returns true if the ad is finished loading and can now be shown.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "ShowAd",
                "description": "Shows an ad to the user.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Label",
        "name": "Label",
        "external": "false",
        "version": "9",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "A Label displays a piece of text, which is specified through the <code>Text<\/code> property.  Other properties, all of which can be set in the Designer or Blocks Editor, control the appearance and placement of the text.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00FFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Clickable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HTMLFormat",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HasMargins",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Marquee",
                "editorType": "boolean",
                "defaultValue": "false",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "textArea",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Clickable",
                "description": "Set the component clickable or not clickable.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HTMLFormat",
                "description": "If true, then this label will show html text else it will show plain text. Note: Not all HTML is supported.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "HasMargins",
                "description": "Reports whether or not the label appears with margins.  All four margins (left, right, top, bottom) are the same.  This property has no effect in the designer, where labels are always shown with margins.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Marquee",
                "description": "",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the label is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "Event to detect that a user has done a simple \"Click\".",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "Event to detect that a user has done a simple \"Long Click\".",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.LeadBolt",
        "name": "LeadBolt",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "LeadBolt is a non-visible component allowing you to show Network and Rewarded ads.",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/leadbolt\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/leadbolt.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "APIKey",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CommissionInterstitialAdsNetwork",
                "editorType": "commission_interstitial_ads_network",
                "defaultValue": "unity",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CommissionRewardedAdsNetwork",
                "editorType": "commission_rewarded_ads_network",
                "defaultValue": "unity",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "APIKey",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "CommissionInterstitialAdsNetwork",
                "description": "Sets the ad network used to take the commission.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "CommissionRewardedAdsNetwork",
                "description": "Sets the ad network used to take the commission.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "LBCached",
                "description": "Event triggered when ads are loaded",
                "deprecated": "false",
                "params": [
                    {
                        "name": "location",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "LBClicked",
                "description": "Event triggered when ads are clicked",
                "deprecated": "false",
                "params": [
                    {
                        "name": "location",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "LBClosed",
                "description": "Event triggered when ads are closed",
                "deprecated": "false",
                "params": [
                    {
                        "name": "location",
                        "type": "text"
                    },
                    {
                        "name": "reward",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "LBFailed",
                "description": "Event triggered when ads are failed to load",
                "deprecated": "false",
                "params": [
                    {
                        "name": "location",
                        "type": "text"
                    },
                    {
                        "name": "error",
                        "type": "text"
                    },
                    {
                        "name": "isCache",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "LBLoaded",
                "description": "Event triggered when ads are shown",
                "deprecated": "false",
                "params": [
                    {
                        "name": "location",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "IsNetworkAdReady",
                "description": "Use this block after loading an ad to check whether it's ready to show.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "IsRewardedAdReady",
                "description": "Use this block after loading an ad to check whether it's ready to show.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "LoadNetworkAd",
                "description": "Use this block to load a Network ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LoadRewardedAd",
                "description": "Use this block to load a Rewarded Video ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowNetworkAd",
                "description": "Use this block after LoadNetworkAd to show the loaded ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowRewardedAd",
                "description": "Use this block after LoadRewardedAd to show the loaded ad.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.LightSensor",
        "name": "LightSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "Light Sensor to get the Illuminance from the Phone Sensor",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/lightSensor.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Available",
                "description": "Whether Sensor is Available",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "Whether Sensor should be Enabled",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Illuminance",
                "description": "Returns the illuminance in lux. To return values the sensor must be enabled",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "LightChanged",
                "description": "Event that fires when the illuminance is changed",
                "deprecated": "false",
                "params": [
                    {
                        "name": "illuminance",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.LineString",
        "name": "LineString",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MAPS",
        "helpString": "LineString",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Description",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Draggable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableInfobox",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PointsFromString",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeOpacity",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeWidth",
                "editorType": "text",
                "defaultValue": "3",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Title",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Description",
                "description": "The description displayed in the info window that appears when the user clicks on the map feature.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Draggable",
                "description": "The Draggable property is used to set whether or not the user can drag the Marker by long-pressing and then dragging the marker to a new location.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableInfobox",
                "description": "Enable or disable the infobox window display when the user taps the feature.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Points",
                "description": "A list of latitude and longitude pairs that represent the line segments of the polyline.",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PointsFromString",
                "description": "Set the points of the LineString from a specially-coded character string of the form:\n [[longitude1, latitude1], [longitude2, latitude2], ...]\n Note the reversal of latitude and longitude versus how they are typically represented.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "StrokeColor",
                "description": "The paint color used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeOpacity",
                "description": "The opacity of the stroke used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeWidth",
                "description": "The width of the stroke used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Title",
                "description": "The title displayed in the info window that appears when the user clicks on the map feature.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Type",
                "description": "The type of the map feature.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "The user clicked on the feature.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Drag",
                "description": "The user dragged the map feature.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "The user long-pressed on the feature. This event will only trigger if Draggable is false.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StartDrag",
                "description": "The user started a drag operation.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StopDrag",
                "description": "The user stopped a drag operation.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "DistanceToFeature",
                "description": "Compute the distance, in meters, between two map features.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "mapFeature",
                        "type": "component"
                    },
                    {
                        "name": "centroids",
                        "type": "boolean"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "DistanceToPoint",
                "description": "Compute the distance, in meters, between a map feature and a latitude, longitude point.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    },
                    {
                        "name": "centroid",
                        "type": "boolean"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "HideInfobox",
                "description": "Hide the infobox if it is shown. If the infobox is not visible this function has no effect.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowInfobox",
                "description": "Show the infobox for the feature. This will show the infobox even if",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.ListPicker",
        "name": "ListPicker",
        "external": "false",
        "version": "17",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "<p>A button that, when clicked on, displays a list of texts for the user to choose among. The texts can be specified through the Designer or Blocks Editor by setting the <code>ElementsFromString<\/code> property to their string-separated concatenation (for example, <em>choice 1, choice 2, choice 3<\/em>) or by setting the <code>Elements<\/code> property to a List in the Blocks editor.<\/p><p>Setting property ShowFilterBar to true, will make the list searchable.  Other properties affect the appearance of the button (<code>TextAlignment<\/code>, <code>BackgroundColor<\/code>, etc.) and whether it can be clicked on (<code>Enabled<\/code>).<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BorderShadow",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ElementsFromString",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HTMLFormat",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ItemBackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ItemTextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Selection",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Shape",
                "editorType": "button_shape",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowFeedback",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ShowFilterBar",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StatusBarColor",
                "editorType": "color",
                "defaultValue": "&HFF2196F2",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "StatusBarVisible",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Title",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TitleBarColor",
                "editorType": "color",
                "defaultValue": "&HFF03A9F3",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TitleVisible",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TouchColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Returns the button's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BorderShadow",
                "description": "Returns true if the button have a outside border shadow on click.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Elements",
                "description": "Elements property getter method",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ElementsFromString",
                "description": "ElementsFromString property setter method",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If set, user can tap check box to cause action.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "If set, button text is displayed in bold.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "If set, button text is displayed in italics.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "Point size for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "Font family for button text.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HTMLFormat",
                "description": "If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Image to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ItemBackgroundColor",
                "description": "The background color of the ListPicker items.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ItemTextColor",
                "description": "The text color of the ListPicker items.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Selection",
                "description": "The selected item.  When directly changed by the programmer, the SelectionIndex property is also changed to the first item in the ListPicker with the given value.  If the value does not appear, SelectionIndex will be set to 0.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SelectionIndex",
                "description": "The index of the currently selected item, starting at 1.  If no item is selected, the value will be 0.  If an attempt is made to set this to a number less than 1 or greater than the number of items in the ListPicker, SelectionIndex will be set to 0, and Selection will be set to the empty text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Shape",
                "description": "Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ShowFeedback",
                "description": "Specifies if a visual feedback should be shown for a button that as an image as background.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowFilterBar",
                "description": "Returns current state of ShowFilterBar indicating if Search Filter Bar will be displayed on ListPicker or not",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StatusBarColor",
                "description": "The StatusBarColor of the ListPicker.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StatusBarVisible",
                "description": "Whether to show status bar",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Text to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Left, center, or right.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Color for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Title",
                "description": "Optional title displayed at the top of the list of choices.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitleBarColor",
                "description": "The TitleBarColor of the ListPicker.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitleVisible",
                "description": "Whether to show title bar",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TouchColor",
                "description": "Set the buttons touch color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterPicking",
                "description": "Event to be raised after the picker activity returns its\n result and the properties have been filled in.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "selection",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "BeforePicking",
                "description": "Event to raise when the button of the component is clicked or the list is shown\n using the Open block.  This event occurs before the list of items is displayed, and\n can be used to prepare the list before it is shown.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GotFocus",
                "description": "Indicates the cursor moved over the button so it is now possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Indicates the cursor moved away from the button so it is now no longer possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchDown",
                "description": "Indicates that the button was pressed down.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchUp",
                "description": "Indicates that a button has been released.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ButtonClick",
                "description": "Perform a button click as function.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Open",
                "description": "Opens the picker, as though the user clicked on it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromFontAwesome",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/fontawesome.com\/cheatsheet Use as example for a heart icon just 'f004'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromMaterialFont",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/material.io\/icons",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromPicture",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "picture",
                        "type": "text"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.ListView",
        "name": "ListView",
        "external": "false",
        "version": "13",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "LISTVIEWS",
        "helpString": "<p>This is a visible component that displays a list of text elements. <br> The list can be set using the ElementsFromString property or using the Elements block in the blocks editor. <\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/listView.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF607D8B",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DividerColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "DividerHeight",
                "editorType": "integer",
                "defaultValue": "2",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ElementsFromString",
                "editorType": "textArea",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FilterBarHint",
                "editorType": "string",
                "defaultValue": "Search list...",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HTMLFormat",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ItemHeight",
                "editorType": "integer",
                "defaultValue": "10",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "LongClickEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ScrollbarFading",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ScrollingSpeed",
                "editorType": "non_negative_float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SearchHintColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "SearchTextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SearchTextSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Selection",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SelectionColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowFilterBar",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowScrollbar",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowSelectionColor",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextSize",
                "editorType": "non_negative_float",
                "defaultValue": "22",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "The color of the listview background.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "DividerColor",
                "description": "Set the divider color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DividerHeight",
                "description": "Set the divider height.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Elements",
                "description": "List of text elements to show in the ListView.",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ElementsFromString",
                "description": "The ListView elements specified as a string with the items separated by commas such as: Cheese,Fruit,Bacon,Radish. Each word before the comma will be an element in the list.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "FilterBarHint",
                "description": "The hint that will be displayed in the filter bar.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HTMLFormat",
                "description": "Returns true if html is enabled.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Determines the height of the list on the view.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ItemHeight",
                "description": "Set the listview item height. If you write 10, that means the item height will be 10 percent of the device screen height.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "LongClickEnabled",
                "description": "If true long click on items are enabled, else long click is disabled.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ScrollToPosition",
                "description": "Smoothly scroll to the specified position. The listview will scroll such that the indicated position is displayed.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ScrollbarFading",
                "description": "Return the state of ScrollbarFading. If ScrollbarFading is enabled returns true.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ScrollingSpeed",
                "description": "The amount of friction applied to flings.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SearchHintColor",
                "description": "The color of the search hint text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SearchTextColor",
                "description": "The color of the search text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SearchTextSize",
                "description": "The text size of the search text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Selection",
                "description": "Set the selection to the ListView.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SelectionColor",
                "description": "The color of the item when it is selected.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SelectionIndex",
                "description": "The index of the currently selected item, starting at 1.  If no item is selected, the value will be 0.  If an attempt is made to set this to a number less than 1 or greater than the number of items in the ListView, SelectionIndex will be set to 0, and Selection will be set to the empty text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowFilterBar",
                "description": "Sets visibility of ShowFilterBar. True will show the bar, False will hide it.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowScrollbar",
                "description": "Return the state of ShowScrollbar. If ShowScrollbar is enabled returns true.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowSelectionColor",
                "description": "Sets visibility of ShowSelectionColor. True will show the selection color on a selected item, False will hide it.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "The text color of the listview items.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextSize",
                "description": "The text size of the listview items.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Determines the width of the list on the view.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterPicking",
                "description": "Simple event to be raised after the an element has been chosen in the list. The selected element is available in the Selection property.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "Simple event to be raised after the an element has been chosen in the list via long click. The selected element is available in the Selection property.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "ClearList",
                "description": "Remove all the items from the list",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.LocationSensor",
        "name": "LocationSensor",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "Non-visible component providing location information, including longitude, latitude, altitude (if supported by the device), speed (if supported by the device), and address.  This can also perform \"geocoding\", converting a given address (not necessarily the current one) to a latitude (with the <code>LatitudeFromAddress<\/code> method) and a longitude (with the <code>LongitudeFromAddress<\/code> method).<\/p>\n<p>In order to function, the component must have its <code>Enabled<\/code> property set to True, and the device must have location sensing enabled through wireless networks or GPS satellites (if outdoors).<\/p>\nLocation information might not be immediately available when an app starts.  You'll have to wait a short time for a location provider to be found and used, or wait for the OnLocationChanged event",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/locationSensor.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "DistanceInterval",
                "editorType": "sensor_dist_interval",
                "defaultValue": "5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TimeInterval",
                "editorType": "sensor_time_interval",
                "defaultValue": "60000",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Accuracy",
                "description": "The most recent measure of accuracy, in meters.  If no value is available,\n 0 will be returned.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Altitude",
                "description": "The most recently available altitude value, in meters.  If no value is\n available, 0 will be returned.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "AvailableProviders",
                "description": "",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "CurrentAddress",
                "description": "Provides a textual representation of the current address or\n \"No address available\".",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "DistanceInterval",
                "description": "Determines the minimum distance interval, in meters, that the sensor will try to use for sending out location updates. For example, if this is set to 5, then the sensor will fire a LocationChanged event only after 5 meters have been traversed. However, the sensor does not guarantee that an update will be received at exactly the distance interval. It may take more than 5 meters to fire an event, for instance.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "Indicates whether the user has specified that the sensor should\n listen for location changes and raise the corresponding events.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HasAccuracy",
                "description": "Indicates whether information about location accuracy is available.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "HasAltitude",
                "description": "Indicates whether altitude information is available.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "HasLongitudeLatitude",
                "description": "Indicates whether longitude and latitude information is available.  (It is\n always the case that either both or neither are.)",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Latitude",
                "description": "The most recently available latitude value.  If no value is available,\n 0 will be returned.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Longitude",
                "description": "The most recent available longitude value.  If no value is available,\n 0 will be returned.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ProviderLocked",
                "description": "Indicates whether the sensor should allow the developer to\n manually change the provider (GPS, GSM, Wifi, etc.)\n from which location updates are received.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ProviderName",
                "description": "Indicates the source of the location information.  If there is no provider, the\n string \"NO PROVIDER\" is returned.  This is useful primarily for debugging.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TimeInterval",
                "description": "Determines the minimum time interval, in milliseconds, that the sensor will try to use for sending out location updates. However, location updates will only be received when the location of the phone actually changes, and use of the specified time interval is not guaranteed. For example, if 1000 is used as the time interval, location updates will never be fired sooner than 1000ms, but they may be fired anytime after.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "LocationChanged",
                "description": "Indicates that a new location has been detected.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    },
                    {
                        "name": "altitude",
                        "type": "number"
                    },
                    {
                        "name": "speed",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "StatusChanged",
                "description": "Indicates that the status of the location provider service has changed, such as when a\n provider is lost or a new provider starts being used.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "provider",
                        "type": "text"
                    },
                    {
                        "name": "status",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "LatitudeFromAddress",
                "description": "Derives latitude of given address",
                "deprecated": "false",
                "params": [
                    {
                        "name": "locationName",
                        "type": "text"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "LongitudeFromAddress",
                "description": "Derives longitude of given address",
                "deprecated": "false",
                "params": [
                    {
                        "name": "locationName",
                        "type": "text"
                    }
                ],
                "returnType": "number"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MagneticFieldSensor",
        "name": "MagneticFieldSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "<p>Non-visible component that measures the ambient geomagnetic field for all three physical axes (x, y, z) in Tesla https:\/\/en.wikipedia.org\/wiki\/Tesla_(unit). <\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/magneticSensor.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AbsoluteStrength",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Available",
                "description": "",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MaximumRange",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Xstrength",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Ystrength",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Zstrength",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "MagneticChanged",
                "description": "Indicates that the magnetic sensor data has changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "xStrength",
                        "type": "number"
                    },
                    {
                        "name": "yStrength",
                        "type": "number"
                    },
                    {
                        "name": "zStrength",
                        "type": "number"
                    },
                    {
                        "name": "absoluteStrength",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidAirtable",
        "name": "MakeroidAirtable",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "STORAGE",
        "helpString": "AirTable Component",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/airtable.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ApiKey",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BaseId",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TableName",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ViewName",
                "editorType": "string",
                "defaultValue": "Grid view",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ApiKey",
                "description": "Your apiKey",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BaseId",
                "description": "",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TableName",
                "description": "",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ViewName",
                "description": "",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "CellChanged",
                "description": "Triggered when changing cell data. ResponseCode is a number",
                "deprecated": "false",
                "params": [
                    {
                        "name": "responseCode",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "DeletedRowByNumber",
                "description": "Triggered when destroying a row. ResponseCode is a number",
                "deprecated": "false",
                "params": [
                    {
                        "name": "responseCode",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GotAllRows",
                "description": "Triggered when getting all rows. ResponseCode is a number, ResponseContent is a string",
                "deprecated": "false",
                "params": [
                    {
                        "name": "responseCode",
                        "type": "number"
                    },
                    {
                        "name": "responseContent",
                        "type": "text"
                    },
                    {
                        "name": "totalRows",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GotCell",
                "description": "Triggered when receiving cell data. ResponseCode is a number, the other ones are strings",
                "deprecated": "false",
                "params": [
                    {
                        "name": "responseCode",
                        "type": "number"
                    },
                    {
                        "name": "value",
                        "type": "text"
                    },
                    {
                        "name": "rowId",
                        "type": "text"
                    },
                    {
                        "name": "createdTime",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GotColumn",
                "description": "Triggered when receiving column data. ResponseCode is a number, the other ones are lists",
                "deprecated": "false",
                "params": [
                    {
                        "name": "responseCode",
                        "type": "number"
                    },
                    {
                        "name": "values",
                        "type": "list"
                    },
                    {
                        "name": "rowIds",
                        "type": "list"
                    },
                    {
                        "name": "createdTimes",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "GotRow",
                "description": "Triggered when receiving row data. ResponseCode is a number, Values is a list",
                "deprecated": "false",
                "params": [
                    {
                        "name": "responseCode",
                        "type": "number"
                    },
                    {
                        "name": "values",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "RowCreated",
                "description": "Triggered when creating a row. ResponseCode is a number",
                "deprecated": "false",
                "params": [
                    {
                        "name": "responseCode",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "RowUpdated",
                "description": "Triggered when updating a row. ResponseCode is a number",
                "deprecated": "false",
                "params": [
                    {
                        "name": "responseCode",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "CreateRow",
                "description": "Creates a new row",
                "deprecated": "false",
                "params": [
                    {
                        "name": "columnNames",
                        "type": "list"
                    },
                    {
                        "name": "values",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "DeleteRowNum",
                "description": "Deletes the given row",
                "deprecated": "false",
                "params": [
                    {
                        "name": "rowNumber",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GetAllRows",
                "description": "Gets all rows",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GetCell",
                "description": "Gets cell data",
                "deprecated": "false",
                "params": [
                    {
                        "name": "rowNumber",
                        "type": "number"
                    },
                    {
                        "name": "columnName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GetColumn",
                "description": "Gets column data",
                "deprecated": "false",
                "params": [
                    {
                        "name": "columnName",
                        "type": "text"
                    },
                    {
                        "name": "maxRecord",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GetRow",
                "description": "Gets row data",
                "deprecated": "false",
                "params": [
                    {
                        "name": "rowNumber",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetCell",
                "description": "Changes the value of a cell",
                "deprecated": "false",
                "params": [
                    {
                        "name": "rowNumber",
                        "type": "number"
                    },
                    {
                        "name": "columnName",
                        "type": "text"
                    },
                    {
                        "name": "value",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UpdateRowByNum",
                "description": "Updates the given row data",
                "deprecated": "false",
                "params": [
                    {
                        "name": "rowNumber",
                        "type": "number"
                    },
                    {
                        "name": "columnNames",
                        "type": "list"
                    },
                    {
                        "name": "values",
                        "type": "list"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidAnimationUtilities",
        "name": "MakeroidAnimationUtilities",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "Component for MakeroidAnimationUtilities",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/drawing-and-animation\/animation-util\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/animationUtil.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [
            {
                "name": "Error",
                "description": "This event is triggered when there was a error catched. Possible values for the error code and method: 1 'GetLeftPosition', 2 'GetTopPosition', 3 'GetRightPosition', 4 'GetBottomPosition', 5 'GetXPosition', 6 'GetYPosition', 7 'Rotation', 8 'BounceHorizontal', 9 'BounceVertical', 10 'OvershootHorizontal', 11 'OvershootVertical', 12 'Zoom'. The error message will return you the error reason.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorCode",
                        "type": "number"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    },
                    {
                        "name": "method",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "BounceHorizontal",
                "description": "Start a horizontal bounce animation. The duration is set in millisecond. Use as example for 1 second '1000'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "startPosition",
                        "type": "number"
                    },
                    {
                        "name": "endPosition",
                        "type": "number"
                    },
                    {
                        "name": "duration",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "BounceVertical",
                "description": "Start a vertical bounce animation. The duration is set in millisecond. Use as example for 1 second '1000'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "startPosition",
                        "type": "number"
                    },
                    {
                        "name": "endPosition",
                        "type": "number"
                    },
                    {
                        "name": "duration",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GetBottomPosition",
                "description": "Returns the bottom position of a component. It will return '-9999' if there was a error.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetLeftPosition",
                "description": "Returns the left position of a component. It will return '-9999' if there was a error.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetRightPosition",
                "description": "Returns the right position of a component. It will return '-9999' if there was a error.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetTopPosition",
                "description": "Returns the top position of a component. It will return '-9999' if there was a error.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetXPosition",
                "description": "Returns the x position of a component. It will return '-9999' if there was a error.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetYPosition",
                "description": "Returns the y position of a component. It will return '-9999' if there was a error.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "OvershootHorizontal",
                "description": "Start a horizontal overshoot animation. If 'tension' is set to 0 you will not see a overshoot animation. Then you will see just a simple deceleration animation. The duration is set in millisecond. Use as example for 1 second '1000'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "startPosition",
                        "type": "number"
                    },
                    {
                        "name": "endPosition",
                        "type": "number"
                    },
                    {
                        "name": "duration",
                        "type": "number"
                    },
                    {
                        "name": "tension",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "OvershootVertical",
                "description": "Start a vertical overshoot animation. If 'tension' is set to 0 you will not see a overshoot animation. Then you will see just a simple deceleration animation. The duration is set in millisecond. Use as example for 1 second '1000'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "startPosition",
                        "type": "number"
                    },
                    {
                        "name": "endPosition",
                        "type": "number"
                    },
                    {
                        "name": "duration",
                        "type": "number"
                    },
                    {
                        "name": "tension",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Rotation",
                "description": "Start a rotation on any component. Use as example in 'rotation Start Degrees' 0, in 'rotation End Degrees' 360 and in 'duration' 300 (millisecond) to run a clockwise, 360 degress animation. You can also use negative numbers for the degress.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "rotationStartDegrees",
                        "type": "number"
                    },
                    {
                        "name": "rotationEndDegrees",
                        "type": "number"
                    },
                    {
                        "name": "duration",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Zoom",
                "description": "Start a zoom animation.  'tension' is set to 0 you will not see a overshoot animation. Then you will see just a simple deceleration animation. The duration is set in millisecond. Use as example for 1 second '1000'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "startScale",
                        "type": "number"
                    },
                    {
                        "name": "endScale",
                        "type": "number"
                    },
                    {
                        "name": "duration",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidArduino",
        "name": "MakeroidArduino",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "CONNECTIVITY",
        "helpString": "Arduino USB Serial Component",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/arduino.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [
            {
                "name": "AfterReadArduino",
                "description": "Triggered after Read function",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    },
                    {
                        "name": "data",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "BaudRate",
                "description": "Default baud rate is 9600 bps",
                "deprecated": "false",
                "params": [
                    {
                        "name": "baudRate",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "CloseArduino",
                "description": "Closes Arduino Connection",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "InitializeArduino",
                "description": "Initializes Arduino Connection",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "IsOpenedArduino",
                "description": "Returns true when the Arduino connection is open",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "OpenArduino",
                "description": "Opens Arduino Connection",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "ReadArduino",
                "description": "Read from Serial",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "WriteArduino",
                "description": "Write Data to Serial",
                "deprecated": "false",
                "params": [
                    {
                        "name": "writeDataArduino",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidBottomSheet",
        "name": "MakeroidBottomSheet",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "VIEWS",
        "helpString": "Component for MakeroidBottomSheet",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/bottomsheet.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "DimBackground",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowStatusBar",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "DimBackground",
                "description": "If set to true the user will see a dark background effect. Else the background have then no dark background effect.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowStatusBar",
                "description": "The status bar is the topmost bar on the screen. This property reports whether the status bar is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Closed",
                "description": "Event to detect that the dialog was closed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Opened",
                "description": "Event to detect that the dialog was opened.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "HideDialog",
                "description": "Hide the bottom sheet dialog.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RegisterComponentAsDialog",
                "description": "Register any component as example a 'button', that will be later your bottom sheet dialog.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "RegisterLayoutAsDialog",
                "description": "Register any layout as example a 'horizontal arrangement', that will be later your bottom sheet dialog.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "layout",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "ShowDialog",
                "description": "Show the bottom sheet dialog.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidCardView",
        "name": "MakeroidCardView",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "LAYOUT_GENERAL",
        "helpString": "write in ode",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AlignHorizontal",
                "editorType": "horizontal_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AlignVertical",
                "editorType": "vertical_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ContentPaddingBottom",
                "editorType": "non_negative_integer",
                "defaultValue": "8",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ContentPaddingLeft",
                "editorType": "non_negative_integer",
                "defaultValue": "8",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ContentPaddingRight",
                "editorType": "non_negative_integer",
                "defaultValue": "8",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ContentPaddingTop",
                "editorType": "non_negative_integer",
                "defaultValue": "8",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CornerRadius",
                "editorType": "non_negative_float",
                "defaultValue": "2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Elevation",
                "editorType": "non_negative_float",
                "defaultValue": "2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FullClickable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeWidth",
                "editorType": "non_negative_float",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TouchColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AlignHorizontal",
                "description": "A number that encodes how contents of the arrangement are aligned  horizontally. The choices are: 1 = left aligned, 2 = right aligned,  3 = horizontally centered.  Alignment has no effect if the arrangement's width is automatic.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AlignVertical",
                "description": "",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "BackgroundColor",
                "description": "Specifies the card view background color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ContentPaddingBottom",
                "description": "Sets the bottom padding between the card view edges and the children of CardView.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ContentPaddingLeft",
                "description": "Sets the left padding between the card view edges and the children of card view.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ContentPaddingRight",
                "description": "Sets the right padding between the card view edges and the children of card view.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ContentPaddingTop",
                "description": "Sets the top padding between the card view edges and the children of card view.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CornerRadius",
                "description": "The corner radius from the card view.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Elevation",
                "description": "The card view elevation value.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FullClickable",
                "description": "If set to true, the card will consume all click events. This means if you have added as example buttons into the card, then will the card consume the touch event on the button. And this means that the button would not be clickable, but only the entire card.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "StrokeColor",
                "description": "The stroke color for the card view.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeWidth",
                "description": "The stroke width for the card view.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TouchColor",
                "description": "Set the touch color also known as ripple color to the card view component.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "Event to detect that a user has done a simple \"Click\".",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "Event to detect that a user has done a simple \"Long click\".",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchDown",
                "description": "Event to detect that a user has done a simple touch down on the card.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchUp",
                "description": "Event to detect that a user has done a simple touch up on the card.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidChromeCustomTabs",
        "name": "MakeroidChromeCustomTabs",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EXPERIMENTAL",
        "helpString": "Chrome Custom Tabs component",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/chrome.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "DefaultShareMenuItem",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "InstantAppsEnabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowTitle",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ToolbarColor",
                "editorType": "color",
                "defaultValue": "&HFF3F51B5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Url",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UrlBarHidingOnScroll",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "DefaultShareMenuItem",
                "description": "Whether or not to add the default share menu item into the menu.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "InstantAppsEnabled",
                "description": "Whether or not to enable instant apps.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowTitle",
                "description": "Whether or not to show the title.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ToolbarColor",
                "description": "Specifies the color of the toolbar.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Url",
                "description": "The URL to load in the custom tab. The URL must start with 'http:\/\/' or 'https:\/\/'",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UrlBarHidingOnScroll",
                "description": "Whether or not to hide the url bar on scrolling.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "AddMenuItemOpenApp",
                "description": "Use this block to add a menu item with the given title to open any app you want with the package name. The package name can be as example 'com.instagram.android' to open Instagram on the menu item click. If the app is not installed the menu item will not be added.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "packageName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AddMenuItemOpenPage",
                "description": "Use this block to add a menu item with the given title and page link. The page can be as example 'https:\/\/www.instagram.com\/kodular\/'. If the user have Instagram installed,the page will then be opened in the official Instagram app. Else in the default browser.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "page",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OpenCustomTab",
                "description": "Use this block to open the custom tab.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidCircularProgress",
        "name": "MakeroidCircularProgress",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "Component for MakeroidCircularProgress",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Color",
                "editorType": "color",
                "defaultValue": "&HFF2196F2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Color",
                "description": "Change the indeterminate color of the circular progress bar.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidCloudinary",
        "name": "MakeroidCloudinary",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "STORAGE",
        "helpString": "Non-visible component that allows you to upload media to Cloudinary.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/cloudinary.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "APIKey",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "APISecret",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CloudName",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "APIKey",
                "description": "Your Cloudinary API key.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "APISecret",
                "description": "Your Cloudinary API secret.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CloudName",
                "description": "Your Cloudinary cloud name.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "MediaUploaded",
                "description": "Event raised after the Upload Media block has been used",
                "deprecated": "false",
                "params": [
                    {
                        "name": "responseContent",
                        "type": "text"
                    },
                    {
                        "name": "url",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "UploadMedia",
                "description": "Uploads the specified media file to your Cloudinary media library.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "path",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidDebuggableComponent",
        "name": "MakeroidDebuggableComponent",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "INTERNAL",
        "helpString": "This component makes the app debuggable",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/debug.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidDynamicButton",
        "name": "MakeroidDynamicButton",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "DYNAMIC",
        "helpString": "A component to create dynamic buttons in Arrangements",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/button.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [
            {
                "name": "ButtonClick",
                "description": "Trigger when a Dynamic Button is clicked.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ButtonLongClick",
                "description": "Trigger when a Dynamic Button is long clicked.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "CreateButton",
                "description": "Create a Dynamic Button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "arrangement",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "DeleteButton",
                "description": "This block is DEPRECATED! Please use instead the 'Delete Button' block without arrangement parameter.",
                "deprecated": "true",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "arrangement",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "DeleteButtonNew",
                "description": "Delete a Dynamic Button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GetButtonById",
                "description": "Returns the button referenced by its id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "component"
            },
            {
                "name": "GetEnabled",
                "description": "Get the Enabled status of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "GetFontSize",
                "description": "Get the Font Size of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetHeight",
                "description": "Get the Height of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetText",
                "description": "Get the Text of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetWidth",
                "description": "Get the Width of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "SetBackgroundColor",
                "description": "Update the Background Color of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetEnabled",
                "description": "Update the Enabled status of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "enabled",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "SetFont",
                "description": "Update the Font of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "bold",
                        "type": "boolean"
                    },
                    {
                        "name": "italic",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "SetFontSize",
                "description": "Update the Font Size of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetHeight",
                "description": "Update the Height of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetText",
                "description": "Update the Text of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "text",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SetTextColor",
                "description": "Update the Text Color of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetWidth",
                "description": "Update the Width of a button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidDynamicLabel",
        "name": "MakeroidDynamicLabel",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "DYNAMIC",
        "helpString": "A component to create dynamic labels in Arrangements",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/label.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [
            {
                "name": "AlignmentCenter",
                "description": "Center alignment (1)",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "AlignmentLeft",
                "description": "Left alignment (0)",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "AlignmentRight",
                "description": "Right alignment (2)",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "CreateLabel",
                "description": "Create a Dynamic Label",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "arrangement",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "DeleteLabel",
                "description": "Remove a label component with the given id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GetFontSize",
                "description": "Get the Font Size of a Label",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetHeight",
                "description": "Get the Height of a Label",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetLabelById",
                "description": "Returns the label referenced by its id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "component"
            },
            {
                "name": "GetText",
                "description": "Get the Text of a Label",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetWidth",
                "description": "Get the Width of a Label",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "SetAlignment",
                "description": "Update the Text Alignment of a Label. 0 = left, 1 = center and 2 = right.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "alignment",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetBackgroundColor",
                "description": "Update the Background Color of a Label",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetFont",
                "description": "Update the Font of a Label",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "bold",
                        "type": "boolean"
                    },
                    {
                        "name": "italic",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "SetFontSize",
                "description": "Update the Font Size of a Label",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetHeight",
                "description": "Update the Height of a Label",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetText",
                "description": "Update the Text of a Label",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "html",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "SetTextColor",
                "description": "Update the Text Color of a Label",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetWidth",
                "description": "Update the Width of a Label",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidDynamicTextBox",
        "name": "MakeroidDynamicTextBox",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "DYNAMIC",
        "helpString": "A component to create dynamic textboxes in Arrangements",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/dynamic\/dynamic-textbox\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/textbox.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [
            {
                "name": "OnTextChanged",
                "description": "Trigger when the text of a Dynamic TextBox changes",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "text",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "CreateTextBox",
                "description": "Create a Dynamic TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "arrangement",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "DeleteTextBox",
                "description": "Remove a textbox component with the given id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GetButtonById",
                "description": "Returns the button referenced by its id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "component"
            },
            {
                "name": "GetEnabled",
                "description": "Get the Enabled status of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "GetFontSize",
                "description": "Get the Font Size of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetHeight",
                "description": "Get the Height of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "GetText",
                "description": "Get the Text of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetWidth",
                "description": "Get the Width of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "SetAlignment",
                "description": "Update the Text Alignment of a TextBox. 0 = left, 1 = center and 2 = right.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "alignment",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetBackgroundColor",
                "description": "Update the Background Color of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetEnabled",
                "description": "Update the Enabled status of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "enabled",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "SetFont",
                "description": "Update the Font of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "bold",
                        "type": "boolean"
                    },
                    {
                        "name": "italic",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "SetFontSize",
                "description": "Update the Font Size of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetHeight",
                "description": "Update the Height of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetText",
                "description": "Update the Text of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "text",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SetTextColor",
                "description": "Update the Text Color of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetWidth",
                "description": "Update the Width of a TextBox",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidExoPlayer",
        "name": "MakeroidExoPlayer",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "Component for MakeroidExoPlayer",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/exoplayer.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Loop",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Source",
                "editorType": "asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Volume",
                "editorType": "non_negative_float",
                "defaultValue": "50",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "CurrentPosition",
                "description": "Returns the current position of the source file that is playing in milliseconds.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Duration",
                "description": "Returns the duration of the source file.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Loop",
                "description": "If true, the player will loop when it plays.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Source",
                "description": "Set the path to the audio source. Can be a asset file, from external card, or from a online stream.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Volume",
                "description": "Sets the volume to a number between 0 and 100",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Completed",
                "description": "This event is invoked if the player state is completed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GotMetaData",
                "description": "This event returns meta data from the audio stream. Works for files but not for streams as example radio streams.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "artist",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "album",
                        "type": "text"
                    },
                    {
                        "name": "albumArtist",
                        "type": "text"
                    },
                    {
                        "name": "track",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OnPlayerError",
                "description": "This event returns the error reason for any problems.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OtherPlayerStarted",
                "description": "This event is signaled when another player has started (and the current player is playing or paused, but not stopped).",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OtherPlayerStopped",
                "description": "This event is signaled when another player has stopped (and the current player is playing or paused, but not stopped).",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StatusChanged",
                "description": "This event returns true or false for the respective simpleExoPlayer statuses.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "isPlaying",
                        "type": "boolean"
                    },
                    {
                        "name": "isPause",
                        "type": "boolean"
                    },
                    {
                        "name": "isStopped",
                        "type": "boolean"
                    },
                    {
                        "name": "isLoading",
                        "type": "boolean"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Pause",
                "description": "Pause the player.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Resume",
                "description": "Resume the player.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SeekTo",
                "description": "Set a position where the source file should start playing in milliseconds.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Start",
                "description": "Start the player.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Stop",
                "description": "Stop the player.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "isLoading",
                "description": "Returns true if the player is current loading.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "isPause",
                "description": "Returns true if the player is current in pause mode.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "isPlaying",
                "description": "Returns true if the player is current playing.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "isStopped",
                "description": "Returns true if the player is current stopped.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidFBBannerAd",
        "name": "MakeroidFBBannerAd",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "...in ode messages file",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/facebook-banner\/",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/facebook.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "PlacementID",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "PlacementID",
                "description": "Set Placement ID",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdClicked",
                "description": "Event triggered when ads are clicked",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdClosed",
                "description": "Event triggered when ads are closed",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdLoaded",
                "description": "Event triggered when ads are loaded",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Error",
                "description": "Event triggered when ads failed to load",
                "deprecated": "false",
                "params": [
                    {
                        "name": "error",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "LoadAd",
                "description": "Load Ad",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidFBInterstitialAd",
        "name": "MakeroidFBInterstitialAd",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "ADVERTISING",
        "helpString": "...in ode messages file",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/facebook-interstitial\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/facebook.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "CommissionInterstitialAdsNetwork",
                "editorType": "commission_interstitial_ads_network",
                "defaultValue": "unity",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PlacementID",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "CommissionInterstitialAdsNetwork",
                "description": "Sets the ad network used to take the commission.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "PlacementID",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AdClosed",
                "description": "Called when the user is about to return to the application after clicking on an ad",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "AdLoaded",
                "description": "Called when an ad is received",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Error",
                "description": "Called when an ad request failed. message will display the reason for why the ad failed",
                "deprecated": "false",
                "params": [
                    {
                        "name": "error",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "LoadAd",
                "description": "Loads a new ad.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowAd",
                "description": "Shows an ad to the user.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidFab",
        "name": "MakeroidFab",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "write in ode",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/user-interface\/floating-action-button\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/fab.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF2196F2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CallFabClickOnTextMessageClick",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "CallFabLongClickOnTextMessageLongClick",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Elevation",
                "editorType": "non_negative_float",
                "defaultValue": "10",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HideTextMessageOnTextClick",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HideTextMessageOnTextLongClick",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Icon",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "IconColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "IconName",
                "editorType": "string",
                "defaultValue": "add",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MarginBottom",
                "editorType": "non_negative_integer",
                "defaultValue": "16",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MarginRight",
                "editorType": "non_negative_integer",
                "defaultValue": "16",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RippleColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "RotationDuration",
                "editorType": "integer",
                "defaultValue": "300",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "RotationEndDegrees",
                "editorType": "float",
                "defaultValue": "360",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "RotationOnClick",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "RotationStartDegrees",
                "editorType": "float",
                "defaultValue": "0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ShowTextMessageOnLeftSide",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Size",
                "editorType": "size",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextMessageBackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TextMessageCornerRadius",
                "editorType": "non_negative_float",
                "defaultValue": "8",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TextMessageText",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TextMessageTextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Returns the fab's background color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CallFabClickOnTextMessageClick",
                "description": "If true the FAB click listener will be invoked on a text message click.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CallFabLongClickOnTextMessageLongClick",
                "description": "If true the FAB long click listener will be invoked on a text message long click.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Elevation",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HideTextMessageOnTextClick",
                "description": "Hide the text message when clicking on the message",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HideTextMessageOnTextLongClick",
                "description": "Hide the text message after a long click on the text message.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Icon",
                "description": "The path for the used image in FAB.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "IconColor",
                "description": "The color for the material icon.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "IconName",
                "description": "Use a material icon for the fab without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/material.io\/icons",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MarginBottom",
                "description": "Returns the fab's bottom margin.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MarginRight",
                "description": "Returns right margin",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RippleColor",
                "description": "Returns the fab's ripple color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationDuration",
                "description": "Returns the fab's rotation duration in milliseconds.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationEndDegrees",
                "description": "Returns the fab's rotation end degrees.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationOnClick",
                "description": "Returns true if the fab will rotate on click.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationStartDegrees",
                "description": "Returns the fab's rotation start degrees.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowTextMessageOnLeftSide",
                "description": "Set the text message to the left side of the floating button. If false the text will be on the right side.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Size",
                "description": "Sets the size of the button. Use '1' for normal, '2' for mini or '3' for auto size based on the screen size.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextMessageBackgroundColor",
                "description": "Set the text message background color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextMessageCornerRadius",
                "description": "Set the text message corner radius.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextMessageText",
                "description": "Set the text message.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextMessageTextColor",
                "description": "Set the text message color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true if the fab button is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "Event to detect that the fab button was clicked.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "Event to detect that the fab button was long clicked.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "Hide",
                "description": "Hides the fab button.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "HideTextMessage",
                "description": "Hides text message.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Show",
                "description": "Shows the fab button.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowTextMessage",
                "description": "Show a new text message near to the fab with the given properties. You can do the changes with the properties in the advanded category.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StartRotationAnimation",
                "description": "Starts a rotation animation. You can use the 'Rotation Duration','Rotation Start Degrees' and 'Rotation End Degrees' to define the animation. This block will work too if the 'Rotation On Click' property is disabled.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidFtp",
        "name": "MakeroidFtp",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "CONNECTIVITY",
        "helpString": "write in ode",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/ftp.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "FtpServer",
                "editorType": "string",
                "defaultValue": "ftp.example.org",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Password",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Port",
                "editorType": "integer",
                "defaultValue": "21",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Username",
                "editorType": "string",
                "defaultValue": "Your Username",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "WorkingDirectory",
                "editorType": "string",
                "defaultValue": "/",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "FtpServer",
                "description": "Set the ftp server url.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Password",
                "description": "Set the password to login into the ftp server.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Port",
                "description": "Set the ftp port number.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Username",
                "description": "Set the username to login into the ftp server.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WorkingDirectory",
                "description": "Set the ftp working dir.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "ConnectError",
                "description": "This event returns the reason if a try to connect was not successful.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "error",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ConnectionStatus",
                "description": "This event returns the status of the connection. If it is connect it will return true, else false.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "isConnected",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "DisconnectError",
                "description": "This event returns the reason if a try to disconnect was not successful.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "error",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "DownloadDone",
                "description": "This event is invoked when the download is finished.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "DownloadError",
                "description": "This event returns the reason if a download was not successful.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "error",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UploadDone",
                "description": "This event is invoked when the upload is finished.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "UploadError",
                "description": "This event returns the reason if a upload was not successful.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "error",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Connect",
                "description": "Start the connection to the ftp server.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Disconnect",
                "description": "Disconnect the current connection.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "DownloadFile",
                "description": "Start downloading a file.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "remoteFilepath",
                        "type": "text"
                    },
                    {
                        "name": "destination",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GetListOfFiles",
                "description": "Get a list of files in a directory. Returns a empty list if a error occurs.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "dir",
                        "type": "text"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "UploadFile",
                "description": "Start uploading a file.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "filePath",
                        "type": "text"
                    },
                    {
                        "name": "newName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "deleteDir",
                "description": "Delete a directory on the ftp server.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "dir",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "makeDir",
                "description": "Make\/create a directory on the ftp server.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "dir",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidInstantAccess",
        "name": "MakeroidInstantAccess",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "INTERNAL",
        "helpString": "Component for MakeroidInstantAccess",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/instantAccess.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ClientID",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ClientSecret",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ClientID",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ClientSecret",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "OnRequestSent",
                "description": "A event to detect that the login request was sent.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    },
                    {
                        "name": "data",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OnStatusReceived",
                "description": "A event to detect that the status was received.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    },
                    {
                        "name": "data",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "CheckStatus",
                "description": "Check the current status with a given username.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "user",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ClientID",
                "description": "Returns the client id.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "ClientSecret",
                "description": "Returns the client secret.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Request",
                "description": "Start a request to user with the instant access login service.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "user",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidLinearProgressbar",
        "name": "MakeroidLinearProgressbar",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "Component for MakeroidLinearProgressbar",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Indeterminate",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "IndeterminateColor",
                "editorType": "color",
                "defaultValue": "&HFF2196F2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Maximum",
                "editorType": "integer",
                "defaultValue": "100",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Minimum",
                "editorType": "integer",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ProgressColor",
                "editorType": "color",
                "defaultValue": "&HFF2196F2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Indeterminate",
                "description": "Change the indeterminate mode for this progress bar. In indeterminate mode, the progress is ignored and the progress bar shows an infinite animation instead.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "IndeterminateColor",
                "description": "Change the indeterminate color of the progress bar.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Maximum",
                "description": "Set the upper range of the progress bar max.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Minimum",
                "description": "Set the lower range of the progress bar to min. This function works only for devices with API >= 26",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Progress",
                "description": "Sets the current progress to the specified value. Does not do anything if the progress bar is in indeterminate mode.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ProgressColor",
                "description": "Change the progress color of the progress bar.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "ProgressChanged",
                "description": "Event that indicates that the progress of the progress bar has been changed. Returns the current progress value. If \"Indeterminate\" is set to true, then it returns \"0\".",
                "deprecated": "false",
                "params": [
                    {
                        "name": "progress",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "IncrementProgressBy",
                "description": "Increase the progress bar's progress by the specified amount.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "value",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidListViewImageText",
        "name": "MakeroidListViewImageText",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "LISTVIEWS",
        "helpString": "This is a visible component that displays a list of a image and two labels",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/user-interface\/list-view-image-and-text\/",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/listView.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00FFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DividerColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ImageSide",
                "editorType": "left_right",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ItemSize",
                "editorType": "list_item_size",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SubtitleBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SubtitleColor",
                "editorType": "color",
                "defaultValue": "&HFF757575",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SubtitleFontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SubtitleFontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "SubtitleHTML",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "SubtitleItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SubtitleTextSize",
                "editorType": "non_negative_float",
                "defaultValue": "14",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TitleBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TitleColor",
                "editorType": "color",
                "defaultValue": "&HFF212121",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TitleFontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TitleFontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TitleHTML",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TitleItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TitleTextSize",
                "editorType": "non_negative_float",
                "defaultValue": "14",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Set the background color of the listview",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "DividerColor",
                "description": "Set the divider color of the listview",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Determines the height of the list on the view.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ImageSide",
                "description": "Set the side of the image.\nSet it to 1 for Left side and 2 for Right side",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ItemSize",
                "description": "Set ListItem Size.\nSet it to 1 for Normal size, 2 for Small size and 3 for Big size.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SubtitleBold",
                "description": "Whether the subtitle should be in bold text",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SubtitleColor",
                "description": "Changed the color of the subtitle text",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SubtitleFontTypeface",
                "description": "Change the Typeface of the Subtitle",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SubtitleFontTypefaceImport",
                "description": "Set a custom title font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "SubtitleHTML",
                "description": "If true, then the subtitle will show html text else it will show plain text. Note: Not all HTML is supported.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SubtitleItalic",
                "description": "Whether the subtitle should be in italic text",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SubtitleTextSize",
                "description": "The text size of the subtitle.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitleBold",
                "description": "Whether the title should be in bold text",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitleColor",
                "description": "Changed the color of the title text",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitleFontTypeface",
                "description": "Change the Typeface of the Title",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TitleFontTypefaceImport",
                "description": "Set a custom title font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "TitleHTML",
                "description": "If true, then the title will show html text else it will show plain text. Note: Not all HTML is supported.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitleItalic",
                "description": "Whether the title should be in italic text",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitleTextSize",
                "description": "The text size of the title.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Determines the width of the list on the view.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "Triggers when the user clicks on a item in the list",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "subtitle",
                        "type": "text"
                    },
                    {
                        "name": "image",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "LongClick",
                "description": "Triggers when the user long clicks on a item in the list",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "subtitle",
                        "type": "text"
                    },
                    {
                        "name": "image",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "AddItem",
                "description": "Add a item to the list",
                "deprecated": "false",
                "params": [
                    {
                        "name": "image",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "subtitle",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AddItemFromList",
                "description": "Add a item to the list",
                "deprecated": "false",
                "params": [
                    {
                        "name": "list",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "ClearList",
                "description": "Remove all the items from the list",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RemoveItem",
                "description": "Remove a item from the list",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "UpdateItem",
                "description": "Update a item of the list",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    },
                    {
                        "name": "image",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "subtitle",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidNotification",
        "name": "MakeroidNotification",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EXPERIMENTAL",
        "helpString": "A component to send a notification to the users device",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/notification.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Priority",
                "editorType": "notification_priority",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visiblity",
                "editorType": "notification_visibility",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Priority",
                "description": "Set the priority level. 1 = \"Default\", 2 = \"high\", 3 = \"low\", 4 = \"max\", 5 = \"min\"",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visiblity",
                "description": "Set the visibility property. 1 = \"public\", 2 = \"private\", 3 = \"secret\".",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "AreNotificationsEnabled",
                "description": "Check wether the app can send Notifications",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "BigPictureNotification",
                "description": "Send a normal notification",
                "deprecated": "false",
                "params": [
                    {
                        "name": "notificationID",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "bigPicture",
                        "type": "text"
                    },
                    {
                        "name": "startValue",
                        "type": "text"
                    },
                    {
                        "name": "removeOnClick",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "CancelAll",
                "description": "Cancel all Notifications",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "CancelNotification",
                "description": "Cancel a Notification with an id",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "NormalNotification",
                "description": "Send a normal notification",
                "deprecated": "false",
                "params": [
                    {
                        "name": "notificationID",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "startValue",
                        "type": "text"
                    },
                    {
                        "name": "removeOnClick",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "SimpleNotification",
                "description": "Send a simple notification",
                "deprecated": "false",
                "params": [
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidShell",
        "name": "MakeroidShell",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "Checks Root status and executes Shell command",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/shell.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [
            {
                "name": "GotOutput",
                "description": "Read output after executing shell command",
                "deprecated": "false",
                "params": [
                    {
                        "name": "out",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "CheckForSuperUserAPK",
                "description": "Returns TRUE if one of 6 known root packages or varients is installed. The name of the package is not returned, so the user does not know which package name to change. Developed by Cian.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "Execute",
                "description": "Executes shell commands. To get output, use \"GotOutput\" event block.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "in",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "IsRooted",
                "description": "Returns true if Phone is Rooted",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "isSystemUser",
                "description": "This returns TRUE if the system user is running the application, and could be a sign of a rooted device. Developed by Cian.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidShortcutBadge",
        "name": "MakeroidShortcutBadge",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "EXPERIMENTAL",
        "helpString": "Shortcut Badge component",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/notification.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [],
        "methods": [
            {
                "name": "ApplyCount",
                "description": "Use this block to apply a notification badge count.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "count",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Count",
                "description": "Use this block to return the notification count.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "RemoveCount",
                "description": "Use this block to remove the notification badge count.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidSideMenuLayout",
        "name": "MakeroidSideMenuLayout",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "NAVIGATION",
        "helpString": "Display a real Navigation Menu in the Side Menu",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/makeroidSideMenuLayout.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CircleHeaderPicture",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DisabledColor",
                "editorType": "color",
                "defaultValue": "&HFF9E9E9E",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnabledColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HeaderBackgroundImage",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HeaderPicture",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HeaderSubtitle",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HeaderTitle",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SelectedColor",
                "editorType": "color",
                "defaultValue": "&HFFE81E63",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Set the background color of the Sidemenu Layout",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CircleHeaderPicture",
                "description": "Sets (or not) the header picture to use a circle shape",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DisabledColor",
                "description": "Sets the color of the disabled elements of the SideMenu",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnabledColor",
                "description": "Sets the color of the enabled elements of the SideMenu",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeaderBackgroundImage",
                "description": "Sets the Header Background Picture",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeaderPicture",
                "description": "Sets the Header Picture of the Side Menu",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeaderSubtitle",
                "description": "Sets the Header Subtitle",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeaderTitle",
                "description": "Sets the Header Title",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SelectedColor",
                "description": "Sets the color of the selected element of the SideMenu",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "OnMenuItemClick",
                "description": "Triggers when the user clicks on an item of the Navigation Menu",
                "deprecated": "false",
                "params": [
                    {
                        "name": "title",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "AddItem",
                "description": "Add an item to the Navigation Menu",
                "deprecated": "false",
                "params": [
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "image",
                        "type": "text"
                    },
                    {
                        "name": "enabled",
                        "type": "boolean"
                    },
                    {
                        "name": "checked",
                        "type": "boolean"
                    },
                    {
                        "name": "group",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "RemoveItem",
                "description": "Remove an item from the Navigation Menu",
                "deprecated": "false",
                "params": [
                    {
                        "name": "title",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UpdateItem",
                "description": "Update an item of the Navigation Menu",
                "deprecated": "false",
                "params": [
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "newTitle",
                        "type": "text"
                    },
                    {
                        "name": "image",
                        "type": "text"
                    },
                    {
                        "name": "enabled",
                        "type": "boolean"
                    },
                    {
                        "name": "checked",
                        "type": "boolean"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidSnackbar",
        "name": "MakeroidSnackbar",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "Snackbar",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/snackbar.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ButtonTextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Duration",
                "editorType": "snackbar_duration",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Specifies the snackbar's background color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ButtonTextColor",
                "description": "Specifies the action button's text color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Duration",
                "description": "Specifies the length of time that the Snackbar is shown",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "User clicked on the action button.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnDismissed",
                "description": "Event to detect the snackbar was dismissed. Possible results can be: \"UNDEFINED\", \"ACTION\", \"CONSECUTIVE\", \"MANUAL\", \"SWIPE\" or \"TIMEOUT\". You can find more information at: https:\/\/developer.android.com\/reference\/android\/support\/design\/widget\/Snackbar.Callback.html",
                "deprecated": "false",
                "params": [
                    {
                        "name": "event",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OnShown",
                "description": "Event to detect the snackbar is shown.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "Dismiss",
                "description": "Dismiss the snackbar.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "IsShown",
                "description": "Returns true whether this snackbar is currently being shown.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "Show",
                "description": "Show Snackbar (message supports HTML formatting)",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShowWithButton",
                "description": "Show Snackbar with action button (message supports HTML formatting)",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "buttonText",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidSpotlight",
        "name": "MakeroidSpotlight",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "Spotlight component",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/spotlight.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "CirclePadding",
                "editorType": "integer",
                "defaultValue": "20",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Component",
                "editorType": "component",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DismissOnBackPress",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DismissOnTouch",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableDismissAfterShown",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableRevealAnimation",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FadeinTextDuration",
                "editorType": "integer",
                "defaultValue": "400",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontHeadingTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontHeadingTypefaceImport",
                "editorType": "asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "FontSubheadingTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSubheadingTypefaceImport",
                "editorType": "asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HeadingText",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HeadingTextColor",
                "editorType": "color",
                "defaultValue": "&HFF3F51B5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HeadingTextSize",
                "editorType": "integer",
                "defaultValue": "32",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "IntroAnimationDuration",
                "editorType": "integer",
                "defaultValue": "400",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "LineAndArcColor",
                "editorType": "color",
                "defaultValue": "&HFF3F51B5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "LineAnimationDuration",
                "editorType": "integer",
                "defaultValue": "400",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MaskColor",
                "editorType": "color",
                "defaultValue": "&Hbe000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowTargetArc",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SubheadingText",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SubheadingTextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SubheadingTextSize",
                "editorType": "integer",
                "defaultValue": "16",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "CirclePadding",
                "description": "The padding for the circle spotlight. Default is '20'.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Component",
                "description": "The component to show in the spotlight.",
                "type": "component",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DismissOnBackPress",
                "description": "Dismiss the spotlight on back pressed.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DismissOnTouch",
                "description": "Dismiss the spotlight on touch",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableDismissAfterShown",
                "description": "Dismiss spotlight on touch after spotlight is completely visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableRevealAnimation",
                "description": "Enable reveal animation (Only for Lollipop and above).",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FadeinTextDuration",
                "description": "Fade in animation duration for spotlight text (Heading and Sub-heading).",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontHeadingTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontHeadingTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "FontSubheadingTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontSubheadingTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HeadingText",
                "description": "The Spotlight heading text.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeadingTextColor",
                "description": "The Spotlight heading text color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeadingTextSize",
                "description": "The Spotlight heading size.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "IntroAnimationDuration",
                "description": "Intro animation duration (For Reveal and Fadein).",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "LineAndArcColor",
                "description": "The Spotlight line and arc color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "LineAnimationDuration",
                "description": "Line animation duration",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MaskColor",
                "description": "The Spotlight mask color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowTargetArc",
                "description": "If set to true you will see a half round circle below the spotlight circle.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SubheadingText",
                "description": "The Spotlight subheading text.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SubheadingTextColor",
                "description": "The Spotlight subheading text color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SubheadingTextSize",
                "description": "The Spotlight subheading text size.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Clicked",
                "description": "Event triggered when the spotlight is clicked.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "ShowSpotlight",
                "description": "Use this block to show the spotlight.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowSpotlightOnFAB",
                "description": "Use this block to show the spotlight on a floating action button.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "floatingActionButton",
                        "type": "component"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidSwipeRefreshLayout",
        "name": "MakeroidSwipeRefreshLayout",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "LAYOUT_GENERAL",
        "helpString": "Component for MakeroidSwipeRefreshLayout",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AlignHorizontal",
                "editorType": "horizontal_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AlignVertical",
                "editorType": "vertical_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "LargeSize",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "NestedScrolling",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ProgressBackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AlignHorizontal",
                "description": "A number that encodes how contents of the arrangement are aligned  horizontally. The choices are: 1 = left aligned, 2 = right aligned,  3 = horizontally centered.  Alignment has no effect if the arrangement's width is automatic.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AlignVertical",
                "description": "A number that encodes how the contents of the arrangement are aligned  vertically. The choices are: 1 = aligned at the top, 2 = vertically centered, 3 = aligned at the bottom.  Alignment has no effect if the arrangement's height is automatic.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BackgroundColor",
                "description": "The background color of the swipe refresh layout.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If set to true the swpipe refresh layout is enabled.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "IsRefreshing",
                "description": "Returns true if is actively showing refresh progress.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "LargeSize",
                "description": "If enabled is set to true the pull size will be large, else the size is default.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "NestedScrolling",
                "description": "Enable or disable nested scrolling for this view.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ProgressAnimationColors",
                "description": "Set the colors used in the progress animation. Use a 'make a list' block. The first color on the list is than the first spinner color.",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ProgressBackgroundColor",
                "description": "Change the pull to refresh background color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Refreshing",
                "description": "Notify the widget that refresh state has changed. Do not call this when refresh is triggered by a swipe gesture.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "OnRefresh",
                "description": "Event to detect when a refresh is triggered via the swipe gesture.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidTabLayout",
        "name": "MakeroidTabLayout",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "NAVIGATION",
        "helpString": "Component for MakeroidTabLayout",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/tabLayout.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "TabsActiveTextColor",
                "editorType": "color",
                "defaultValue": "&HFFFF4081",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TabsBackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF3F51B5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TabsIndicatorColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TabsMode",
                "editorType": "tabs_mode",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TabsTextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "GetCurrentTab",
                "description": "Get the current selected tab.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SelectTab",
                "description": "Select a tab which is then the active tab.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "TabsActiveTextColor",
                "description": "Specifies the tab's text color for active tab's.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TabsBackgroundColor",
                "description": "Specifies the tab's background color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TabsIndicatorColor",
                "description": "Specifies the tab's indicator color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TabsMode",
                "description": "Choose the mode used for the tab's. If no mode is specified, 'Scrollable' is taken as 'Default'. Use '0' for scrollable and '1' for fixed.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TabsTextColor",
                "description": "Specifies the tab's text color for not selected tab's.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "TabItemSelected",
                "description": "The event returns the name or the position of the selected tab.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tab",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "AddNewTab",
                "description": "Add a new tab to the tab layout. If you don't want a icon then let it empty.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "icon",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AddNewTabAt",
                "description": "Add a new tab to the tab layout at the given position. If you don't want a icon then let it empty.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "icon",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "CountTabs",
                "description": "Returns the number of current added tab's.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "RemoveAllTabs",
                "description": "Remove all tab's from tab layout.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RemoveTabAt",
                "description": "Removes a before added tab. If you want to delete the first tab then use as position '1'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidViewFlipper",
        "name": "MakeroidViewFlipper",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "VIEWS",
        "helpString": "Component for MakeroidViewFlipper",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/viewFlipper.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AddImagesFromString",
                "editorType": "textArea",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FlipInterval",
                "editorType": "non_negative_integer",
                "defaultValue": "1000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Swipeable",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AddImagesFromString",
                "description": "Use this function if you try to create a image view flipper. Use images separated by commas such as: Image1.png,Image2.png,Image3.png.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "BackgroundColor",
                "description": "Specifies the view flippers background color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FlipInterval",
                "description": "How long to wait before flipping to the next view in milliseconds.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Swipeable",
                "description": "If set to true you can swipe with your fingers through views.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "AddComponentToView",
                "description": "Add a component to the view flipper. The first added component will be the first visible component on the screen.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "AddImagesToView",
                "description": "Use this function if you try to create a image view flipper. Please use a 'make a list' block.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "images",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "ShowNext",
                "description": "Show the next view.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowPrevious",
                "description": "Show the previous view.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StartFlipping",
                "description": "Start a timer to cycle through child views.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StopFlipping",
                "description": "No more flips.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "isFlipping",
                "description": "Returns true if the child views are flipping.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidViewPager",
        "name": "MakeroidViewPager",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "NAVIGATION",
        "helpString": "Component for MakeroidViewPager",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/viewPager.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ShowTabs",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "experimental",
                "editorArgs": []
            },
            {
                "name": "TabsActiveTextColor",
                "editorType": "color",
                "defaultValue": "&HFFFF4081",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TabsBackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF3F51B5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TabsIndicatorColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TabsMode",
                "editorType": "tabs_mode",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TabsTextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "GetCurrentPage",
                "description": "Get the current selected visible page.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SelectPage",
                "description": "Select a page which is then the active page.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ShowTabs",
                "description": "If set to true, you will see tabs above the view pager.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TabsActiveTextColor",
                "description": "Specifies the tab's text color for active tab's.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TabsBackgroundColor",
                "description": "Specifies the tab's background color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TabsIndicatorColor",
                "description": "Specifies the tab's indicator color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TabsMode",
                "description": "Choose the mode used for the tab's. If no mode is specified, 'Scrollable' is taken as 'Default'. Use '0' for scrollable and '1' for fixed.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TabsTextColor",
                "description": "Specifies the tab's text color for not selected tab's.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "PageSelected",
                "description": "Event to detect that a page was selected.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "AddComponentToView",
                "description": "Add a component to the view pager. The first added component will be the first visible component on the screen.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "tabName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "RemoveAllTabs",
                "description": "Remove all tab's from view pager.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RemoveViewAt",
                "description": "Removes a before added view from the view pager. If you want to delete the first page then use as position '1'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidWhiteMobi",
        "name": "MakeroidWhiteMobi",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "INTERNAL",
        "helpString": "WhiteMobi component",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/monetization\/whitemobi\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/whitemobi.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ApplicationKey",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ApplicationKey",
                "description": "Return the application key.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "OfferCompleted",
                "description": "Event triggered when an offer has been completed",
                "deprecated": "false",
                "params": [
                    {
                        "name": "amount",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "ShowOfferWall",
                "description": "Show WhiteMobi offerwall",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MakeroidYoutubePlayer",
        "name": "MakeroidYoutubePlayer",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "GOOGLE",
        "helpString": "Component for MakeroidYoutubePlayer",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/youtubePlayer.png",
        "androidMinSdk": 17,
        "properties": [
            {
                "name": "EnableLiveVideoUI",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StartSecond",
                "editorType": "non_negative_float",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Volume",
                "editorType": "integer",
                "defaultValue": "50",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "EnableLiveVideoUI",
                "description": "If you want to play live videos you must setup the UI accordingly, by calling this method. If enabled, the user can not select a second on the video progress bar.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "GetCurrentSecond",
                "description": "Returns the current second.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "GetVideoDuration",
                "description": "Returns the video duration in seconds.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "IsFullscreen",
                "description": "Returns true if the player is in fullscreen mode.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "StartSecond",
                "description": "The time from which the video should start playing.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TestVideoId",
                "description": "Use this block to test the youtube player. Powered by Kodular.io",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Volume",
                "description": "Set the volume to a number between 0 and 100.Use only integer numbers.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Error",
                "description": "Use this event to detect that there was any error with the player. Return values: 'UNKNOWN', 'INVALID_PARAMETER_IN_REQUEST', 'HTML_5_PLAYER', 'VIDEO_NOT_FOUND', 'VIDEO_NOT_PLAYABLE_IN_EMBEDDED_PLAYER', 'INVALID_VOLUME' or 'INVALID_SEEK_TO'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "error",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Fullscreen",
                "description": "Event to get notified when the player enters or exits fullscreen. The variable 'fullscreen' returns true or false.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "fullscreen",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "Initialized",
                "description": "Use this event to start the playing of a normal or instant youtube video.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "PlaybackQualityChanged",
                "description": "Use this event to detect that the playback quality was changed. Return values: 'UNKNOWN', 'SMALL', 'MEDIUM', 'LARGE', 'HD720', 'HD1080', 'HIGH_RES' or 'DEFAULT'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "quality",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PlaybackRateChanged",
                "description": "Use this event to detect that the playback rate was changed. Return values: 'UNKNOWN', 'RATE_0_25', 'RATE_0_5', 'RATE_1', 'RATE_1_5' or 'RATE_2'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "rate",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "StateChanged",
                "description": "Use this event to detect that the state changes. Return values: 'UNKNOWN', 'UNSTARTED', 'ENDED', 'PLAYING', 'PAUSED', 'BUFFERING' or 'VIDEO_CUED'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "state",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "EnterFullscreen",
                "description": "Enter the video in fullscreen mode.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ExitFullscreen",
                "description": "Exit the video from fullscreen mode.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GetThumbnailFromVideoId",
                "description": "This block will return the thumbnail image path from a video id. Use only as example '_bZj-LOXdH8' from a youtube video.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "videoId",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "InstantLoad",
                "description": "Use this block together with the 'Youtube Player' Initialized event. Loads and automatically plays the specified youtube video. Use only as example '_bZj-LOXdH8' from a youtube video.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "videoId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Load",
                "description": "Loads the specified video's thumbnail and prepares the player to play the video. Does not automatically play the video. Use only as example '_bZj-LOXdH8' from a youtube video.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "videoId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Pause",
                "description": "Pause the youtube video.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Play",
                "description": "Plays the youtube video.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SeekTo",
                "description": "Set a position where the youtube video should start playing in seconds.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ToggleFullscreen",
                "description": "Toggle the state of the video player.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Map",
        "name": "Map",
        "external": "false",
        "version": "5",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MAPS",
        "helpString": "<p>A two-dimensional container that renders map tiles in the background and allows for multiple Marker elements to identify points on the map. Map tiles are supplied by OpenStreetMap contributors and the United States Geological Survey.<\/p><p>The Map component provides three utilities for manipulating its boundaries within App Inventor. First, a locking mechanism is provided to allow the map to be moved relative to other components on the Screen. Second, when unlocked, the user can pan the Map to any location. At this new location, the &quot;Set Initial Boundary&quot; button can be pressed to save the current Map coordinates to its properties. Lastly, if the Map is moved to a different location, for example to add Markers off-screen, then the &quot;Reset Map to Initial Bounds&quot; button can be used to re-center the Map at the starting location.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "CenterFromString",
                "editorType": "geographic_point",
                "defaultValue": "42.359144, -71.093612",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnablePan",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableRotation",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableZoom",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "LocationSensor",
                "editorType": "component:com.google.appinventor.components.runtime.LocationSensor",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MapType",
                "editorType": "map_type",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Rotation",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ScaleUnits",
                "editorType": "map_unit_system",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowCompass",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowScale",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowUser",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowZoom",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ZoomLevel",
                "editorType": "map_zoom",
                "defaultValue": "13",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BoundingBox",
                "description": "Bounding box for the map stored as [[North, West], [South, East]].",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CenterFromString",
                "description": "<p>Set the initial center coordinate of the map. The value is specified as a comma-separated pair of decimal latitude and longitude coordinates, for example, <code>42.359144, -71.093612<\/code>.<\/p><p>In blocks code, it is recommended for performance reasons to use SetCenter with numerical latitude and longitude rather than convert to the string representation for use with this property.<\/p>",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "EnablePan",
                "description": "Enable two-finger panning of the Map",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableRotation",
                "description": "Enable rotating the map based on the user's orientation.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableZoom",
                "description": "<p>Set whether the user can zoom the map using touch gestures. This value does not affect\n whether the user can zoom using the zoom controls from",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Features",
                "description": "The list of features placed on this map. This list also includes any features created by calls to FeatureFromDescription",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Latitude",
                "description": "The latitude of the center of the map.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "LocationSensor",
                "description": "Uses the provided LocationSensor for user location data rather than the built-in location provider.",
                "type": "component",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Longitude",
                "description": "The longitude of the center of the map.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "MapType",
                "description": "<p>Set the type of map tile used for the base tile layer. Valid values are:<\/p>\n <ol>\n <li>Roads<\/li>\n <li>Aerial<\/li>\n <li>Terrain<\/li>\n <\/ol>",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Rotation",
                "description": "Sets or gets the rotation of the map in decimal degrees if any",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ScaleUnits",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowCompass",
                "description": "Show a compass on the map. If the device provides a digital compass, orientation changes will\n be used to rotate the compass icon.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowScale",
                "description": "Shows a scale reference on the map.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowUser",
                "description": "Show the user's location on the map.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowZoom",
                "description": "Show the zoom controls on the map.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UserLatitude",
                "description": "Returns the user's latitude if ShowUser is enabled.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "UserLongitude",
                "description": "Returns the user's longitude if ShowUser is enabled.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ZoomLevel",
                "description": "<p>Set the zoom level of the map.<\/p>\n <p>Valid values of ZoomLevel are dependent on the tile provider and the latitude and\n longitude of the map. For example, zoom levels are more constrained over oceans than dense\n city centers to conserve space for storing tiles, so valid values may be 1-7 over ocean and\n 1-18 over cities. Tile providers may send warning or error tiles if the zoom level is too\n great for the server to support.<\/p>",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "BoundsChange",
                "description": "User has changed the map bounds by panning or zooming the map.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "DoubleTapAtPoint",
                "description": "The user double-tapped at a point on the map. This event will be followed by a ZoomChanged event if zooming gestures are enabled and the map is not at the highest possible zoom level.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "FeatureClick",
                "description": "The user clicked on a map feature.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "feature",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "FeatureDrag",
                "description": "The user dragged a map feature.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "feature",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "FeatureLongClick",
                "description": "The user long-pressed on a map feature.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "feature",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "FeatureStartDrag",
                "description": "The user started dragging a map feature.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "feature",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "FeatureStopDrag",
                "description": "The user stopped dragging a map feature.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "feature",
                        "type": "component"
                    }
                ]
            },
            {
                "name": "GotFeatures",
                "description": "A GeoJSON document was successfully read from url. The features specified in the document are provided as a list in features.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    },
                    {
                        "name": "features",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "InvalidPoint",
                "description": "An invalid coordinate was supplied during a maps operation. The message parameter will have more details about the issue.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "LoadError",
                "description": "An error was encountered while processing a GeoJSON document at the given url. The responseCode parameter will contain an HTTP status code and the errorMessage parameter will contain a detailed error message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    },
                    {
                        "name": "responseCode",
                        "type": "number"
                    },
                    {
                        "name": "errorMessage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "LongPressAtPoint",
                "description": "The user long-pressed at a point on the map.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Ready",
                "description": "Map has been initialized and is ready for user interaction.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TapAtPoint",
                "description": "The user tapped at a point on the map.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ZoomChange",
                "description": "User has changed the zoom level of the map.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "CreateMarker",
                "description": "Create a new marker with default properties at the specified latitude and longitude.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ],
                "returnType": "component"
            },
            {
                "name": "FeatureFromDescription",
                "description": "Convert a feature description into an App Inventor map feature. Currently the only\n supported conversion is from a GeoJSON point to Marker component. If the feature has\n properties, they will be mapped into App Inventor properties using the following mapping:\n\n description becomes Description;\n draggable becomes Draggable;\n infobox becomes EnableInfobox;\n fill becomes FillColor;\n fill-opacity becomes FillOpacity;\n image becomes ImageAsset;\n stroke becomes StrokeColor;\n stroke-opacity becomes StrokeOpacity;\n stroke-width becomes StrokeWidth;\n title becomes Title;\n visible becomes Visible",
                "deprecated": "false",
                "params": [
                    {
                        "name": "description",
                        "type": "list"
                    }
                ],
                "returnType": "any"
            },
            {
                "name": "LoadFromURL",
                "description": "<p>Load a feature collection in <a href=\"https:\/\/en.wikipedia.org\/wiki\/GeoJSON\">GeoJSON<\/a> format from the given url. On success, the event GotFeatures will be raised with the given url and a list of the features parsed from the GeoJSON as a list of (key, value) pairs. On failure, the LoadError event will be raised with any applicable HTTP response code and error message.<\/p>",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PanTo",
                "description": "Pan the map center to the given latitude and longitude and adjust the zoom level to the specified zoom.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    },
                    {
                        "name": "zoom",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Save",
                "description": "Save the contents of the Map to the specified path.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "path",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Marker",
        "name": "Marker",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MAPS",
        "helpString": "<p>An icon positioned at a point to indicate information on a map. Markers can be used to provide an info window, custom fill and stroke colors, and custom images to convey information to the user.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AnchorHorizontal",
                "editorType": "horizontal_alignment",
                "defaultValue": "3",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AnchorVertical",
                "editorType": "vertical_alignment",
                "defaultValue": "3",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Description",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Draggable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableInfobox",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FillColor",
                "editorType": "color",
                "defaultValue": "&HFFF34336",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FillOpacity",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ImageAsset",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Latitude",
                "editorType": "latitude",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Longitude",
                "editorType": "longitude",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeOpacity",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeWidth",
                "editorType": "integer",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Title",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AnchorHorizontal",
                "description": "The horizontal alignment property controls where the Marker's anchor is located relative to its width.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AnchorVertical",
                "description": "The vertical alignment property controls where the Marker's anchor is located relative to its height.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Description",
                "description": "The description displayed in the info window that appears when the user clicks on the map feature.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Draggable",
                "description": "The Draggable property is used to set whether or not the user can drag the Marker by long-pressing and then dragging the marker to a new location.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableInfobox",
                "description": "Enable or disable the infobox window display when the user taps the feature.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FillColor",
                "description": "The paint color used to fill in the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FillOpacity",
                "description": "The opacity of the interior of the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ImageAsset",
                "description": "The ImageAsset property is used to provide an alternative image for the Marker.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Latitude",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Longitude",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowShadow",
                "description": "Gets whether or not the shadow of the Marker is shown.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "StrokeColor",
                "description": "The paint color used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeOpacity",
                "description": "The opacity of the stroke used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeWidth",
                "description": "The width of the stroke used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Title",
                "description": "The title displayed in the info window that appears when the user clicks on the map feature.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Type",
                "description": "",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "The user clicked on the feature.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Drag",
                "description": "The user dragged the map feature.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "The user long-pressed on the feature. This event will only trigger if Draggable is false.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StartDrag",
                "description": "The user started a drag operation.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StopDrag",
                "description": "The user stopped a drag operation.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "BearingToFeature",
                "description": "Returns the bearing from the Marker to the given map feature, in degrees from due north. If the centroids parameter is true, the bearing will be to the center of the map feature. Otherwise, the bearing will be computed to the point in the feature nearest the Marker.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "mapFeature",
                        "type": "component"
                    },
                    {
                        "name": "centroids",
                        "type": "boolean"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "BearingToPoint",
                "description": "Returns the bearing from the Marker to the given latitude and longitude, in degrees from due north.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "DistanceToFeature",
                "description": "Compute the distance, in meters, between two map features.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "mapFeature",
                        "type": "component"
                    },
                    {
                        "name": "centroids",
                        "type": "boolean"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "DistanceToPoint",
                "description": "Compute the distance, in meters, between a map feature and a latitude, longitude point.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "HideInfobox",
                "description": "Hide the infobox if it is shown. If the infobox is not visible this function has no effect.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetLocation",
                "description": "Set the location of the marker.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ShowInfobox",
                "description": "Show the infobox for the feature. This will show the infobox even if",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.MemoryInfo",
        "name": "MemoryInfo",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "DEPRECATED",
        "helpString": "Contains various helper methods",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/devicetools.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [],
        "methods": [
            {
                "name": "ExternalStorageAvailable",
                "description": "Available size of external storage in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ExternalStorageTotal",
                "description": "Total external storage size in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ExternalStorageUsed",
                "description": "Size of used-external-storage in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "InternalStorageAvailable",
                "description": "Size of available internal storage in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "InternalStorageTotal",
                "description": "Total size of internal storage in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "InternalStorageUsed",
                "description": "Size of used-internal-storage in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "MemoryFree",
                "description": "Total free RAM size in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "MemoryTotal",
                "description": "Total RAM size in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "MemoryUsed",
                "description": "Size of used-memory in Gigabytes.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Metadata",
        "name": "Metadata",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "Metadata Component to Read the Meta Data of a File",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/metadata.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "File",
                "editorType": "asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "File",
                "description": "The name of the file.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "NoMetadata",
                "description": "Triggers when there is no metadata found in the file.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "type",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Album",
                "description": "Get the Album from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Artist",
                "description": "Get the Artist from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Author",
                "description": "Get the Author from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Bitrate",
                "description": "Get the Bitrate from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Composer",
                "description": "Get the Composer from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "CustomItem",
                "description": "Get a custom metadata item from the file\nyou can find a list of ids on https:\/\/developer.android.com\/reference\/android\/media\/MediaMetadataRetriever.html",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "Date",
                "description": "Get the Date from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "DiscNumber",
                "description": "Get the Disc Number from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Duration",
                "description": "Get the Duration from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "EmbeddedPicture",
                "description": "This method finds the optional graphic or album\/cover art associated associated with the data source. If there are more than one pictures, (any) one of them is returned.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Genre",
                "description": "Get the Genre from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "HasAudio",
                "description": "Get the Has Audio from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "HasVideo",
                "description": "Get the Has Video from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Location",
                "description": "Get the Location from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Mimetype",
                "description": "Get the Mimetype from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Title",
                "description": "Get the Title from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "TrackNumber",
                "description": "Get the Track Number from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "VideoHeight",
                "description": "Get the Video Height from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "VideoRotation",
                "description": "Get the Video Rotation from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "VideoWidth",
                "description": "Get the Video Width from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Writer",
                "description": "Get the Writer from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Year",
                "description": "Get the Year from the file.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.NearField",
        "name": "NearField",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "<p>Non-visible component to provide NFC capabilities.  For now this component supports the reading and writing of text tags only (if supported by the device)<\/p><p>In order to read and write text tags, the component must have its <code>ReadMode<\/code> property set to True or False respectively.<\/p><p><strong>Note:<\/strong> This component will only work on Screen1 of any App Inventor app.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/nearfield.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ReadMode",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "LastMessage",
                "description": "Returns the content of the most recently received tag.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ReadMode",
                "description": "Returns true if in read mode, false if in write mode.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextToWrite",
                "description": "Returns the content of the text that's going to be written to the tag.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WriteType",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "TagRead",
                "description": "Indicates that a new tag has been detected.\n Currently this is only a plain text tag, as specified in the\n manifest.  See Compiler.java.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tagID",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "TagWritten",
                "description": "Event to detect when a tag was written.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.Network",
        "name": "Network",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "CONNECTIVITY",
        "helpString": "Provides basic information about the network connectivity of the device",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/network.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [
            {
                "name": "OnConnect",
                "description": "Called when the device connects to a network.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnDisconnect",
                "description": "Called when the device disconnects from a network.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "IsConnected",
                "description": "Returns \"True\" if the device is connected to a network, \"False\" otherwise.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "IsFastConnection",
                "description": "Returns true if using a fast connection",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "IsMobileConnection",
                "description": "Returns true if connection is through Mobile",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "IsRoaming",
                "description": "Returns true if using roaming",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "IsWiFiConnection",
                "description": "Returns true if connection is through WiFi",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "Type",
                "description": "Returns the type of network the device is connected to. e.g. \"wifi\" or \"mobile\". This block is deprecated, use the \"IsWiFiConnection\" and \"IsMobileConnection\" blocks instead",
                "deprecated": "true",
                "params": [],
                "returnType": "text"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.NetworkManager",
        "name": "NetworkManager",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "DEPRECATED",
        "helpString": "Component for NetworkManager",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/network_mgr.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [
            {
                "name": "IsGPSEnabled",
                "description": "Checks to see if device is GPS enabled and if so, checks to see if GPS is started or not",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "IsGPSEnabledDevice",
                "description": "Checks to see if device is GPS enabled",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "StartGPSOptions",
                "description": "Starts up the GPS configuration activity, giving user option to turn turn on the GPS",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "GetConnectionType",
                "description": "describe the type of the network, for example WIFI or MOBILE",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "IsConnected",
                "description": "Indicates whether network connectivity exists and it is possible to establish connections and pass data.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "IsFastConnection",
                "description": "Returns true if using a fast connection",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "IsMobileConnection",
                "description": "Returns true if connection is through Mobile",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "IsRoaming",
                "description": "Returns true if using using roaming",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "IsWiFiConnection",
                "description": "Returns true if connection is through WiFi",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.NotificationComponent",
        "name": "NotificationComponent",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "INTERNAL",
        "helpString": "A component to send a notification to the users device",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/notification.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Priority",
                "editorType": "notification_priority",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visiblity",
                "editorType": "notification_visibility",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Priority",
                "description": "Set the priority level. 1 = \"Default\", 2 = \"high\", 3 = \"low\", 4 = \"max\", 5 = \"min\"",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visiblity",
                "description": "Set the visibility property. 1 = \"public\", 2 = \"private\", 3 = \"secret\".",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "AreNotificationsEnabled",
                "description": "Check whether the app can send Notifications",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "CancelAll",
                "description": "Cancel all Notifications",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "CancelNotification",
                "description": "Cancel a Notification with an id",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "NotificationBuilderAndroidCar",
                "description": "Set the accent color for Android Car devices",
                "deprecated": "false",
                "params": [
                    {
                        "name": "accentColor",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "NotificationBuilderAndroidWear",
                "description": "Set the background image for Android Wear devices",
                "deprecated": "false",
                "params": [
                    {
                        "name": "backgroundImage",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "NotificationBuilderAutoCancel",
                "description": "Set whether the notification should me removed after the user clicks on it.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "autoCancel",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "NotificationBuilderBigPicture",
                "description": "Set the big picture for the notification",
                "deprecated": "false",
                "params": [
                    {
                        "name": "bigPicture",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "NotificationBuilderID",
                "description": "Set the notification id.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "NotificationBuilderPriority",
                "description": "Set the notification builder priority. 1 = \"Default\", 2 = \"high\", 3 = \"low\", 4 = \"max\", 5 = \"min\"",
                "deprecated": "false",
                "params": [
                    {
                        "name": "priority",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "NotificationBuilderSend",
                "description": "Send the notification that you build",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "NotificationBuilderStart",
                "description": "Start building a new notification",
                "deprecated": "false",
                "params": [
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "NotificationBuilderStartValue",
                "description": "Set the start value of the notification.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "startValue",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "NotificationBuilderVisibility",
                "description": "Set the notification builder visibility. 1 = \"public\", 2 = \"private\", 3 = \"secret\".",
                "deprecated": "false",
                "params": [
                    {
                        "name": "visiblity",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SendAdvancedNotification",
                "description": "Send a advanced notification (Android Wear Support)",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "startValue",
                        "type": "text"
                    },
                    {
                        "name": "timeOn",
                        "type": "number"
                    },
                    {
                        "name": "timeOff",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SendNotification",
                "description": "Send a notification",
                "deprecated": "false",
                "params": [
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Notifier",
        "name": "Notifier",
        "external": "false",
        "version": "11",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "The Notifier component displays alert dialogs, messages, and temporary alerts, and creates Android log entries through the following methods: <ul><li> ShowMessageDialog: displays a message which the user must dismiss by pressing a button.<\/li><li> ShowChooseDialog: displays a message two buttons to let the user choose one of two responses, for example, yes or no, after which the AfterChoosing event is raised.<\/li><li> ShowTextDialog: lets the user enter text in response to the message, after which the AfterTextInput event is raised. <li> ShowPasswordDialog: lets the user enter password in response to the message, after which the AfterTextInput event is raised. <li> ShowAlert: displays a temporary  alert that goes away by itself after a short time.<\/li><li> ShowProgressDialog: displays an alert with a loading spinner that cannot be dismissed by the user. It can only be dismissed by using the DismissProgressDialog block.<\/li><li> CustomMessageDialog: New version to display dialogs with icon and in fullscreen mode.<\/li><li> CustomChooseDialog: New version to display choose dialogs with icon and in fullscreen mode.<li> LightTheme: To display the dialogs in a light or dark theme.<\/li><li> ShowLightbox: Displays a png or gif file from assets or from web url in a dialog.<\/li><li> ShowLinearProgress: Shows a progress dialog with a horizontal progress bar.<\/li><li> ShowSpinningProgress: Shows a spinning progress dialog.<\/li><li> UpdateProgress: Change the current value of the linear progress dialog.<\/li><li> ShowRadioListDialog: Shows a radio list dialog with a list of options.<\/li><li> ShowCheckboxListDialog: Shows a picker dialog with a list of options.<\/li><li> ShowListPicker: Shows a list picker dialog.<\/li><li> ShowTextInputDialog: Show a text input dialog.<\/li><li> ShowImageDialog: Show a image dialog. Animation types like \"*.gif\" are not supported.<\/li><li> ShowNumberPicker: Shows a number picker dialog that enables the user to select a number from a predefined range.<\/li><li> ShowWordPicker: Shows a word picker dialog that enables the user to select a number from a predefined word.<\/li><li> DismissProgressDialog: Dismisses the progress dialog displayed by ShowProgressDialog.<\/li><li> DismissSpinningProgress: Dismisses the progress dialog displayed by ShowSpinningProgress.<\/li><li> DismissLinearProgress: Dismisses the progress dialog displayed by ShowLinearProgress.<\/li><li> LogError: logs an error message to the Android log. <\/li><li> LogInfo: logs an info message to the Android log.<\/li><li> LogWarning: logs a warning message to the Android log.<\/li><li>The messages in the dialogs can be formatted using the following HTML tags:&lt;b&gt;, &lt;big&gt;, &lt;blockquote&gt;, &lt;br&gt;, &lt;cite&gt;, &lt;dfn&gt;, &lt;div&gt;, &lt;em&gt;, &lt;small&gt;, &lt;strong&gt;, &lt;sub&gt;, &lt;sup&gt;, &lt;tt&gt;. &lt;u&gt;<\/li><li>You can also use the font tag to specify color, for example, &lt;font color=\"blue\"&gt;.  Some of the available color names are aqua, black, blue, fuchsia, green, grey, lime, maroon, navy, olive, purple, red, silver, teal, white, and yellow<\/li><\/ul>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/notifier.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DimAmount",
                "editorType": "non_negative_float",
                "defaultValue": "0.5",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "LightTheme",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Linkify",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "NotifierLength",
                "editorType": "toast_length",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextFontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextFontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TitleColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TitleFontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TitleFontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "UseBackgroundColor",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Specifies the background color for alerts (not dialogs).",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DimAmount",
                "description": "Set the amount of dim behind the dialog window. Use '0.0' for no dim and '1.0' for full dim.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "LightTheme",
                "description": "Gets the current theme",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Linkify",
                "description": "If set to true will attempt to make text clickable where possible; e.g. hyperlinks, phone numbers. Can not be used for Progress Dialogs.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "NotifierLength",
                "description": "specifies the length of time that the alert is shown -- either \"short\" or \"long\".",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Specifies the text color for alerts or for dialogs message.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextFontTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextFontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "TitleColor",
                "description": "Specifies the title text color for dialogs.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TitleFontTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TitleFontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "UseBackgroundColor",
                "description": "If enabled the dialog will use the color from the \"Background Color\"-option. Else it will use the theme (light or dark).",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterChoosing",
                "description": "Event to detect that a user have done his selection.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "choice",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AfterMessageDialog",
                "description": "Event to detect that a user clicked on a button from the \"Show Custom Message Dialog\". Use the \"title\" response to know which dialog the user has clicked.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "title",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "AfterTextInput",
                "description": "Event to detect that a user have done his text input in the \"Show Text Dialog\".",
                "deprecated": "false",
                "params": [
                    {
                        "name": "response",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "CheckboxSelection",
                "description": "Invoked after user has finished selecting items from the Checkbox picker. Returns a list of indices of the selected items in the order of selection. Returns a list having -1 if cancel was pressed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "selection",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "CustomDialogSelection",
                "description": "Event to detect that the user has pressed a button from the custom dialog. It returns then the text of the button that was pressed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "selection",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GotCustomChooseDialog",
                "description": "Event to detect that a user have done his selection in the CustomChooseDialog.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "choice",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GotTextInputFromDialog",
                "description": "Event to detect that a user have done his text input in the \"Show Text Input Dialog\".",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "response",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ImageDialogClosed",
                "description": "Event to detect that the user has watched the image dialog.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "LightboxClosed",
                "description": "Event to detect that a user have closed the Lightbox.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "LinearProgressDismissed",
                "description": "Event to detect that the linear progress dialog was dismissed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ListPickerSelection",
                "description": "Event to get the picked list selection from the List Picker.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "item",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "NumberPickerSelection",
                "description": "Event to detect that the user has selected a number from the number picker dialog.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "selection",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "RadioSelection",
                "description": "Event invoked when user has selected an option from the radio button picker. Outputs the index of the selected item. Returns -1 if cancel was pressed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "listIndex",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WordPickerSelection",
                "description": "Event to detect that the user has selected a word from the word picker dialog.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "selection",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "CreateCustomDialog",
                "description": "Show whatever you want in a dialog. You can use as example arrangements, or images or whatever you want. Your chosen layout will be then removed from the screen and only visible in custom dialog. You can use the \"Light Theme\" property to have a light or dark background. Or you enable \"Use Background Color\" property to use the background color property as background dialog color. Please make sure the layout you want to use is visible.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "component",
                        "type": "component"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "buttonText",
                        "type": "text"
                    },
                    {
                        "name": "cancelButtonText",
                        "type": "text"
                    },
                    {
                        "name": "cancelable",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "CustomChooseDialog",
                "description": "Shows a dialog box with two buttons, from which the user can choose.  If cancelable is true there will be an additional CANCEL button. Pressing a button will raise the GotCustomChooseDialog event.  The \"choice\" parameter to GotCustomChooseDialog will be the text on the button that was pressed, or \"Cancel\" if the  CANCEL button was pressed. You can use the \"Light Theme\" property to have a light or dark background. Or you enable \"Use Background Color\" property to use the background color property as background dialog color. Use the 'Show Custom Dialog' block to the show the created custom dialog. The added component must be visible on screen. After you used this block here it will be removed automatic from screen and will be only visible again after you have shown the custom dialog.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "button1Text",
                        "type": "text"
                    },
                    {
                        "name": "button2Text",
                        "type": "text"
                    },
                    {
                        "name": "cancelButtonText",
                        "type": "text"
                    },
                    {
                        "name": "icon",
                        "type": "text"
                    },
                    {
                        "name": "cancelable",
                        "type": "boolean"
                    },
                    {
                        "name": "fullscreen",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "CustomMessageDialog",
                "description": "Show a Message Dialog. You can use the \"Light Theme\" property to have a light or dark background. Or you enable \"Use Background Color\" property to use the background color property as background dialog color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "buttonText",
                        "type": "text"
                    },
                    {
                        "name": "icon",
                        "type": "text"
                    },
                    {
                        "name": "fullscreen",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "DismissCustomDialog",
                "description": "Use this block to dismiss the created custom dialog.the custom dialog.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "DismissLinearProgress",
                "description": "Dismiss a previously displayed LinearProgress box",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "DismissProgressDialog",
                "description": "Dismiss a previously displayed ProgressDialog box",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "DismissSpinningProgress",
                "description": "Dismiss a previously displayed SpinningProgress box",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LogError",
                "description": "Writes an error message to the Android system log. See the Google Android documentation for how to access the log.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "LogInfo",
                "description": "Writes an information message to the Android log.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "LogWarning",
                "description": "Writes a warning message to the Android log. See the Google Android documentation for how to access the log.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShowAlert",
                "description": "Show a alert \"toast\" message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "notice",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShowCheckboxListDialog",
                "description": "Shows a picker dialog with a list of options of whichmore than one can be chosen. Invokes the 'AfterMultiSelection' event. You can use the \"Light Theme\" property to have a light or dark background. Or you enable \"Use Background Color\" property to use the background color property as background dialog color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "options",
                        "type": "list"
                    },
                    {
                        "name": "buttonText",
                        "type": "text"
                    },
                    {
                        "name": "cancelButtonText",
                        "type": "text"
                    },
                    {
                        "name": "cancelable",
                        "type": "boolean"
                    },
                    {
                        "name": "icon",
                        "type": "text"
                    },
                    {
                        "name": "fullscreen",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "ShowChooseDialog",
                "description": "Shows a dialog box with two buttons, from which the user can choose.  If cancelable is true there will be an additional CANCEL button. Pressing a button will raise the AfterChoosing event.  The \"choice\" parameter to AfterChoosing will be the text on the button that was pressed, or \"Cancel\" if the  CANCEL button was pressed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "button1Text",
                        "type": "text"
                    },
                    {
                        "name": "button2Text",
                        "type": "text"
                    },
                    {
                        "name": "cancelable",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "ShowCustomDialog",
                "description": "Show the custom dialog. Dont forget that you have first to create the custom dialog.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowImageDialog",
                "description": "Show a image dialog. Animation types like \"*.gif\" are not supported. You can use the \"Light Theme\" property to have a light or dark background. Or you enable \"Use Background Color\" property to use the background color property as background dialog color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "image",
                        "type": "text"
                    },
                    {
                        "name": "buttonText",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShowLightbox",
                "description": "Displays a lightbox. You can use images like \"*.png\" or \"*,gif\" from assets folder or from a web url.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "image",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShowLinearProgress",
                "description": "Shows a progress dialog with a horizontal progress bar. Can be dismissed by user if 'cancelable' is set to true. If indeterminate is true, maxValue and the 'UpdateProgress' method will have no effect. You can use the \"Light Theme\" property to have a light or dark background. Or you enable \"Use Background Color\" property to use the background color property as background dialog color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "cancelable",
                        "type": "boolean"
                    },
                    {
                        "name": "indeterminate",
                        "type": "boolean"
                    },
                    {
                        "name": "maxValue",
                        "type": "number"
                    },
                    {
                        "name": "icon",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShowListPicker",
                "description": "Shows a list picker dialog. You can use the \"Light Theme\" property to have a light or dark background. Or you enable \"Use Background Color\" property to use the background color property as background dialog color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "itemsList",
                        "type": "list"
                    },
                    {
                        "name": "icon",
                        "type": "text"
                    },
                    {
                        "name": "fullscreen",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "ShowMessageDialog",
                "description": "Show a Message Dialog.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "buttonText",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShowNumberPicker",
                "description": "Shows a number picker dialog that enables the user to select a number from a predefined range. You can use the \"Use Background Color\" property to use the background color property as background dialog color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "buttonText",
                        "type": "text"
                    },
                    {
                        "name": "cancelButtonText",
                        "type": "text"
                    },
                    {
                        "name": "minValue",
                        "type": "number"
                    },
                    {
                        "name": "maxValue",
                        "type": "number"
                    },
                    {
                        "name": "startValue",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ShowPasswordDialog",
                "description": "Shows a dialog box where the user can enter password (input is masked), after which the AfterTextInput event will be raised.  If cancelable is true there will be an additional CANCEL button. Entering password will raise the AfterTextInput event.  The \"response\" parameter to AfterTextInput will be the entered password, or \"Cancel\" if CANCEL button was pressed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "cancelable",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "ShowProgressDialog",
                "description": "Shows a dialog box with an optional title and message (use empty strings if they are not wanted). This dialog box contains a spinning artifact to indicate that the program is working. It cannot be canceled by the user but must be dismissed by the App Inventor Program by using the DismissProgressDialog block.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShowRadioListDialog",
                "description": "Shows a radio list dialog with a list of options of which only one can be chosen. You can use the \"Light Theme\" property to have a light or dark background. Or you enable \"Use Background Color\" property to use the background color property as background dialog color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "options",
                        "type": "list"
                    },
                    {
                        "name": "chooseButtonText",
                        "type": "text"
                    },
                    {
                        "name": "cancelable",
                        "type": "boolean"
                    },
                    {
                        "name": "cancelButtonText",
                        "type": "text"
                    },
                    {
                        "name": "selection",
                        "type": "number"
                    },
                    {
                        "name": "icon",
                        "type": "text"
                    },
                    {
                        "name": "fullscreen",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "ShowSpinningProgress",
                "description": "Shows a spinning progress dialog which can be dismissed by the user if 'cancelable' is set to true. You can use the \"Light Theme\" property to have a light or dark background. Or you enable \"Use Background Color\" property to use the background color property as background dialog color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "cancelable",
                        "type": "boolean"
                    },
                    {
                        "name": "icon",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShowTextDialog",
                "description": "Shows a dialog box where the user can enter text, after which the AfterTextInput event will be raised.  If cancelable is true there will be an additional CANCEL button. Entering text will raise the AfterTextInput event.  The \"response\" parameter to AfterTextInput will be the text that was entered, or \"Cancel\" if the CANCEL button was pressed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "cancelable",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "ShowTextInputDialog",
                "description": "Show a text input dialog. Possible input types are: \"1= Normal text\", \"2= Password text\", \"3= Person name\", \"4= Email adress\", \"5|6= Number\", \"7= Password number\" or \"8= datetime\". You can use the \"Light Theme\" property to have a light or dark background. Or you enable \"Use Background Color\" property to use the background color property as background dialog color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "defaultText",
                        "type": "text"
                    },
                    {
                        "name": "icon",
                        "type": "text"
                    },
                    {
                        "name": "hint",
                        "type": "text"
                    },
                    {
                        "name": "fullscreen",
                        "type": "boolean"
                    },
                    {
                        "name": "cancelable",
                        "type": "boolean"
                    },
                    {
                        "name": "inputType",
                        "type": "number"
                    },
                    {
                        "name": "buttonText",
                        "type": "text"
                    },
                    {
                        "name": "cancelButtonText",
                        "type": "text"
                    },
                    {
                        "name": "textColor",
                        "type": "number"
                    },
                    {
                        "name": "hintColor",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ShowWordPicker",
                "description": "Shows a word picker dialog that enables the user to select a number from a predefined word. You can use the \"Use Background Color\" property to use the background color property as background dialog color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "number"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "buttonText",
                        "type": "text"
                    },
                    {
                        "name": "cancelButtonText",
                        "type": "text"
                    },
                    {
                        "name": "itemsList",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "UpdateProgress",
                "description": "Change the current value of the linear progress dialog. Has no effect if \"indeterminate\" is set to true.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "value",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.NxtColorSensor",
        "name": "NxtColorSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "NXT",
        "helpString": "A component that provides a high-level interface to a color sensor on a LEGO MINDSTORMS NXT robot.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsNxt.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AboveRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BelowRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BottomOfRange",
                "editorType": "non_negative_integer",
                "defaultValue": "256",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ColorChangedEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DetectColor",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "GenerateColor",
                "editorType": "lego_nxt_generated_color",
                "defaultValue": "&H00FFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SensorPort",
                "editorType": "lego_nxt_sensor_port",
                "defaultValue": "3",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TopOfRange",
                "editorType": "non_negative_integer",
                "defaultValue": "767",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "WithinRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AboveRangeEventEnabled",
                "description": "Whether the AboveRange event should fire when the DetectColor property is set to False and the light level goes above the TopOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BelowRangeEventEnabled",
                "description": "Whether the BelowRange event should fire when the DetectColor property is set to False and the light level goes below the BottomOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "BottomOfRange",
                "description": "The bottom of the range used for the BelowRange, WithinRange, and AboveRange events.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ColorChangedEventEnabled",
                "description": "Whether the ColorChanged event should fire when the DetectColor property is set to True and the detected color changes.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DetectColor",
                "description": "Whether the sensor should detect color or light. True indicates that the sensor should detect color; False indicates that the sensor should detect light. If the DetectColor property is set to True, the BelowRange, WithinRange, and AboveRange events will not occur and the sensor will not generate color. If the DetectColor property is set to False, the ColorChanged event will not occur.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "GenerateColor",
                "description": "The color that should generated by the sensor. Only None, Red, Green, or Blue are valid values. The sensor will not generate color when the DetectColor property is set to True.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SensorPort",
                "description": "The sensor port that the sensor is connected to.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TopOfRange",
                "description": "The top of the range used for the BelowRange, WithinRange, and AboveRange events.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WithinRangeEventEnabled",
                "description": "Whether the WithinRange event should fire when the DetectColor property is set to False and the light level goes between the BottomOfRange and the TopOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AboveRange",
                "description": "Light level has gone above the range. The AboveRange event will not occur if the DetectColor property is set to True or if the AboveRangeEventEnabled property is set to False.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "BelowRange",
                "description": "Light level has gone below the range. The BelowRange event will not occur if the DetectColor property is set to True or if the BelowRangeEventEnabled property is set to False.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ColorChanged",
                "description": "Detected color has changed. The ColorChanged event will not occur if the DetectColor property is set to False or if the ColorChangedEventEnabled property is set to False.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithinRange",
                "description": "Light level has gone within the range. The WithinRange event will not occur if the DetectColor property is set to True or if the WithinRangeEventEnabled property is set to False.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "GetColor",
                "description": "Returns the current detected color, or the color None if the color can not be read or if the DetectColor property is set to False.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "GetLightLevel",
                "description": "Returns the current light level as a value between 0 and 1023, or -1 if the light level can not be read or if the DetectColor property is set to True.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.NxtDirectCommands",
        "name": "NxtDirectCommands",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "NXT",
        "helpString": "A component that provides a low-level interface to a LEGO MINDSTORMS NXT robot, with functions to send NXT Direct Commands.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsNxt.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "DeleteFile",
                "description": "Delete a file on the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "fileName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "DownloadFile",
                "description": "Download a file to the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "source",
                        "type": "text"
                    },
                    {
                        "name": "destination",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GetBatteryLevel",
                "description": "Get the battery level for the robot. Returns the voltage in millivolts.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "GetBrickName",
                "description": "Get the brick name of the robot.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "GetCurrentProgramName",
                "description": "Get the name of currently running program on the robot.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "GetFirmwareVersion",
                "description": "Get the firmware and protocol version numbers for the robot as a list where the first element is the firmware version number and the second element is the protocol version number.",
                "deprecated": "false",
                "params": [],
                "returnType": "list"
            },
            {
                "name": "GetInputValues",
                "description": "Reads the values of an input sensor on the robot. Assumes sensor type has been configured via SetInputMode.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "sensorPortLetter",
                        "type": "text"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "GetOutputState",
                "description": "Reads the output state of a motor on the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "motorPortLetter",
                        "type": "text"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "KeepAlive",
                "description": "Keep Alive. Returns the current sleep time limit in milliseconds.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "ListFiles",
                "description": "Returns a list containing the names of matching files found on the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "wildcard",
                        "type": "text"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "LsGetStatus",
                "description": "Returns the count of available bytes to read.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "sensorPortLetter",
                        "type": "text"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "LsRead",
                "description": "Reads unsigned low speed data from an input sensor on the robot. Assumes sensor type has been configured via SetInputMode.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "sensorPortLetter",
                        "type": "text"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "LsWrite",
                "description": "Writes low speed data to an input sensor on the robot. Assumes sensor type has been configured via SetInputMode.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "sensorPortLetter",
                        "type": "text"
                    },
                    {
                        "name": "list",
                        "type": "list"
                    },
                    {
                        "name": "rxDataLength",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "MessageRead",
                "description": "Read a message from a mailbox (1-10) on the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "mailbox",
                        "type": "number"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "MessageWrite",
                "description": "Write a message to a mailbox (1-10) on the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "mailbox",
                        "type": "number"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PlaySoundFile",
                "description": "Play a sound file on the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "fileName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PlayTone",
                "description": "Make the robot play a tone.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "frequencyHz",
                        "type": "number"
                    },
                    {
                        "name": "durationMs",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ResetInputScaledValue",
                "description": "Reset the scaled value of an input sensor on the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "sensorPortLetter",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ResetMotorPosition",
                "description": "Reset motor position.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "motorPortLetter",
                        "type": "text"
                    },
                    {
                        "name": "relative",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "SetBrickName",
                "description": "Set the brick name of the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "name",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SetInputMode",
                "description": "Configure an input sensor on the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "sensorPortLetter",
                        "type": "text"
                    },
                    {
                        "name": "sensorType",
                        "type": "number"
                    },
                    {
                        "name": "sensorMode",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetOutputState",
                "description": "Sets the output state of a motor on the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "motorPortLetter",
                        "type": "text"
                    },
                    {
                        "name": "power",
                        "type": "number"
                    },
                    {
                        "name": "mode",
                        "type": "number"
                    },
                    {
                        "name": "regulationMode",
                        "type": "number"
                    },
                    {
                        "name": "turnRatio",
                        "type": "number"
                    },
                    {
                        "name": "runState",
                        "type": "number"
                    },
                    {
                        "name": "tachoLimit",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "StartProgram",
                "description": "Start execution of a previously downloaded program on the robot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "programName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "StopProgram",
                "description": "Stop execution of the currently running program on the robot.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StopSoundPlayback",
                "description": "Stop sound playback.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.NxtDrive",
        "name": "NxtDrive",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "NXT",
        "helpString": "A component that provides a high-level interface to a LEGO MINDSTORMS NXT robot, with functions that can move and turn the robot.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsNxt.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DriveMotors",
                "editorType": "string",
                "defaultValue": "CB",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StopBeforeDisconnect",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "WheelDiameter",
                "editorType": "float",
                "defaultValue": "4.32",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "DriveMotors",
                "description": "The motor ports that are used for driving: the left wheel's motor port followed by the right wheel's motor port.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "StopBeforeDisconnect",
                "description": "Whether to stop the drive motors before disconnecting.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WheelDiameter",
                "description": "The diameter of the wheels used for driving.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "MoveBackward",
                "description": "Move the robot backward the given distance, with the specified percentage of maximum power, by powering both drive motors backward.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    },
                    {
                        "name": "distance",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "MoveBackwardIndefinitely",
                "description": "Move the robot backward indefinitely, with the specified percentage of maximum power, by powering both drive motors backward.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "MoveForward",
                "description": "Move the robot forward the given distance, with the specified percentage of maximum power, by powering both drive motors forward.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    },
                    {
                        "name": "distance",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "MoveForwardIndefinitely",
                "description": "Move the robot forward indefinitely, with the specified percentage of maximum power, by powering both drive motors forward.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Stop",
                "description": "Stop the drive motors of the robot.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TurnClockwiseIndefinitely",
                "description": "Turn the robot clockwise indefinitely, with the specified percentage of maximum power, by powering the left drive motor forward and the right drive motor backward.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "TurnCounterClockwiseIndefinitely",
                "description": "Turn the robot counterclockwise indefinitely, with the specified percentage of maximum power, by powering the right drive motor forward and the left drive motor backward.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "power",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.NxtLightSensor",
        "name": "NxtLightSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "NXT",
        "helpString": "A component that provides a high-level interface to a light sensor on a LEGO MINDSTORMS NXT robot.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsNxt.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AboveRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BelowRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BottomOfRange",
                "editorType": "non_negative_integer",
                "defaultValue": "256",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "GenerateLight",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SensorPort",
                "editorType": "lego_nxt_sensor_port",
                "defaultValue": "3",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TopOfRange",
                "editorType": "non_negative_integer",
                "defaultValue": "767",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "WithinRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AboveRangeEventEnabled",
                "description": "Whether the AboveRange event should fire when the light level goes above the TopOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BelowRangeEventEnabled",
                "description": "Whether the BelowRange event should fire when the light level goes below the BottomOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "BottomOfRange",
                "description": "The bottom of the range used for the BelowRange, WithinRange, and AboveRange events.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "GenerateLight",
                "description": "Whether the light sensor should generate light.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SensorPort",
                "description": "The sensor port that the sensor is connected to.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TopOfRange",
                "description": "The top of the range used for the BelowRange, WithinRange, and AboveRange events.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WithinRangeEventEnabled",
                "description": "Whether the WithinRange event should fire when the light level goes between the BottomOfRange and the TopOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AboveRange",
                "description": "Light level has gone above the range.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "BelowRange",
                "description": "Light level has gone below the range.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "WithinRange",
                "description": "Light level has gone within the range.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "GetLightLevel",
                "description": "Returns the current light level as a value between 0 and 1023, or -1 if the light level can not be read.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.NxtSoundSensor",
        "name": "NxtSoundSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "NXT",
        "helpString": "A component that provides a high-level interface to a sound sensor on a LEGO MINDSTORMS NXT robot.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsNxt.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AboveRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BelowRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BottomOfRange",
                "editorType": "non_negative_integer",
                "defaultValue": "256",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SensorPort",
                "editorType": "lego_nxt_sensor_port",
                "defaultValue": "2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TopOfRange",
                "editorType": "non_negative_integer",
                "defaultValue": "767",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "WithinRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AboveRangeEventEnabled",
                "description": "Whether the AboveRange event should fire when the sound level goes above the TopOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BelowRangeEventEnabled",
                "description": "Whether the BelowRange event should fire when the sound level goes below the BottomOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "BottomOfRange",
                "description": "The bottom of the range used for the BelowRange, WithinRange, and AboveRange events.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SensorPort",
                "description": "The sensor port that the sensor is connected to.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TopOfRange",
                "description": "The top of the range used for the BelowRange, WithinRange, and AboveRange events.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WithinRangeEventEnabled",
                "description": "Whether the WithinRange event should fire when the sound level goes between the BottomOfRange and the TopOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AboveRange",
                "description": "Sound level has gone above the range.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "BelowRange",
                "description": "Sound level has gone below the range.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "WithinRange",
                "description": "Sound level has gone within the range.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "GetSoundLevel",
                "description": "Returns the current sound level as a value between 0 and 1023, or -1 if the sound level can not be read.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.NxtTouchSensor",
        "name": "NxtTouchSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "NXT",
        "helpString": "A component that provides a high-level interface to a touch sensor on a LEGO MINDSTORMS NXT robot.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsNxt.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PressedEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ReleasedEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SensorPort",
                "editorType": "lego_nxt_sensor_port",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "PressedEventEnabled",
                "description": "Whether the Pressed event should fire when the touch sensor is pressed.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ReleasedEventEnabled",
                "description": "Whether the Released event should fire when the touch sensor is released.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SensorPort",
                "description": "The sensor port that the sensor is connected to.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Pressed",
                "description": "Touch sensor has been pressed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Released",
                "description": "Touch sensor has been released.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "IsPressed",
                "description": "Returns true if the touch sensor is pressed.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.NxtUltrasonicSensor",
        "name": "NxtUltrasonicSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "NXT",
        "helpString": "A component that provides a high-level interface to an ultrasonic sensor on a LEGO MINDSTORMS NXT robot.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/legoMindstormsNxt.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AboveRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BelowRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BluetoothClient",
                "editorType": "BluetoothClient",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BottomOfRange",
                "editorType": "non_negative_integer",
                "defaultValue": "30",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SensorPort",
                "editorType": "lego_nxt_sensor_port",
                "defaultValue": "4",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TopOfRange",
                "editorType": "non_negative_integer",
                "defaultValue": "90",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "WithinRangeEventEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AboveRangeEventEnabled",
                "description": "Whether the AboveRange event should fire when the distance goes above the TopOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BelowRangeEventEnabled",
                "description": "Whether the BelowRange event should fire when the distance goes below the BottomOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BluetoothClient",
                "description": "The BluetoothClient component that should be used for communication.",
                "type": "component",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "BottomOfRange",
                "description": "The bottom of the range used for the BelowRange, WithinRange, and AboveRange events.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SensorPort",
                "description": "The sensor port that the sensor is connected to.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TopOfRange",
                "description": "The top of the range used for the BelowRange, WithinRange, and AboveRange events.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WithinRangeEventEnabled",
                "description": "Whether the WithinRange event should fire when the distance goes between the BottomOfRange and the TopOfRange.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AboveRange",
                "description": "Distance has gone above the range.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "BelowRange",
                "description": "Distance has gone below the range.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "WithinRange",
                "description": "Distance has gone within the range.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "GetDistance",
                "description": "Returns the current distance in centimeters as a value between 0 and 254, or -1 if the distance can not be read.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Ocr",
        "name": "Ocr",
        "external": "false",
        "version": "5",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "Component for Ocr",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/ocr.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ApiKey",
                "editorType": "string",
                "defaultValue": "helloworld",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CreateSearchablePdf",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Language",
                "editorType": "ocr_language",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Overlayed",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ApiKey",
                "description": "You can use the default api key: helloworld, or you can create your own api key at: https:\/\/ocr.space\/ocrapi",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CreateSearchablePdf",
                "description": "A searchable PDF file is a PDF file that includes text that can be searched upon using the standard Adobe Reader \u201csearch\u201d functionality. In addition, the text can be selected and copied from the PDF. In this case the JSON response of the API contains a download link for the the searchable PDF. This download link is valid for one hour, than all data is removed from the OCR servers.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Language",
                "description": "Choose the language used for OCR. If no language is specified, English is taken as 'Default'.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Overlayed",
                "description": "Allows you to specify if the image\/pdf text overlay is required. Overlay could be used to show the text over the image.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ReturnOnlyMessage",
                "description": "Set this block before you upload a image and before you try to get the response from a image url. If this property is set to true, the response content returns only the message. That means the response content will be only the scanned text in words.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ReturnOnlyPdfLink",
                "description": "Set this block before you upload a image and before you try to get the response from a image url. If this property is set to true, the response content returns only the created pdf download link.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "TestImageUrl",
                "description": "You can use the test image url if you have not any picture online on a server or else.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotResponse",
                "description": "You will find here the success state and the response content.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    },
                    {
                        "name": "responseContent",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GotServerStatus",
                "description": "You will find here the server status from the ocr provider. Possible results are 'UP' or 'DOWN'. 'pro Usa1' = Usa, East Coast. 'pro Usa2' = Usa, West Coast.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "free",
                        "type": "text"
                    },
                    {
                        "name": "proUsa1",
                        "type": "text"
                    },
                    {
                        "name": "proUsa2",
                        "type": "text"
                    },
                    {
                        "name": "proEurope",
                        "type": "text"
                    },
                    {
                        "name": "proAsia",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "GetOcrServerStatus",
                "description": "Get the server status from the free ocr.space server. This is helpful if you want to know if the server is online or offline. Returns true when online, else false when offline.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GetTextFromImageUrl",
                "description": "Get the text from a picture via the image url. Example: http:\/\/name\/yourimage.jpg. Service powered by ocr.space.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "imageUrl",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UploadImage",
                "description": "Upload your image to the server from ocr.space and then you get back the text from the picture.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "path",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.OrientationSensor",
        "name": "OrientationSensor",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "<p>Non-visible component providing information about the device's physical orientation in three dimensions: <ul> <li> <strong>Roll<\/strong>: 0 degrees when the device is level, increases to      90 degrees as the device is tilted up on its left side, and      decreases to -90 degrees when the device is tilted up on its right side.      <\/li> <li> <strong>Pitch<\/strong>: 0 degrees when the device is level, up to      90 degrees as the device is tilted so its top is pointing down,      up to 180 degrees as it gets turned over.  Similarly, as the device      is tilted so its bottom points down, pitch decreases to -90      degrees, then further decreases to -180 degrees as it gets turned all the way      over.<\/li> <li> <strong>Azimuth<\/strong>: 0 degrees when the top of the device is      pointing north, 90 degrees when it is pointing east, 180 degrees      when it is pointing south, 270 degrees when it is pointing west,      etc.<\/li><\/ul>     These measurements assume that the device itself is not moving.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/orientationsensor.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Angle",
                "description": "<p>Angle property getter method (read-only property).  Specifically, this\n provides the angle in which the orientation sensor is tilted, treating",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Available",
                "description": "Available property getter method (read-only property).",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Azimuth",
                "description": "Azimuth property getter method (read-only property).\n\n <p>To return meaningful values the sensor must be enabled.<\/p>",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "Enabled property getter method.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Magnitude",
                "description": "Magnitude property getter method (read-only property).  Specifically, this\n returns a number between 0 and 1, indicating how much the device\n is tilted.  For the angle of tilt, use",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Pitch",
                "description": "Pitch property getter method (read-only property).\n\n <p>To return meaningful values the sensor must be enabled.<\/p>",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Roll",
                "description": "Roll property getter method (read-only property).\n\n <p>To return meaningful values the sensor must be enabled.<\/p>",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "OrientationChanged",
                "description": "Default OrientationChanged event handler.\n\n <p>This event is signalled when the device's orientation has changed.  It\n reports the new values of azimuth, pich, and roll, and it also sets the Azimuth, Pitch,\n and roll properties.<\/p>\n <p>Azimuth is the compass heading in degrees, pitch indicates how the device\n is tilted from top to bottom, and roll indicates how much the device is tilted from\n side to side.<\/p>",
                "deprecated": "false",
                "params": [
                    {
                        "name": "azimuth",
                        "type": "number"
                    },
                    {
                        "name": "pitch",
                        "type": "number"
                    },
                    {
                        "name": "roll",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.Package",
        "name": "Package",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "Component for Package",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/package.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [
            {
                "name": "AppName",
                "description": "Returns the name from the current running app.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "PackageName",
                "description": "Returns the package name from the current running app.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "VersionCode",
                "description": "This block will returns the version code of the current running app.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "VersionName",
                "description": "This block will returns the version name of the current running app.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "AppNameFrom",
                "description": "Returns the name from the given package name.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "packageName",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "GetPackageIcon",
                "description": "Try to show the application icon of the given package name. If the application cannot be found, \"Package not found\" is the output.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "packageName",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "IsPackageInstalled",
                "description": "Returns true if a package (app) is installed and enabled.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "packageName",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "VersionCodeFrom",
                "description": "This block will returns the version code of the package name. Returns '-1' if the package is not installed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "packageName",
                        "type": "text"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "VersionNameFrom",
                "description": "This block will returns the version name of the package name. Returns 'Package not found' if the package is not installed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "packageName",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "isPermissionGranted",
                "description": "Check whether a particular package has been granted a particular permission.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "permissionName",
                        "type": "text"
                    },
                    {
                        "name": "packageName",
                        "type": "text"
                    }
                ],
                "returnType": "boolean"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.PasswordTextBox",
        "name": "PasswordTextBox",
        "external": "false",
        "version": "6",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "INTERNAL",
        "helpString": "<p>A box for entering passwords.  This is the same as the ordinary <code>TextBox<\/code> component except this does not display the characters typed by the user.<\/p><p>The value of the text in the box can be found or set through the <code>Text<\/code> property. If blank, the <code>Hint<\/code> property, which appears as faint text in the box, can provide the user with guidance as to what to type.<\/p> <p>Text boxes are usually used with the <code>Button<\/code> component, with the user clicking on the button when text entry is complete.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CursorColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "CursorVisible",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Hint",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HintColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "textArea",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "The background color of the input box.  You can choose a color by name in the Designer or in the Blocks Editor.  The default background color is 'default' (shaded 3-D look).",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "CurrentPosition",
                "description": "Get the current cursor position.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "CursorColor",
                "description": "The color of the cursor.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CursorVisible",
                "description": "Makes the cursor visible (the default) or invisible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableCopyPaste",
                "description": "DEPRECATED since this feature is not working. Use 'Enabled' instead.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "true"
            },
            {
                "name": "Enabled",
                "description": "Whether the user can enter text into this input box.  By default, this is true.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "Whether the font for the text should be bold.  By default, it is not.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "Whether the text should appear in italics.  By default, it does not.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "The font size for the text.  By default, it is 14.0 points.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "The font for the text.  The value can be changed in the Designer.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Hint",
                "description": "Text that should appear faintly in the input box to provide a hint as to what the user should enter.  This can only be seen if the <code>Text<\/code> property is empty.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HintColor",
                "description": "Set a custom hint text color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "LineColor",
                "description": "Please delete this block from your project.This block is deprecated and not longer supported.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "true"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the textbox is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Returns the textbox contents.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Whether the text should be left justified, centered, or right justified.  By default, text is left justified.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "The color for the text.  You can choose a color by name in the Designer or in the Blocks Editor.  The default text color is black.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextLength",
                "description": "Returns the current text length as number.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotFocus",
                "description": "Event raised when this component is selected for input, such as by\n the user touching it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Event raised when this component is no longer selected for input, such\n as if the user touches a different text box.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnTextChanged",
                "description": "Event to detect text changes.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "RequestFocus",
                "description": "Sets the textbox active.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetCursorAt",
                "description": "Set the cursor to the given position.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetCursorAtEnd",
                "description": "Set the cursor to the end of the text.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Pedometer",
        "name": "Pedometer",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "A Component that acts like a Pedometer. It senses motion via the Accerleromter and attempts to determine if a step has been taken. Using a configurable stride length, it can estimate the distance traveled as well. ",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/pedometer.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "StopDetectionTimeout",
                "editorType": "non_negative_integer",
                "defaultValue": "2000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrideLength",
                "editorType": "non_negative_float",
                "defaultValue": "0.73",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "CalibrateStrideLength",
                "description": "deprecated",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "true"
            },
            {
                "name": "Distance",
                "description": "The approximate distance traveled in meters.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ElapsedTime",
                "description": "Time elapsed in milliseconds since the pedometer was started.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Moving",
                "description": "deprecated",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "true"
            },
            {
                "name": "SimpleSteps",
                "description": "The number of simple steps taken since the pedometer has started.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "StopDetectionTimeout",
                "description": "The duration in milliseconds of idleness (no steps detected) after which to go into a \"stopped\" state",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrideLength",
                "description": "Set the average stride length in meters.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UseGPS",
                "description": "",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "true"
            },
            {
                "name": "WalkSteps",
                "description": "the number of walk steps taken since the pedometer has started.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "CalibrationFailed",
                "description": "deprecated",
                "deprecated": "true",
                "params": []
            },
            {
                "name": "GPSAvailable",
                "description": "deprecated",
                "deprecated": "true",
                "params": []
            },
            {
                "name": "GPSLost",
                "description": "deprecated",
                "deprecated": "true",
                "params": []
            },
            {
                "name": "SimpleStep",
                "description": "This event is run when a raw step is detected",
                "deprecated": "false",
                "params": [
                    {
                        "name": "simpleSteps",
                        "type": "number"
                    },
                    {
                        "name": "distance",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "StartedMoving",
                "description": "deprecated",
                "deprecated": "true",
                "params": []
            },
            {
                "name": "StoppedMoving",
                "description": "deprecated",
                "deprecated": "true",
                "params": []
            },
            {
                "name": "WalkStep",
                "description": "This event is run when a walking step is detected. A walking step is a step that appears to be involved in forward motion.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "walkSteps",
                        "type": "number"
                    },
                    {
                        "name": "distance",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Pause",
                "description": "Pause counting of steps and distance.",
                "deprecated": "true",
                "params": []
            },
            {
                "name": "Reset",
                "description": "Resets the step counter, distance measure and time running.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Resume",
                "description": "Resumes counting, synonym of Start.",
                "deprecated": "true",
                "params": []
            },
            {
                "name": "Save",
                "description": "Saves the pedometer state to the phone. Permits permits accumulation of steps and distance between invocations of an App that uses the pedometer. Different Apps will have their own saved state.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Start",
                "description": "Start counting steps",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Stop",
                "description": "Stop counting steps",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.PhoneCall",
        "name": "PhoneCall",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SOCIAL",
        "helpString": "<p>A non-visible component that makes a phone call to the number specified in the <code>PhoneNumber<\/code> property, which can be set either in the Designer or Blocks Editor. The component has a <code>MakePhoneCall<\/code> method, enabling the program to launch a phone call.<\/p><p>Often, this component is used with the <code>ContactPicker<\/code> component, which lets the user select a contact from the ones stored on the phone and sets the <code>PhoneNumber<\/code> property to the contact's phone number.<\/p><p>To directly specify the phone number (e.g., 650-555-1212), set the <code>PhoneNumber<\/code> property to a Text with the specified digits (e.g., \"6505551212\").  Dashes, dots, and parentheses may be included (e.g., \"(650)-555-1212\") but will be ignored; spaces may not be included.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/phoneCall.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "PhoneNumber",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "PhoneNumber",
                "description": "PhoneNumber property getter method.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "IncomingCallAnswered",
                "description": "Event indicating that an incoming phone call is answered. phoneNumber is the incoming call phone number.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "phoneNumber",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PhoneCallEnded",
                "description": "Event indicating that a phone call has ended. If status is 1, incoming call is missed or rejected; if status is 2, incoming call is answered before hanging up; if status is 3, outgoing call is hung up. phoneNumber is the ended call phone number.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "status",
                        "type": "number"
                    },
                    {
                        "name": "phoneNumber",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PhoneCallStarted",
                "description": "Event indicating that a phonecall has started. If status is 1, incoming call is ringing; if status is 2, outgoing call is dialled. phoneNumber is the incoming\/outgoing phone number.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "status",
                        "type": "number"
                    },
                    {
                        "name": "phoneNumber",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "MakePhoneCall",
                "description": "Makes a phone call using the number in the PhoneNumber property.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.PhoneNumberPicker",
        "name": "PhoneNumberPicker",
        "external": "false",
        "version": "10",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SOCIAL",
        "helpString": "A button that, when clicked on, displays a list of the contacts' phone numbers to choose among. After the user has made a selection, the following properties will be set to information about the chosen contact: <ul>\n<li> <code>ContactName<\/code>: the contact's name <\/li>\n <li> <code>PhoneNumber<\/code>: the contact's phone number <\/li>\n <li> <code>EmailAddress<\/code>: the contact's email address <\/li> <li> <code>Picture<\/code>: the name of the file containing the contact's image, which can be used as a <code>Picture<\/code> property value for the <code>Image<\/code> or <code>ImageSprite<\/code> component.<\/li><\/ul>\n<\/p><p>Other properties affect the appearance of the button (<code>TextAlignment<\/code>, <code>BackgroundColor<\/code>, etc.) and whether it can be clicked on (<code>Enabled<\/code>).<\/p>\n<p>The PhoneNumberPicker component may not work on all Android devices. For example, on Android systems before system 3.0, the returned lists of phone numbers and email addresses will be empty.\n",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BorderShadow",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HTMLFormat",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Shape",
                "editorType": "button_shape",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowFeedback",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TouchColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Returns the button's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BorderShadow",
                "description": "Returns true if the button have a outside border shadow on click.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ContactName",
                "description": "Name property getter method.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ContactUri",
                "description": "URI that specifies the location of the contact on the device.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "EmailAddress",
                "description": "EmailAddress property getter method.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "EmailAddressList",
                "description": "EmailAddressList property getter method.",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If set, user can tap check box to cause action.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "If set, button text is displayed in bold.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "If set, button text is displayed in italics.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "Point size for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "Font family for button text.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HTMLFormat",
                "description": "If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Image to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PhoneNumber",
                "description": "PhoneNumber property getter method.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "PhoneNumberList",
                "description": "PhoneNumberList property getter method.",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Picture",
                "description": "Picture URI for this contact, which can be\n used to retrieve the contact's photo and other fields.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Shape",
                "description": "Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ShowFeedback",
                "description": "Specifies if a visual feedback should be shown for a button that as an image as background.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Text to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Left, center, or right.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Color for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TouchColor",
                "description": "Set the buttons touch color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterPicking",
                "description": "Event to be raised after the picker activity returns its\n result and the properties have been filled in.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "selection",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "BeforePicking",
                "description": "Event to raise when the button of the component is clicked or the list is shown\n using the Open block.  This event occurs before the list of items is displayed, and\n can be used to prepare the list before it is shown.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GotFocus",
                "description": "Indicates the cursor moved over the button so it is now possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Indicates the cursor moved away from the button so it is now no longer possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchDown",
                "description": "Indicates that the button was pressed down.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchUp",
                "description": "Indicates that a button has been released.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ButtonClick",
                "description": "Perform a button click as function.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Open",
                "description": "Opens the picker, as though the user clicked on it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ViewContact",
                "description": "view a contact via its URI",
                "deprecated": "false",
                "params": [
                    {
                        "name": "uri",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "WithIconFromFontAwesome",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/fontawesome.com\/cheatsheet Use as example for a heart icon just 'f004'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromMaterialFont",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/material.io\/icons",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromPicture",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "picture",
                        "type": "text"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.PhoneStatus",
        "name": "PhoneStatus",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "INTERNAL",
        "helpString": "Component that returns information about the phone.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/phoneip.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "WebRTC",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "WebRTC",
                "description": "Set whether or not we will use WebRTC to communicate with the server",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "OnSettings",
                "description": "This event is fired when the \"settings\" menu item is selected (only available in the\n Companion App, defined in ReplForm.java).",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "GetInstaller",
                "description": "Return the app that installed us",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "GetVersionName",
                "description": "Return the our VersionName property",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "GetWifiIpAddress",
                "description": "Returns the IP address of the phone in the form of a String",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "SdkLevel",
                "description": "Get the current Android SDK Level",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "doFault",
                "description": "Causes an Exception, used to debug exception processing.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "installURL",
                "description": "Downloads the URL and installs it as an Android Package",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "isConnected",
                "description": "Returns TRUE if the phone is on Wifi, FALSE otherwise",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "isDirect",
                "description": "Returns true if we are running in the emulator or USB Connection",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "setAssetsLoaded",
                "description": "Declare that we have loaded our initial assets and other assets should come from the sdcard",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "setHmacSeedReturnCode",
                "description": "Establish the secret seed for HOTP generation. Return the SHA1 of the provided seed, this will be used to contact the rendezvous server. Note: This code also starts the connection negotiation process if we are using WebRTC. This is a bit of a kludge...",
                "deprecated": "false",
                "params": [
                    {
                        "name": "seed",
                        "type": "text"
                    },
                    {
                        "name": "rendezvousServer",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "shutdown",
                "description": "Really Exit the Application",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "startHTTPD",
                "description": "Start the internal AppInvHTTPD to listen for incoming forms. FOR REPL USE ONLY!",
                "deprecated": "false",
                "params": [
                    {
                        "name": "secure",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "startWebRTC",
                "description": "Start the WebRTC engine",
                "deprecated": "false",
                "params": [
                    {
                        "name": "rendezvousServer",
                        "type": "text"
                    },
                    {
                        "name": "iceServers",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Player",
        "name": "Player",
        "external": "false",
        "version": "8",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "Multimedia component that plays audio and controls phone vibration.  The name of a multimedia field is specified in the <code>Source<\/code> property, which can be set in the Designer or in the Blocks Editor.  The length of time for a vibration is specified in the Blocks Editor in milliseconds (thousandths of a second).\n<p>For supported audio formats, see <a href=\"http:\/\/developer.android.com\/guide\/appendix\/media-formats.html\" target=\"_blank\">Android Supported Media Formats<\/a>.<\/p>\n<p>This component is best for long sound files, such as songs, while the <code>Sound<\/code> component is more efficient for short files, such as sound effects.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/player.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Loop",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PlayOnlyInForeground",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Source",
                "editorType": "audio_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Volume",
                "editorType": "non_negative_float",
                "defaultValue": "50",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "CurrentPosition",
                "description": "Returns the current position of the source file that is playing.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Duration",
                "description": "Returns the duration of the source file.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "GetTrackInfo",
                "description": "Returns a array of track information.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "IsPlaying",
                "description": "Reports whether the media is playing",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "LeftVolume",
                "description": "Returns the current left volume.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Loop",
                "description": "If true, the player will loop when it plays. Setting Loop while the player is playing will affect the current playing.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PlayOnlyInForeground",
                "description": "If true, the player will pause playing when leaving the current screen; if false (default option), the player continues playing whenever the current screen is displaying or not.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RightVolume",
                "description": "Returns the current right volume.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Source",
                "description": "Returns the path to the audio source",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Volume",
                "description": "Sets the volume to a number between 0 and 100.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Completed",
                "description": "Indicates that the media has reached the end",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OtherPlayerStarted",
                "description": "This event is signaled when another player has started (and the current player is playing or paused, but not stopped).",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "PlayerError",
                "description": "The PlayerError event is no longer used. Please use the Screen.ErrorOccurred event instead.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Pause",
                "description": "Suspends playing the media if it is playing.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SeekTo",
                "description": "Set a position where the source file should start playing.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetLeftRightVolume",
                "description": "Control the left and right volume of the player. Set the volume to a number between 0 and 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "leftVolume",
                        "type": "number"
                    },
                    {
                        "name": "rightVolume",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Start",
                "description": "Plays the media.  If it was previously paused, the playing is resumed.\n If it was previously stopped, it starts from the beginning.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Stop",
                "description": "Stops playing the media and seeks to the beginning of the song.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Vibrate",
                "description": "Vibrates for specified number of milliseconds.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "milliseconds",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Polygon",
        "name": "Polygon",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MAPS",
        "helpString": "Polygon",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Description",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Draggable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableInfobox",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FillColor",
                "editorType": "color",
                "defaultValue": "&HFFF34336",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FillOpacity",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HolePointsFromString",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PointsFromString",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeOpacity",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeWidth",
                "editorType": "integer",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Title",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Description",
                "description": "The description displayed in the info window that appears when the user clicks on the map feature.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Draggable",
                "description": "The Draggable property is used to set whether or not the user can drag the Marker by long-pressing and then dragging the marker to a new location.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableInfobox",
                "description": "Enable or disable the infobox window display when the user taps the feature.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FillColor",
                "description": "The paint color used to fill in the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FillOpacity",
                "description": "The opacity of the interior of the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HolePoints",
                "description": "",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HolePointsFromString",
                "description": "Constructs holes in a polygon from a given list of coordinates per hole.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Points",
                "description": "Gets or sets the sequence of points used to draw the polygon.",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PointsFromString",
                "description": "Constructs a polygon from the given list of coordinates.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "StrokeColor",
                "description": "The paint color used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeOpacity",
                "description": "The opacity of the stroke used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeWidth",
                "description": "The width of the stroke used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Title",
                "description": "The title displayed in the info window that appears when the user clicks on the map feature.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Type",
                "description": "The type of the feature. For polygons, this returns the text \"Polygon\".",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "The user clicked on the feature.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Drag",
                "description": "The user dragged the map feature.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "The user long-pressed on the feature. This event will only trigger if Draggable is false.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StartDrag",
                "description": "The user started a drag operation.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StopDrag",
                "description": "The user stopped a drag operation.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "Centroid",
                "description": "Returns the centroid of the Polygon as a (latitude, longitude) pair.",
                "deprecated": "false",
                "params": [],
                "returnType": "list"
            },
            {
                "name": "DistanceToFeature",
                "description": "Compute the distance, in meters, between two map features.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "mapFeature",
                        "type": "component"
                    },
                    {
                        "name": "centroids",
                        "type": "boolean"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "DistanceToPoint",
                "description": "Compute the distance, in meters, between a map feature and a latitude, longitude point.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    },
                    {
                        "name": "centroid",
                        "type": "boolean"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "HideInfobox",
                "description": "Hide the infobox if it is shown. If the infobox is not visible this function has no effect.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ShowInfobox",
                "description": "Show the infobox for the feature. This will show the infobox even if",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.PressureSensor",
        "name": "PressureSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "<p>Non-visible component that measures the ambient air pressure in hPa or mbar.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/pressureSensor.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "KeepRunningWhenOnPause",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Altitude",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Available",
                "description": "",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "KeepRunningWhenOnPause",
                "description": "",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MaximumRange",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Pressure",
                "description": "",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "PressureChanged",
                "description": "Event is invoked when pressure is changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "pressure",
                        "type": "number"
                    },
                    {
                        "name": "altitude",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.ProgressBar",
        "name": "ProgressBar",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "ProgressBar component",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AnimationStyle",
                "editorType": "progress_options",
                "defaultValue": "Wave",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00FFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Color",
                "editorType": "color",
                "defaultValue": "&HFF008b8b",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, Wave animation will be used.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BackgroundColor",
                "description": "Sets the background color of this component.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Color",
                "description": "Sets the color of the component",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "GetAnimationStyleNames",
                "description": "Gets style names of all possible animations.",
                "deprecated": "false",
                "params": [],
                "returnType": "list"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.ProximitySensor",
        "name": "ProximitySensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "<p>Non-visible component that can measures the proximity of an object in cm relative to the view screen of a device. This sensor is typically used to determine whether a handset is being held up to a persons ear; i.e. lets you determine how far away an object is from a device. Many devices return the absolute distance, in cm, but some return only near and far values. In this case, the sensor usually reports its maximum range value in the far state and a lesser value in the near state.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/proximitysensor.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "KeepRunningWhenOnPause",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Available",
                "description": "Reports whether or not the device has a proximity sensor",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Distance",
                "description": "Returns the distance from the object to the device",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If true, the sensor will generate events.  Otherwise, no events\n are generated .",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "KeepRunningWhenOnPause",
                "description": "Returns value of keepRunningWhenOnPause",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MaximumRange",
                "description": "Reports the Maximum Range of the device's ProximitySensor",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "ProximityChanged",
                "description": "Triggered when distance (in cm) of the object to the device changes.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "distance",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.PushNotifications",
        "name": "PushNotifications",
        "external": "false",
        "version": "6",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SOCIAL",
        "helpString": "Push Notifications component powered by OneSignal",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/pushNotifications.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "OneSignalAppId",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "EnableLog",
                "description": "If you want to enable the log then set it to true.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "EnableSound",
                "description": "Enable Sound.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "EnableVibration",
                "description": "Enable Vibration.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "GetEmailSubscriptionEmailAddress",
                "description": "Get the email subscription email address.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "GetEmailSubscriptionUserId",
                "description": "Get the email subscription user id.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "GetPermissionStatus",
                "description": "Get Permission Status",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "GetSubscriptionStatus",
                "description": "Get the subscription Status",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "GetUserId",
                "description": "Get the User ID. If there is no user id it will return '-1'.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "OneSignalAppId",
                "description": "Set here your One Signal App ID",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SetSubscription",
                "description": "If you want to subscribe then set it to true.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotAvailableTags",
                "description": "Event to detect available one signal tags.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tagsAsString",
                        "type": "text"
                    },
                    {
                        "name": "tagsAsList",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "GotValue",
                "description": "Event to receive value for a tag.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "value",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "NotificationOpened",
                "description": "User opened a notification.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "NotificationReceived",
                "description": "User received a notification.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "id",
                        "type": "text"
                    },
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SendMessageDone",
                "description": "Returns true if your message was send with success out of your app to all users.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "ClearAllNotifications",
                "description": "Clear All Notifications.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "DeleteTag",
                "description": "Deletes a single tag that was previously set on a user.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "key",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GetAvailableTags",
                "description": "Get a list of available tags.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GetValue",
                "description": "Get value for tag.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "valueIfTagNotThere",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SendMessage",
                "description": "Send a message to all users. The message and your REST Api Key can not be empty! You will find your REST Api Key in your OneSignal account settings.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "title",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "restApiKey",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SendTag",
                "description": "Tag a user based on an app event of your choosing so later you can create segments in to target these users.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "key",
                        "type": "text"
                    },
                    {
                        "name": "value",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.QrCode",
        "name": "QrCode",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "Component for QrCode",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/qrCode.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Charset",
                "editorType": "string",
                "defaultValue": "UTF-8",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Format",
                "editorType": "string",
                "defaultValue": "png",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FrontColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Margin",
                "editorType": "integer",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Size",
                "editorType": "integer",
                "defaultValue": "200",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "textArea",
                "defaultValue": "Default",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Set the background color of the qr code result.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Charset",
                "description": "Set the charset of the input text.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Format",
                "description": "It's possible to create the QR code picture using different file formats, available are PNG, GIF, JPEG and the vector graphic formats SVG and EPS.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FrontColor",
                "description": "Set the color of the qr code result.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Margin",
                "description": "Thickness of a margin in pixels. The margin will always have the same color as the background.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Size",
                "description": "Set the size\/resolution of the qr code.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "This is the text that is converted as qr code.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotResponse",
                "description": "You will find here the success state and image url.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    },
                    {
                        "name": "url",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "GenerateQrCode",
                "description": "Create a QR Code and the result is a link to it. Example: Set the resolution(in pixel) to 200(height and width has the same value) and text to: Hello world!. Result: QR code resolution is 200x200, text = Hello world! Your text input is encoded in the link automatically.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Radiobutton",
        "name": "Radiobutton",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "Component for Radiobutton",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/user-interface\/radio-button\/",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Checked",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "RadioButtonColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "textArea",
                "defaultValue": "Radio Button Text",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Checked",
                "description": "Set the radio button to checked or unchecked",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If set, user can touch the radio button.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "RadioButtonColor",
                "description": "Change the radio button component color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Set here the radio button text.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Set the text color for the radio button.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextSize",
                "description": "The text size of the radio button.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "isChecked",
                "description": "Returns true if the radio button is checked, else false.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Changed",
                "description": "Event invoked when the radio button state has been changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "checked",
                        "type": "boolean"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Toggle",
                "description": "Change the checked state of the view to the inverse of its current state",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Ratingbar",
        "name": "Ratingbar",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "Component for Ratingbar",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/user-interface\/rating-bar\/",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/ratingbar.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF9E9E9E",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "IsIndicator",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SetNumberOfStars",
                "editorType": "string",
                "defaultValue": "5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SetStepSize",
                "editorType": "float",
                "defaultValue": ".5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StarColor",
                "editorType": "color",
                "defaultValue": "&HFFF34336",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Change the background color of the star.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "GetNumberOfStars",
                "description": "Returns the number of stars shown.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "GetRating",
                "description": "Gets the current rating (number of stars filled).",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "GetStepSize",
                "description": "Gets the step size (granularity) of this rating bar.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "IsIndicator",
                "description": "Whether this rating bar should only be an indicator (thus non-changeable by the user).",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SetNumberOfStars",
                "description": "Sets the number of stars to show.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "SetRating",
                "description": "Sets the rating (the number of stars filled).",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "SetStepSize",
                "description": "Sets the step size (granularity) of this rating bar.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "StarColor",
                "description": "Change the color of the star.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Changed",
                "description": "Event invoked when the rating has been changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "rating",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.Rectangle",
        "name": "Rectangle",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MAPS",
        "helpString": "Rectangle",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Description",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Draggable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EastLongitude",
                "editorType": "float",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "EnableInfobox",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FillColor",
                "editorType": "color",
                "defaultValue": "&HFFF34336",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FillOpacity",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "NorthLatitude",
                "editorType": "float",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SouthLatitude",
                "editorType": "float",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeOpacity",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "StrokeWidth",
                "editorType": "integer",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Title",
                "editorType": "text",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "WestLongitude",
                "editorType": "float",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Description",
                "description": "The description displayed in the info window that appears when the user clicks on the map feature.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Draggable",
                "description": "The Draggable property is used to set whether or not the user can drag the Marker by long-pressing and then dragging the marker to a new location.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EastLongitude",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableInfobox",
                "description": "Enable or disable the infobox window display when the user taps the feature.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FillColor",
                "description": "The paint color used to fill in the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FillOpacity",
                "description": "The opacity of the interior of the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "NorthLatitude",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SouthLatitude",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeColor",
                "description": "The paint color used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeOpacity",
                "description": "The opacity of the stroke used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "StrokeWidth",
                "description": "The width of the stroke used to outline the map feature.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Title",
                "description": "The title displayed in the info window that appears when the user clicks on the map feature.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Type",
                "description": "The type of the feature. For rectangles, this returns the text \"Rectangle\".",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Specifies whether the component should be visible on the screen. Value is true if the component is showing and false if hidden.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WestLongitude",
                "description": "",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "The user clicked on the feature.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Drag",
                "description": "The user dragged the map feature.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "The user long-pressed on the feature. This event will only trigger if Draggable is false.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StartDrag",
                "description": "The user started a drag operation.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StopDrag",
                "description": "The user stopped a drag operation.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "Bounds",
                "description": "Returns the bounding box of the Rectangle in the format ((North West) (South East)).",
                "deprecated": "false",
                "params": [],
                "returnType": "list"
            },
            {
                "name": "Center",
                "description": "Returns the center of the Rectangle as a list of the form (Latitude Longitude).",
                "deprecated": "false",
                "params": [],
                "returnType": "list"
            },
            {
                "name": "DistanceToFeature",
                "description": "Compute the distance, in meters, between two map features.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "mapFeature",
                        "type": "component"
                    },
                    {
                        "name": "centroids",
                        "type": "boolean"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "DistanceToPoint",
                "description": "Compute the distance, in meters, between a map feature and a latitude, longitude point.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    },
                    {
                        "name": "centroid",
                        "type": "boolean"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "HideInfobox",
                "description": "Hide the infobox if it is shown. If the infobox is not visible this function has no effect.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetCenter",
                "description": "Moves the Rectangle so that it is centered on the given latitude and longitude while attempting to maintain the width and height of the Rectangle as measured from the center to the edges.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "latitude",
                        "type": "number"
                    },
                    {
                        "name": "longitude",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ShowInfobox",
                "description": "Show the infobox for the feature. This will show the infobox even if",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.SQLite",
        "name": "SQLite",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "STORAGE",
        "helpString": "Tool developed by Carlos Pedroza to access the application's SQlite database.",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/storage\/sqlite\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/SQLite.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ReturnHeader",
                "editorType": "boolean",
                "defaultValue": "false",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SuppressToast",
                "editorType": "boolean",
                "defaultValue": "false",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ReturnHeader",
                "description": "Returns whether the header row should be returned in the result of a Select statement.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RowsAffected",
                "description": "Returns the number of rows affected after a raw SQL has been executed using SQL Query.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "SuppressToast",
                "description": "Returns whether Success Toast should be suppressed.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterExecution",
                "description": "Event handler after the SQL statement is executed, returns whether the execution was succesful.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "wasExecuted",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "AfterQuery",
                "description": "Event handler after the RawQuery or Query is executed and returns a list with the selected data and number of records.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "result",
                        "type": "list"
                    },
                    {
                        "name": "numberOfRecords",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ErrorOccurred",
                "description": "Event handler when an error ocurred, returns a string with a message from the error.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "ClearDatabase",
                "description": "Clears the database to version 1. Use only while developing, this shouldn't be use on production.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Delete",
                "description": "Executes pre-compiled DELETE statement with specified parameters. Parameters: 1) String table - Name of the table. 2) String whereClause - Optional WHERE clause to apply when deleting (Example: 'ID = ?'), pasing an empty a string will delete all rows. 3) List whereArgs - List with arguments for the WHERE clause. These arguments will be replaced by '?' in the whereClause. Returns the number of rows affected if a whereClause is passed in, 0 otherwise.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "table",
                        "type": "text"
                    },
                    {
                        "name": "whereClause",
                        "type": "text"
                    },
                    {
                        "name": "whereArgs",
                        "type": "list"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "DisplayTables",
                "description": "Used to retrieve list of existing tables from the database",
                "deprecated": "false",
                "params": [],
                "returnType": "list"
            },
            {
                "name": "DropTable",
                "description": "Used to drop \/ delete table from database. Please note that this event will DELETE any data you may have on the table and will then delete table from the database. After this operation is completed, it cannot be undone!",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tableName",
                        "type": "text"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "GetPath",
                "description": "Returns the path to the database",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Insert",
                "description": "Executes pre-compiled INSERT statement with specified parameters. Parameters: 1) String table - Name of the table. 2) YailList columns - List with the columns that will contain the data to be inserted in the database. 3) YailList values - List with the data to be inserted in the database. Returns the row ID of the newly inserted row, or -1 if an error occurred.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "table",
                        "type": "text"
                    },
                    {
                        "name": "columns",
                        "type": "list"
                    },
                    {
                        "name": "values",
                        "type": "list"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "MultipleSQL",
                "description": "Execute Multiple SQL Statement asynchronously and returns whether the transaction was successful in the AfterExecution Event Handler. Use it when returned data isn't needed. Parameter: 1 ) List of SQL.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "list",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "Query",
                "description": "Executes pre-compiled QUERY statement with specified parameters. Parameters: 1) String table: Name of the table. 2) YailList columns: List of which columns to return, passing an empty list will return all columns. 3) String selection: Filter declaring which rows to return, formatted as an SQL WHERE clause, passing an empty string will return all rows. 4) YailList selectionArgs: List with the arguments that will replace onto '?' in the selection filter. 5) String groupBy: A filter declaring how to group rows, formatted as an SQL GROUP BY clause (excluding the GROUP BY itself), passing an empty string will cause the row to not be grouped. 6) String having: A filter declare which row groups to include if row grouping is being used, passing an empty string will cause all row groups to be included. 7) String orderBy: How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself), passing an empty string will use the default sort order (unordered). 8) String limit: Limits the number of rows returned by the query, formatted as LIMIT clause, passing an empty string denotes no LIMIT clause. The result query is available in the AfterQuery event handler",
                "deprecated": "false",
                "params": [
                    {
                        "name": "table",
                        "type": "text"
                    },
                    {
                        "name": "columns",
                        "type": "list"
                    },
                    {
                        "name": "selection",
                        "type": "text"
                    },
                    {
                        "name": "selectionArgs",
                        "type": "list"
                    },
                    {
                        "name": "groupBy",
                        "type": "text"
                    },
                    {
                        "name": "having",
                        "type": "text"
                    },
                    {
                        "name": "orderBy",
                        "type": "text"
                    },
                    {
                        "name": "limit",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "RawQuery",
                "description": "Executes the provided rawQuery Statement asynchronously. Returns a YailList with the selected data and number of records in the AfterQuery Event. Parameter: 1) String sql. 2) YailList selectionArgs: List with the arguments that will replace '?' in where clause in the query, to prevent SQL injections",
                "deprecated": "false",
                "params": [
                    {
                        "name": "sql",
                        "type": "text"
                    },
                    {
                        "name": "selectionArgs",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "Replace",
                "description": "Executes pre-compiled REPLACE OR INSERT INTO statement with specified parameters. Parameters: 1) String table - Name of the table. 2) YailList columns - List with the columns that will contain the data to be replaced in the database. 3) YailList values - List with the data to be replaced in the database. Returns the row ID of the newly replaced row, or -1 if an error occurred.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "table",
                        "type": "text"
                    },
                    {
                        "name": "columns",
                        "type": "list"
                    },
                    {
                        "name": "values",
                        "type": "list"
                    }
                ],
                "returnType": "number"
            },
            {
                "name": "RunQuery",
                "description": "Used to run any valid SQLite query and return results in same block.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "query",
                        "type": "text"
                    }
                ],
                "returnType": "list"
            },
            {
                "name": "SingleSQL",
                "description": "Execute a Single SQL Statement asynchronously and returns whether the transaction was successful in the AfterExecution Event Handler. Use it when returned data isn't needed. Parameter: 1) String sql.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "sql",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Update",
                "description": "Executes pre-compiled UPDATE statement with specified parameters. Parameters: 1) String table - Name of the table. 2) YailList columns - List with the columns that will contain the data to be inserted in the database. 3) YailList values - List with the data to be inserted in the database. 4) String whereClause - optional WHERE clause to apply when updating, leave an empty string to update all rows. Include ?s, which will be updated by the values from whereArgs. 5) YailList whereArgs - List with the columns that will contain the data to be updated in the database. Returns the row ID of the newly inserted row, or -1 if an error occurred.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "table",
                        "type": "text"
                    },
                    {
                        "name": "columns",
                        "type": "list"
                    },
                    {
                        "name": "values",
                        "type": "list"
                    },
                    {
                        "name": "whereClause",
                        "type": "text"
                    },
                    {
                        "name": "whereArgs",
                        "type": "list"
                    }
                ],
                "returnType": "number"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Screenshot",
        "name": "Screenshot",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "Component for Screenshot",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/screenshot.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AllowScreenshots",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "DimAmount",
                "editorType": "non_negative_float",
                "defaultValue": "0.5",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FileName",
                "editorType": "string",
                "defaultValue": "Screenshot.png",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "NotificationBigStyle",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "NotificationShareButton",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "NotificationShareTitle",
                "editorType": "string",
                "defaultValue": "Share",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "NotificationTitle",
                "editorType": "string",
                "defaultValue": "Screenshot..",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowNotification",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowPreview",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AllowScreenshots",
                "description": "This feature allows users of your app to make or ban screenshots of their app. If disabled and a person tries to make a screenshot, they will receive then a default system message that this is not possible.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "DimAmount",
                "description": "Set the amount of dim behind the preview window if ShowPreview(...) is enabled. Use '0.0' for no dim and '1.0' for full dim.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FileName",
                "description": "This will be the name for the taken screenshot image file.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "NotificationBigStyle",
                "description": "This will display the notification in a big style.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "NotificationShareButton",
                "description": "If enabled you will see a notification with a share button after the screenshot is taken.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "NotificationShareTitle",
                "description": "This will set the notification share button text if the option \"Show Notification\" is enabled.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "NotificationTitle",
                "description": "This will set the notification title if the option \"Show Notification\" is enabled.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowNotification",
                "description": "If enabled you will see a notification in the statusbar after the screenshot is taken.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ShowPreview",
                "description": "If enabled you will see a short preview animation after the screenshot is taken.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "arePermissionsGranted",
                "description": "Returns true if the write and read permission is granted, else false.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "isReadPermissionGranted",
                "description": "Returns true if the read permission is granted, else false.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "isWritePermissionGranted",
                "description": "Returns true if the write permission is granted, else false.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotScreenshot",
                "description": "Event to detect that a screenshot was made by the user. Returns the image path to the taken screenshot.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "image",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "TakeScreenshot",
                "description": "Take a screenshot of the current visible screen.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Sharing",
        "name": "Sharing",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SOCIAL",
        "helpString": "Sharing is a non-visible component that enables sharing files and\/or messages between your app and other apps installed on a device. The component will display a list of the installed apps that can handle the information provided, and will allow the user to choose one to share the content with, for instance a mail app, a social network app, a texting app, and so on.<br>The file path can be taken directly from other components such as the Camera or the ImagePicker, but can also be specified directly to read from storage. Be aware that different devices treat storage differently, so a few things to try if, for instance, you have a file called arrow.gif in the folder <code>Appinventor\/assets<\/code>, would be: <ul><li><code>\"file:\/\/\/sdcard\/Appinventor\/assets\/arrow.gif\"<\/code><\/li> or <li><code>\"\/storage\/Appinventor\/assets\/arrow.gif\"<\/code><\/li><\/ul>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/sharing.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ShareDialogMessage",
                "editorType": "string",
                "defaultValue": "Send using...",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ShareDialogMessage",
                "description": "Set the text for the sharing dialog. The default text is 'Send using...'.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AppNotFound",
                "description": "This event returns the social media name if an app is not installed. Possible names are 'Facebook Messenger', 'Facebook', 'Twitter', 'Telegram', 'Twitter', 'Snapchat', 'Google Plus' or the given custom package name.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "name",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "ShareFile",
                "description": "Shares a file through any capable application installed on the phone by displaying a list of the available apps and allowing the user to choose one from the list. The selected app will open with the file inserted on it.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShareFileWithMessage",
                "description": "Shares both a file and a message through any capable application installed on the phone by displaying a list of available apps and allowing the user to  choose one from the list. The selected app will open with the file and message inserted on it.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "file",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShareMessage",
                "description": "Shares a message through any capable application installed on the phone by displaying a list of the available apps and allowing the user to choose one from the list. The selected app will open with the message inserted on it.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShareMessageTo",
                "description": "Shares a message through the given app. If the given app is not installed, then the 'AppNotFound' event will be invoked and return the given name.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "name",
                        "type": "text"
                    },
                    {
                        "name": "packageName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShareMessageToFacebook",
                "description": "Shares a message through Facebook. If Facebook is not installed, then the 'AppNotFound' event will be invoked and return the name 'Facebook'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShareMessageToFacebookMessenger",
                "description": "Shares a message through Facebook Messenger. If Messenger is not installed, then the 'AppNotFound' event will be invoked and return the name 'Facebook Messenger'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShareMessageToGooglePlus",
                "description": "Shares a message through Google Plus. If Google+ is not installed, then the 'AppNotFound' event will be invoked and return the name 'Google Plus'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShareMessageToSnapchat",
                "description": "Shares a message through Snapchat. If Snapchat is not installed, then the 'AppNotFound' event will be invoked and return the name 'Snapchat'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShareMessageToTelegram",
                "description": "Shares a message through Telegram. If Telegram is not installed, then the 'AppNotFound' event will be invoked and return the name 'Telegram'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShareMessageToTwitter",
                "description": "Shares a message through Twitter. If Twitter is not installed, then the 'AppNotFound' event will be invoked and return the name 'Twitter'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ShareMessageToWhatsApp",
                "description": "Shares a message through WhatsApp. If WhatsApp is not installed, then the 'AppNotFound' event will be invoked and return the name 'WhatsApp'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Slider",
        "name": "Slider",
        "external": "false",
        "version": "5",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "A Slider is a progress bar that adds a draggable thumb. You can touch the thumb and drag left or right to set the slider thumb position. As the Slider thumb is dragged, it will trigger the PositionChanged event, reporting the position of the Slider thumb. The reported position of the Slider thumb can be used to dynamically update another component attribute, such as the font size of a TextBox or the radius of a Ball.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ColorLeft",
                "editorType": "color",
                "defaultValue": "&HFF00BCD3",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ColorRight",
                "editorType": "color",
                "defaultValue": "&HFF9E9E9E",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MaxValue",
                "editorType": "float",
                "defaultValue": "50.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MinValue",
                "editorType": "float",
                "defaultValue": "10.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ThumbColor",
                "editorType": "color",
                "defaultValue": "&HFF00BCD3",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ThumbEnabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ThumbImage",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ThumbPosition",
                "editorType": "float",
                "defaultValue": "30.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ColorLeft",
                "description": "The color of slider to the left of the thumb.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ColorRight",
                "description": "The color of slider to the left of the thumb.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "MaxValue",
                "description": "Sets the maximum value of slider.  Changing the maximum value also resets Thumbposition to be halfway between the minimum and the (new) maximum. If the new maximum is less than the current minimum, then minimum and maximum will both be set to this value.  Setting MaxValue resets the thumb position to halfway between MinValue and MaxValue and signals the PositionChanged event.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MinValue",
                "description": "Sets the minimum value of slider.  Changing the minimum value also resets Thumbposition to be halfway between the (new) minimum and the maximum. If the new minimum is greater than the current maximum, then minimum and maximum will both be set to this value.  Setting MinValue resets the thumb position to halfway between MinValue and MaxValue and signals the PositionChanged event.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the slider is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ThumbColor",
                "description": "The color of slider thumb. This block works only on devices with api >= 16.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ThumbEnabled",
                "description": "Sets whether or not to display the slider thumb.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ThumbImage",
                "description": "",
                "type": "text",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ThumbPosition",
                "description": "Sets the position of the slider thumb. If this value is greater than MaxValue, then it will be set to same value as MaxValue. If this value is less than MinValue, then it will be set to same value as MinValue.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "PositionChanged",
                "description": "Indicates that position of the slider thumb has changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "thumbPosition",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "TouchDown",
                "description": "Event will be invoked on a touch down.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchUp",
                "description": "Event will be invoked on a touch up.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.Sound",
        "name": "Sound",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "<p>A multimedia component that plays sound files and optionally vibrates for the number of milliseconds (thousandths of a second) specified in the Blocks Editor.  The name of the sound file to play can be specified either in the Designer or in the Blocks Editor.<\/p> <p>For supported sound file formats, see <a href=\"http:\/\/developer.android.com\/guide\/appendix\/media-formats.html\" target=\"_blank\">Android Supported Media Formats<\/a>.<\/p><p>This <code>Sound<\/code> component is best for short sound files, such as sound effects, while the <code>Player<\/code> component is more efficient for longer sounds, such as songs.<\/p><p>You might get an error if you attempt to play a sound immediately after setting the source.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/soundEffect.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "MinimumInterval",
                "editorType": "non_negative_integer",
                "defaultValue": "500",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Source",
                "editorType": "audio_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "MinimumInterval",
                "description": "The minimum interval, in milliseconds, between sounds.  If you play a sound, all further Play() calls will be ignored until the interval has elapsed.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Source",
                "description": "The name of the sound file.  Only certain formats are supported.  See http:\/\/developer.android.com\/guide\/appendix\/media-formats.html.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "Pause",
                "description": "Pauses playing the sound if it is being played.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Play",
                "description": "Plays the sound specified by the Source property.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Resume",
                "description": "Resumes playing the sound after a pause.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SoundNormal",
                "description": "Ringer mode that may be audible and may vibrate.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SoundSilent",
                "description": "Ringer mode that will be silent and will not vibrate.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SoundVibrate",
                "description": "Ringer mode that will be silent and will vibrate.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Stop",
                "description": "Stops playing the sound if it is being played.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Vibrate",
                "description": "Vibrates for the specified number of milliseconds.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "millisecs",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "VibratePattern",
                "description": "Vibrate with a given pattern",
                "deprecated": "false",
                "params": [
                    {
                        "name": "vibrate",
                        "type": "number"
                    },
                    {
                        "name": "delay",
                        "type": "number"
                    },
                    {
                        "name": "repeat",
                        "type": "boolean"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.SoundRecorder",
        "name": "SoundRecorder",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "<p>Multimedia component that records audio.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/soundRecorder.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "SavedRecording",
                "editorType": "string",
                "defaultValue": "/mnt/sdcard/Makeroid/mySound.3gp",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "SavedRecording",
                "description": "Specifies the path to the file where the recording should be stored. If this property is the empty string, then starting a recording will create a file in an appropriate location.  If the property is not the empty string, it should specify a complete path to a file in an existing directory, including a file name with the extension .3gp.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterSoundRecorded",
                "description": "Provides the location of the newly created sound.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "sound",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "StartedRecording",
                "description": "Indicates that the recorder has started, and can be stopped.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StoppedRecording",
                "description": "Indicates that the recorder has stopped, and can be started again.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "Pause",
                "description": "Pause recording.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Start",
                "description": "Starts recording.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Stop",
                "description": "Stops recording.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.SoundSensor",
        "name": "SoundSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "Physical world component that can detect such data as: sound amplitude (measurement of the degree of change [positive or negative] ).",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/soundSensor.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Listen",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MaxSoundlevel",
                "editorType": "integer",
                "defaultValue": "100",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Amplitude",
                "description": "Returns the real sound amplitude which can be between 0 to 32768.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Listen",
                "description": "Starts or Stops listening to sound changes",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "MaxSoundlevel",
                "description": "Returns the max sound level.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SoundLevel",
                "description": "Returns the sound level.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "SoundChanged",
                "description": "Triggered when the sound level has changed",
                "deprecated": "false",
                "params": [
                    {
                        "name": "value",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.SpaceView",
        "name": "SpaceView",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "LAYOUT_GENERAL",
        "helpString": "Component for SpaceView",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/layout\/space\/",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/space.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.Spacer",
        "name": "Spacer",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "DEPRECATED",
        "helpString": "Just a simple filler \/ spacer class to add fills between components",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.SpeechRecognizer",
        "name": "SpeechRecognizer",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "Component for using Voice Recognition to convert from speech to text",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/speechRecognizer.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [
            {
                "name": "Result",
                "description": "Result property getter method.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterGettingText",
                "description": "Simple event to raise after the VoiceReco activity has returned",
                "deprecated": "false",
                "params": [
                    {
                        "name": "result",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "BeforeGettingText",
                "description": "Simple event to raise when VoiceReco is invoked but before the VoiceReco\n activity is started.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "GetText",
                "description": "Solicits speech input from the user.  After the speech is converted to\n text, the AfterGettingText event will be raised.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Spinner",
        "name": "Spinner",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "<p>A spinner component that displays a pop-up with a list of elements. These elements can be set in the Designer or Blocks Editor by setting the<code>ElementsFromString<\/code> property to a string-separated concatenation (for example, <em>choice 1, choice 2, choice 3<\/em>) or by setting the <code>Elements<\/code> property to a List in the Blocks editor. Spinners are created with the first item already selected. So selecting  it does not generate an After Picking event. Consequently it's useful to make the  first Spinner item be a non-choice like \"Select from below...\". <\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/spinner.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ElementsFromString",
                "editorType": "string",
                "defaultValue": "Item1, Item2, Item3",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "ItemBackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF03A9F3",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ItemTextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Prompt",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PromptItemColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Selection",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SpinnerColor",
                "editorType": "color",
                "defaultValue": "&HFF2196F2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SpinnerTextSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextSize",
                "editorType": "non_negative_float",
                "defaultValue": "18",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UsePrompt",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Elements",
                "description": "returns a list of text elements to be picked from.",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ElementsFromString",
                "description": "Sets the Spinner list to the elements passed in the comma-separated string.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ItemBackgroundColor",
                "description": "Set the background color for the spinner items.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ItemTextColor",
                "description": "Set the text color for the spinner items.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Prompt",
                "description": "Text with the current title for the Spinner window.",
                "type": "text",
                "rw": "invisible",
                "deprecated": "true"
            },
            {
                "name": "PromptItemColor",
                "description": "Set the text color for the spinner items prompt\/hint.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Selection",
                "description": "Returns the current selected item in the spinner.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SelectionIndex",
                "description": "The index of the currently selected item, starting at 1. If no item is selected, the value will be 0.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SpinnerColor",
                "description": "Set the text color for the spinner.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SpinnerTextSize",
                "description": "The size of the spinner selected text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextSize",
                "description": "The text size of the spinner items.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UsePrompt",
                "description": "If true the first spinner item will be the prompt text.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterSelecting",
                "description": "Event called after the user selects an item from the dropdown list.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "selection",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "DisplayDropdown",
                "description": "displays the dropdown list for selection, same action as when the user clicks on the spinner.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Surface",
        "name": "Surface",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "VIEWS",
        "helpString": "Component for Surface",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/layout\/surface-view\/",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/surface.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AlignHorizontal",
                "editorType": "horizontal_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AlignVertical",
                "editorType": "vertical_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Clickable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FaceDetection",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SavePreviewAsFile",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UseBackCamera",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AlignHorizontal",
                "description": "A number that encodes how contents of the arrangement are aligned  horizontally. The choices are: 1 = left aligned, 2 = right aligned,  3 = horizontally centered.  Alignment has no effect if the arrangement's width is automatic.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AlignVertical",
                "description": "",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Clickable",
                "description": "Set the surface view component clickable or not clickable.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FaceDetection",
                "description": "If enabled you can detect how many faces are in the front of the camera.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Flashlight",
                "description": "Turn on or off the device flashlight. The function knows automatic if there is a flash\/ torch available.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "SavePreviewAsFile",
                "description": "Enable this block to enable the \"Got Preview\" event to get a image file from the camera preview.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "UseBackCamera",
                "description": "If enabled you will open the back camera for the camera preview, else you open the front camera. The block detect automatic if there is a device camera available or not.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Clicked",
                "description": "Event to detect clicks on the camera preview.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "FaceDetected",
                "description": "Event to detect that there are faces in the front of the camera.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "numbers",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GotPreview",
                "description": "Event to get the response from the camera preview as image file. The picture is by default in landscape mode. This event will only work if the option \"Save Preview As File\" is enabled\/ true.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "image",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "LongClicked",
                "description": "Event to detect long clicks on the camera preview.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "PictureCreated",
                "description": "Event to detect that the user has taken a picture from the preview.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "image",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PreviewPaused",
                "description": "Event to detect that the user paused the camera preview.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "PreviewStoped",
                "description": "Event to detect that the user stopped the camera preview.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "PausePreview",
                "description": "Pause the camera preview.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StartPreview",
                "description": "Start the camera preview.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StopPreview",
                "description": "Stop the camera preview.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TakePicture",
                "description": "Take a picture from the camera preview.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.SwitchToggle",
        "name": "SwitchToggle",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "write in ode",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/user-interface\/switch\/",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Checked",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFF4CAF50",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextOff",
                "editorType": "textArea",
                "defaultValue": "Switch Off",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextOn",
                "editorType": "textArea",
                "defaultValue": "Switch On",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ThumbColor",
                "editorType": "color",
                "defaultValue": "&HFF4CAF50",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TrackColor",
                "editorType": "color",
                "defaultValue": "&HFF009688",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Checked",
                "description": "Set the toggle to checked or unchecked",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If set to true, user can touch the switch.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Set the text color for the switch.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextOff",
                "description": "Set here the switch off text. HTML tags are too possible: <b>, <big>, <blockquote>, <br>, <cite>, <dfn>, <div>, <em>, <small>, <strong>, <sub>, <sup>, <tt>, <u>. Example: <big>Test<\/big>.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextOn",
                "description": "Set here the switch on text. HTML tags are too possible: <b>, <big>, <blockquote>, <br>, <cite>, <dfn>, <div>, <em>, <small>, <strong>, <sub>, <sup>, <tt>, <u>. Example: <big>Test<\/big>.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextSize",
                "description": "The text size of the switch.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ThumbColor",
                "description": "Change the disabled color of the switch.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TrackColor",
                "description": "Change the enabled color of the switch.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "isChecked",
                "description": "Return true if the switch is checked else false.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Clicked",
                "description": "Event invoked when a switch has been clicked. Returns true or false if the switch is checked or not.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "isChecked",
                        "type": "boolean"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "ThumbImage",
                "description": "Set the drawable used for the switch 'thumb' - the piece that the user can physically touch and drag along the track. If 'color Filter Enabled' is set to true, the image will get a light tint filter with the same color that you used as thumb color.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "image",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "ThumbImageFromMaterialFont",
                "description": "Set the drawable used for the switch 'thumb' - the piece that the user can physically touch and drag along the track. You can find the icon name (or code) here at https:\/\/material.io\/icons . Use as size as example '300'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.TableArrangement",
        "name": "TableArrangement",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "LAYOUT_GENERAL",
        "helpString": "<p>A formatting element in which to place components that should be displayed in tabular form.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Columns",
                "editorType": "non_negative_integer",
                "defaultValue": "2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Rows",
                "editorType": "non_negative_integer",
                "defaultValue": "2",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Columns",
                "description": "Columns property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Rows",
                "description": "Rows property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.TemperatureSensor",
        "name": "TemperatureSensor",
        "external": "false",
        "version": "1",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SENSORS",
        "helpString": "<p>Non-visible component that measures the temperature of the air in the room in degrees Celsius. This sensor implementation varies across devices.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/temperatureSensor.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Available",
                "description": "Whether Sensor is Available",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "Whether Sensor should be Enabled",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Temperature",
                "description": "Returns the temperature in degrees celsius. To return values the sensor must be enabled",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "TemperatureChanged",
                "description": "Event that fires when the temperature is changed",
                "deprecated": "false",
                "params": [
                    {
                        "name": "temperature",
                        "type": "number"
                    }
                ]
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.TextBox",
        "name": "TextBox",
        "external": "false",
        "version": "13",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "<p>A box for the user to enter text.  The initial or user-entered text value is in the <code>Text<\/code> property.  If blank, the <code>Hint<\/code> property, which appears as faint text in the box, can provide the user with guidance as to what to type.<\/p><p>The <code>MultiLine<\/code> property determines if the text can havemore than one line.  For a single line text box, the keyboard will closeautomatically when the user presses the Done key.  To close the keyboard for multiline text boxes, the app should use  the HideKeyboard method or  rely on the user to press the Back key.<\/p><p>The <code> NumbersOnly<\/code> property restricts the keyboard to acceptnumeric input only.<\/p><p>Other properties affect the appearance of the text box (<code>TextAlignment<\/code>, <code>BackgroundColor<\/code>, etc.) and whether it can be used (<code>Enabled<\/code>).<\/p><p>Text boxes are usually used with the <code>Button<\/code> component, with the user clicking on the button when text entry is complete.<\/p><p>If the text entered by the user should not be displayed, use <code>PasswordTextBox<\/code> instead.<\/p>",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/user-interface\/textbox\/",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "CursorColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "CursorVisible",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ErrorText",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HighlightColor",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Hint",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "HintColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "InputType",
                "editorType": "input_type",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "MultiLine",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "NumbersOnly",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ReadOnly",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "textArea",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFF000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "The background color of the input box.  You can choose a color by name in the Designer or in the Blocks Editor.  The default background color is 'default' (shaded 3-D look).",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "CurrentPosition",
                "description": "Get the current cursor position.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "CursorColor",
                "description": "The color of the cursor.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "CursorVisible",
                "description": "Makes the cursor visible (the default) or invisible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableCopyPaste",
                "description": "DEPRECATED since this feature is not working. Use 'Enabled' instead.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "true"
            },
            {
                "name": "Enabled",
                "description": "Whether the user can enter text into this input box.  By default, this is true.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ErrorText",
                "description": "Returns the error text.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "Whether the font for the text should be bold.  By default, it is not.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "Whether the text should appear in italics.  By default, it does not.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "The font size for the text.  By default, it is 14.0 points.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "The font for the text.  The value can be changed in the Designer.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HighlightColor",
                "description": "Returns the color of the highlighted text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Hint",
                "description": "Text that should appear faintly in the input box to provide a hint as to what the user should enter.  This can only be seen if the <code>Text<\/code> property is empty.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HintColor",
                "description": "Set a custom hint text color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "InputType",
                "description": "The input type you want for this TextBox.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "LineColor",
                "description": "Please delete this block from your project.This block is deprecated and not longer supported.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "true"
            },
            {
                "name": "MultiLine",
                "description": "If true, then this text box accepts multiple lines of input, which are entered using the return key.  For single line text boxes there is a Done key instead of a return key, and pressing Done hides the keyboard.  The app should call the HideKeyboard method to hide the keyboard for a mutiline text box.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "NumbersOnly",
                "description": "If true, then this text box accepts only numbers as keyboard input.  Numbers can include a decimal point and an optional leading minus sign.  This applies to keyboard input only.  Even if NumbersOnly is true, you can use [set Text to] to enter any text at all.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "true"
            },
            {
                "name": "ReadOnly",
                "description": "Whether the TextBox is read-only. By default, this is true.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the textbox is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Returns the textbox contents.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Whether the text should be left justified, centered, or right justified.  By default, text is left justified.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "The color for the text.  You can choose a color by name in the Designer or in the Blocks Editor.  The default text color is black.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextLength",
                "description": "Returns the current text length as number.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotFocus",
                "description": "Event raised when this component is selected for input, such as by\n the user touching it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Event raised when this component is no longer selected for input, such\n as if the user touches a different text box.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "OnTextChanged",
                "description": "Event to detect text changes.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "HideKeyboard",
                "description": "Hide the keyboard.  Only multiline text boxes need this. Single line text boxes close the keyboard when the users presses the Done key.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RequestFocus",
                "description": "Sets the textbox active.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetCursorAt",
                "description": "Set the cursor to the given position.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetCursorAtEnd",
                "description": "Set the cursor to the end of the text.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ShowError",
                "description": "Shows an error message next to the textbox.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.TextToSpeech",
        "name": "TextToSpeech",
        "external": "false",
        "version": "5",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "The TestToSpeech component speaks a given text aloud.  You can set the pitch and the rate of speech. <p>You can also set a language by supplying a language code.  This changes the pronounciation of words, not the actual language spoken.  For example, setting the language to French and speaking English text will sound like someone speaking English (en) with a French accent.<\/p> <p>You can also specify a country by supplying a country code. This can affect the pronounciation.  For example, British English (GBR) will sound different from US English (USA).  Not every country code will affect every language.<\/p> <p>The languages and countries available depend on the particular device, and can be listed with the AvailableLanguages and AvailableCountries properties.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/textToSpeech.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Country",
                "editorType": "countries",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Language",
                "editorType": "languages",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Pitch",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SpeechRate",
                "editorType": "float",
                "defaultValue": "1.0",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AvailableCountries",
                "description": "List of the country codes available on this device for use with TextToSpeech.  Check the Android developer documentation under supported languages to find the meanings of these abbreviations.",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "AvailableLanguages",
                "description": "List of the languages available on this device for use with TextToSpeech.  Check the Android developer documentation under supported languages to find the meanings of these abbreviations.",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Country",
                "description": "Country code to use for speech generation.  This can affect the pronounciation.  For example, British English (GBR) will sound different from US English (USA).  Not every country code will affect every language.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Language",
                "description": "Sets the language for TextToSpeech. This changes the way that words are pronounced, not the actual language that is spoken.  For example setting the language to and speaking English text with sound like someone speaking English with a French accent.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Pitch",
                "description": "Sets the Pitch for TextToSpeech The values should be between 0 and 2 where lower values lower the tone of synthesized voice and greater values raise it.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Result",
                "description": "Result property getter method.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "SpeechRate",
                "description": "Sets the SpeechRate for TextToSpeech. The values should be between 0 and 2 where lower values slow down the pitch and greater values accelerate it.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterSpeaking",
                "description": "Event to raise after the message is spoken.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "result",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "BeforeSpeaking",
                "description": "Event to raise when Speak is invoked, before the message is spoken.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "Speak",
                "description": "Speaks the given message.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Texting",
        "name": "Texting",
        "external": "false",
        "version": "3",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SOCIAL",
        "helpString": "<p>A component that will, when the <code>SendMessage<\/code> method is called, send the text message specified in the <code>Message<\/code> property to the phone number specified in the <code>PhoneNumber<\/code> property.<\/p> <p>If the <code>ReceivingEnabled<\/code> property is set to 1 messages will <b>not<\/b> be received. If <code>ReceivingEnabled<\/code> is set to 2 messages will be received only when the application is running. Finally if <code>ReceivingEnabled<\/code> is set to 3, messages will be received when the application is running <b>and<\/b> when the application is not running they will be queued and a notification displayed to the user.<\/p> <p>When a message arrives, the <code>MessageReceived<\/code> event is raised and provides the sending number and message.<\/p> <p> An app that includes this component will receive messages even when it is in the background (i.e. when it's not visible on the screen) and, moreso, even if the app is not running, so long as it's installed on the phone. If the phone receives a text message when the app is not in the foreground, the phone will show a notification in the notification bar.  Selecting the notification will bring up the app.  As an app developer, you'll probably want to give your users the ability to control ReceivingEnabled so that they can make the phone ignore text messages.<\/p> <p>If the GoogleVoiceEnabled property is true, messages can be sent over Wifi using Google Voice. This option requires that the user have a Google Voice account and that the mobile Voice app is installed on the phone. The Google Voice option works only on phones that support Android 2.0 (Eclair) or higher.<\/p> <p>To specify the phone number (e.g., 650-555-1212), set the <code>PhoneNumber<\/code> property to a Text string with the specified digits (e.g., 6505551212).  Dashes, dots, and parentheses may be included (e.g., (650)-555-1212) but will be ignored; spaces may not be included.<\/p> <p>Another way for an app to specify a phone number would be to include a <code>PhoneNumberPicker<\/code> component, which lets the users select a phone numbers from the ones stored in the the phone's contacts.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/texting.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "GoogleVoiceEnabled",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Message",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "PhoneNumber",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ReceivingEnabled",
                "editorType": "text_receiving",
                "defaultValue": "2",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "GoogleVoiceEnabled",
                "description": "If true, then SendMessage will attempt to send messages over Wifi using Google Voice.  This requires that the Google Voice app must be installed and set up on the phone or tablet, with a Google Voice account.  If GoogleVoiceEnabled is false, the device must have phone and texting service in order to send or receive messages with this component.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Message",
                "description": "The message that will be sent when the SendMessage method is called.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "PhoneNumber",
                "description": "Sets the phone number to send the text message to when the SendMessage function is called.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ReceivingEnabled",
                "description": "If set to 1 (OFF) no messages will be received.  If set to 2 (FOREGROUND) or3 (ALWAYS) the component will respond to messages if it is running. If the app is not running then the message will be discarded if set to 2 (FOREGROUND). If set to 3 (ALWAYS) and the app is not running the phone will show a notification.  Selecting the notification will bring up the app and signal the MessageReceived event.  Messages received when the app is dormant will be queued, and so several MessageReceived events might appear when the app awakens.  As an app developer, it would be a good idea to give your users control over this property, so they can make their phones ignore text messages when your app is installed.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "MessageReceived",
                "description": "Event that's raised when a text message is received by the phone.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "number",
                        "type": "text"
                    },
                    {
                        "name": "messageText",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "SendMessage",
                "description": "Send a text message",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.TimePicker",
        "name": "TimePicker",
        "external": "false",
        "version": "8",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "USERINTERFACE",
        "helpString": "<p>A button that, when clicked on, launches  a popup dialog to allow the user to select a time.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BorderShadow",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HTMLFormat",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Shape",
                "editorType": "button_shape",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowFeedback",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TouchColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Returns the button's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BorderShadow",
                "description": "Returns true if the button have a outside border shadow on click.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If set, user can tap check box to cause action.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "If set, button text is displayed in bold.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "If set, button text is displayed in italics.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "Point size for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "Font family for button text.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HTMLFormat",
                "description": "If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Hour",
                "description": "The hour of the last time set using the time picker. The hour is in a 24 hour format. If the last time set was 11:53 pm, this property will return 23.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Image to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Instant",
                "description": "The instant of the last time set using the time picker",
                "type": "InstantInTime",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Minute",
                "description": "The minute of the last time set using the time picker",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Shape",
                "description": "Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ShowFeedback",
                "description": "Specifies if a visual feedback should be shown for a button that as an image as background.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Text to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Left, center, or right.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Color for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TouchColor",
                "description": "Set the buttons touch color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterTimeSet",
                "description": "This event is run when a user has set the time in the popup dialog.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GotFocus",
                "description": "Indicates the cursor moved over the button so it is now possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Indicates the cursor moved away from the button so it is now no longer possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchDown",
                "description": "Indicates that the button was pressed down.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchUp",
                "description": "Indicates that a button has been released.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ButtonClick",
                "description": "Perform a button click as function.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LaunchPicker",
                "description": "Launches the TimePicker popup.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetTimeToDisplay",
                "description": "Set the time to be shown in the Time Picker popup. Current time is shown by default.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "hour",
                        "type": "number"
                    },
                    {
                        "name": "minute",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "SetTimeToDisplayFromInstant",
                "description": "Set the time from the instant to be shown in the Time Picker popup. Current time is shown by default.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "instant",
                        "type": "InstantInTime"
                    }
                ]
            },
            {
                "name": "WithIconFromFontAwesome",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/fontawesome.com\/cheatsheet Use as example for a heart icon just 'f004'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromMaterialFont",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/material.io\/icons",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromPicture",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "picture",
                        "type": "text"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.TinyDB",
        "name": "TinyDB",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "STORAGE",
        "helpString": "TinyDB is a non-visible component that stores data for an app. <p> Apps created with App Inventor are initialized each time they run: If an app sets the value of a variable and the user then quits the app, the value of that variable will not be remembered the next time the app is run. In contrast, TinyDB is a <em> persistent <\/em> data store for the app, that is, the data stored there will be available each time the app is run. An example might be a game that saves the high score and retrieves it each time the game is played. <\/<p> <p> Data items are strings stored under <em>tags<\/em> . To store a data item, you specify the tag it should be stored under.  Subsequently, you can retrieve the data that was stored under a given tag. <\/p><p> There is only one data store per app. Even if you have multiple TinyDB components, they will use the same data store. To get the effect of separate stores, use different keys. Also each app has its own data store. You cannot use TinyDB to pass data between two different apps on the phone, although you <em>can<\/em> use TinyDb to shares data between the different screens of a multi-screen app. <\/p> <p>When you are developing apps using the AI Companion, all the apps using that companion will share the same TinyDb.  That sharing will disappear once the apps are packaged.  But, during development, you should be careful to clear the TinyDb each time you start working on a new app.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/tinyDB.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "Namespace",
                "editorType": "string",
                "defaultValue": "TinyDB1",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Namespace",
                "description": "Namespace for storing data.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [],
        "methods": [
            {
                "name": "ClearAll",
                "description": "Clear the entire data store",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ClearTag",
                "description": "Clear the entry with the given tag",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GetTags",
                "description": "Return a list of all the tags in the data store",
                "deprecated": "false",
                "params": [],
                "returnType": "any"
            },
            {
                "name": "GetValue",
                "description": "Retrieve the value stored under the given tag.  If there's no such tag, then return valueIfTagNotThere.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "valueIfTagNotThere",
                        "type": "any"
                    }
                ],
                "returnType": "any"
            },
            {
                "name": "StoreValue",
                "description": "Store the given value under the given tag.  The storage persists on the\n phone when the app is restarted.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "valueToStore",
                        "type": "any"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.TinyWebDB",
        "name": "TinyWebDB",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "STORAGE",
        "helpString": "Non-visible component that communicates with a Web service to store and retrieve information.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/tinyWebDB.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ServiceURL",
                "editorType": "string",
                "defaultValue": "http://tinywebdb.builder.makeroid.io",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ServiceURL",
                "description": "Returns the URL of the web service database.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotValue",
                "description": "Indicates that a GetValue server request has succeeded.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tagFromWebDB",
                        "type": "text"
                    },
                    {
                        "name": "valueFromWebDB",
                        "type": "any"
                    }
                ]
            },
            {
                "name": "ValueStored",
                "description": "Event indicating that a StoreValue server request has succeeded.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "WebServiceError",
                "description": "Indicates that the communication with the Web service signaled an error.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "GetValue",
                "description": "GetValue asks the Web service to get the value stored under the given tag.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "StoreValue",
                "description": "Asks the Web service to store the given value under the given tag.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "tag",
                        "type": "text"
                    },
                    {
                        "name": "valueToStore",
                        "type": "any"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Twitter",
        "name": "Twitter",
        "external": "false",
        "version": "4",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "SOCIAL",
        "helpString": "A non-visible component that enables communication with <a href=\"http:\/\/www.twitter.com\" target=\"_blank\">Twitter<\/a>. Once a user has logged into their Twitter account (and the authorization has been confirmed successful by the <code>IsAuthorized<\/code> event), many more operations are available:<ul><li> Searching Twitter for tweets or labels (<code>SearchTwitter<\/code>)<\/li>\n<li> Sending a Tweet (<code>Tweet<\/code>)     <\/li>\n<li> Sending a Tweet with an Image (<code>TweetWithImage<\/code>)     <\/li>\n<li> Directing a message to a specific user      (<code>DirectMessage<\/code>)<\/li>\n <li> Receiving the most recent messages directed to the logged-in user      (<code>RequestDirectMessages<\/code>)<\/li>\n <li> Following a specific user (<code>Follow<\/code>)<\/li>\n<li> Ceasing to follow a specific user (<code>StopFollowing<\/code>)<\/li>\n<li> Getting a list of users following the logged-in user      (<code>RequestFollowers<\/code>)<\/li>\n <li> Getting the most recent messages of users followed by the      logged-in user (<code>RequestFriendTimeline<\/code>)<\/li>\n <li> Getting the most recent mentions of the logged-in user      (<code>RequestMentions<\/code>)<\/li><\/ul><\/p>\n <p>You must obtain a Consumer Key and Consumer Secret for Twitter authorization  specific to your app from http:\/\/twitter.com\/oauth_clients\/new",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/twitter.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ConsumerKey",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ConsumerSecret",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ConsumerKey",
                "description": "ConsumerKey property getter method.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ConsumerSecret",
                "description": "ConsumerSecret property getter method.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "DirectMessages",
                "description": "This property contains a list of the most recent messages mentioning the logged-in user.  Initially, the list is empty.  To set it, the program must: <ol> <li> Call the <code>Authorize<\/code> method.<\/li> <li> Wait for the <code>Authorized<\/code> event.<\/li> <li> Call the <code>RequestDirectMessages<\/code> method.<\/li> <li> Wait for the <code>DirectMessagesReceived<\/code> event.<\/li><\/ol>\nThe value of this property will then be set to the list of direct messages retrieved (and maintain that value until any subsequent call to <code>RequestDirectMessages<\/code>).",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Followers",
                "description": "This property contains a list of the followers of the logged-in user.  Initially, the list is empty.  To set it, the program must: <ol> <li> Call the <code>Authorize<\/code> method.<\/li> <li> Wait for the <code>IsAuthorized<\/code> event.<\/li> <li> Call the <code>RequestFollowers<\/code> method.<\/li> <li> Wait for the <code>FollowersReceived<\/code> event.<\/li><\/ol>\nThe value of this property will then be set to the list of followers (and maintain its value until any subsequent call to <code>RequestFollowers<\/code>).",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "FriendTimeline",
                "description": "This property contains the 20 most recent messages of users being followed.  Initially, the list is empty.  To set it, the program must: <ol> <li> Call the <code>Authorize<\/code> method.<\/li> <li> Wait for the <code>IsAuthorized<\/code> event.<\/li> <li> Specify users to follow with one or more calls to the <code>Follow<\/code> method.<\/li> <li> Call the <code>RequestFriendTimeline<\/code> method.<\/li> <li> Wait for the <code>FriendTimelineReceived<\/code> event.<\/li> <\/ol>\nThe value of this property will then be set to the list of messages (and maintain its value until any subsequent call to <code>RequestFriendTimeline<\/code>.",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Mentions",
                "description": "This property contains a list of mentions of the logged-in user.  Initially, the list is empty.  To set it, the program must: <ol> <li> Call the <code>Authorize<\/code> method.<\/li> <li> Wait for the <code>IsAuthorized<\/code> event.<\/li> <li> Call the <code>RequestMentions<\/code> method.<\/li> <li> Wait for the <code>MentionsReceived<\/code> event.<\/li><\/ol>\nThe value of this property will then be set to the list of mentions (and will maintain its value until any subsequent calls to <code>RequestMentions<\/code>).",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "SearchResults",
                "description": "This property, which is initially empty, is set to a list of search results after the program: <ol><li>Calls the <code>SearchTwitter<\/code> method.<\/li> <li>Waits for the <code>SearchSuccessful<\/code> event.<\/li><\/ol>\nThe value of the property will then be the same as the parameter to <code>SearchSuccessful<\/code>.  Note that it is not necessary to call the <code>Authorize<\/code> method before calling <code>SearchTwitter<\/code>.",
                "type": "list",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "TwitPic_API_Key",
                "description": "TwitPicAPIkey property getter method.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "true"
            },
            {
                "name": "Username",
                "description": "The user name of the authorized user. Empty if there is no authorized user.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "DirectMessagesReceived",
                "description": "This event is raised when the recent messages requested through <code>RequestDirectMessages<\/code> have been retrieved. A list of the messages can then be found in the <code>messages<\/code> parameter or the <code>Messages<\/code> property.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "messages",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "FollowersReceived",
                "description": "This event is raised when all of the followers of the logged-in user requested through <code>RequestFollowers<\/code> have been retrieved. A list of the followers can then be found in the <code>followers<\/code> parameter or the <code>Followers<\/code> property.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "followers2",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "FriendTimelineReceived",
                "description": "This event is raised when the messages requested through <code>RequestFriendTimeline<\/code> have been retrieved. The <code>timeline<\/code> parameter and the <code>Timeline<\/code> property will contain a list of lists, where each sub-list contains a status update of the form (username message)",
                "deprecated": "false",
                "params": [
                    {
                        "name": "timeline",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "IsAuthorized",
                "description": "This event is raised after the program calls <code>Authorize<\/code> if the authorization was successful.  It is also called after a call to <code>CheckAuthorized<\/code> if we already have a valid access token. After this event has been raised, any other method for this component can be called.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "MentionsReceived",
                "description": "This event is raised when the mentions of the logged-in user requested through <code>RequestMentions<\/code> have been retrieved.  A list of the mentions can then be found in the <code>mentions<\/code> parameter or the <code>Mentions<\/code> property.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "mentions",
                        "type": "list"
                    }
                ]
            },
            {
                "name": "SearchSuccessful",
                "description": "This event is raised when the results of the search requested through <code>SearchSuccessful<\/code> have been retrieved. A list of the results can then be found in the <code>results<\/code> parameter or the <code>Results<\/code> property.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "searchResults",
                        "type": "list"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "Authorize",
                "description": "Redirects user to login to Twitter via the Web browser using the OAuth protocol if we don't already have authorization.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "CheckAuthorized",
                "description": "Checks whether we already have access, and if so, causes IsAuthorized event handler to be called.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "DeAuthorize",
                "description": "Removes Twitter authorization from this running app instance",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "DirectMessage",
                "description": "This sends a direct (private) message to the specified user.  The message will be trimmed if it exceeds 160characters. <p><u>Requirements<\/u>: This should only be called after the <code>IsAuthorized<\/code> event has been raised, indicating that the user has successfully logged in to Twitter.<\/p>",
                "deprecated": "false",
                "params": [
                    {
                        "name": "user",
                        "type": "text"
                    },
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Follow",
                "description": "Starts following a user.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "user",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Login",
                "description": "Twitter's API no longer supports login via username and password. Use the Authorize call instead.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "username",
                        "type": "text"
                    },
                    {
                        "name": "password",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "RequestDirectMessages",
                "description": "Requests the 20 most recent direct messages sent to the logged-in user.  When the messages have been retrieved, the system will raise the <code>DirectMessagesReceived<\/code> event and set the <code>DirectMessages<\/code> property to the list of messages.<p><u>Requirements<\/u>: This should only be called after the <code>IsAuthorized<\/code> event has been raised, indicating that the user has successfully logged in to Twitter.<\/p>",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RequestFollowers",
                "description": "Gets who is following you.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RequestFriendTimeline",
                "description": "Gets the most recent 20 messages in the user's timeline.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "RequestMentions",
                "description": "Requests the 20 most recent mentions of the logged-in user.  When the mentions have been retrieved, the system will raise the <code>MentionsReceived<\/code> event and set the <code>Mentions<\/code> property to the list of mentions.<p><u>Requirements<\/u>: This should only be called after the <code>IsAuthorized<\/code> event has been raised, indicating that the user has successfully logged in to Twitter.<\/p>",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SearchTwitter",
                "description": "This searches Twitter for the given String query.<p><u>Requirements<\/u>: This should only be called after the <code>IsAuthorized<\/code> event has been raised, indicating that the user has successfully logged in to Twitter.<\/p>",
                "deprecated": "false",
                "params": [
                    {
                        "name": "query",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "StopFollowing",
                "description": "Stops following a user.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "user",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Tweet",
                "description": "This sends a tweet as the logged-in user with the specified Text, which will be trimmed if it exceeds 160 characters. <p><u>Requirements<\/u>: This should only be called after the <code>IsAuthorized<\/code> event has been raised, indicating that the user has successfully logged in to Twitter.<\/p>",
                "deprecated": "false",
                "params": [
                    {
                        "name": "status",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "TweetWithImage",
                "description": "This sends a tweet as the logged-in user with the specified Text and a path to the image to be uploaded, which will be trimmed if it exceeds 160 characters. If an image is not found or invalid, only the text will be tweeted.<p><u>Requirements<\/u>: This should only be called after the <code>IsAuthorized<\/code> event has been raised, indicating that the user has successfully logged in to Twitter.<\/p>",
                "deprecated": "false",
                "params": [
                    {
                        "name": "status",
                        "type": "text"
                    },
                    {
                        "name": "imagePath",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.VerticalArrangement",
        "name": "VerticalArrangement",
        "external": "false",
        "version": "9",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "LAYOUT_GENERAL",
        "helpString": "<p>A formatting element in which to place components that should be displayed one below another.  (The first child component is stored on top, the second beneath it, etc.)  If you wish to have components displayed next to one another, use <code>HorizontalArrangement<\/code> instead.<\/p>",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AlignHorizontal",
                "editorType": "horizontal_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AlignVertical",
                "editorType": "vertical_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Clickable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Scrollbar",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UseRoundCard",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "isCard",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AlignHorizontal",
                "description": "A number that encodes how contents of the arrangement are aligned  horizontally. The choices are: 1 = left aligned, 2 = right aligned,  3 = horizontally centered.  Alignment has no effect if the arrangement's width is automatic.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AlignVertical",
                "description": "A number that encodes how the contents of the arrangement are aligned  vertically. The choices are: 1 = aligned at the top, 2 = vertically centered, 3 = aligned at the bottom.  Alignment has no effect if the arrangement's height is automatic.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BackgroundColor",
                "description": "Returns the component's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Clickable",
                "description": "Set the component clickable or not clickable.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FullClickable",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "true"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Returns the path of the button's image.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Scrollbar",
                "description": "Whether to display a scrollbar",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UseRoundCard",
                "description": "If enabled the card layout will have then round corners.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "isCard",
                "description": "If enabled the arrangement will be convert to a card view. You can detect clicks on it with the \"Click\" event.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "Click listener event.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "Long click listener event.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.VerticalScrollArrangement",
        "name": "VerticalScrollArrangement",
        "external": "false",
        "version": "7",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "LAYOUT_GENERAL",
        "helpString": "<p>A formatting element in which to place components that should be displayed one below another.  (The first child component is stored on top, the second beneath it, etc.)  If you wish to have components displayed next to one another, use <code>HorizontalArrangement<\/code> instead.<\/p><p> This version is scrollable",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "images/verticalScroll.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AlignHorizontal",
                "editorType": "horizontal_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "AlignVertical",
                "editorType": "vertical_alignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&H00000000",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Clickable",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Scrollbar",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UseRoundCard",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "isCard",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AlignHorizontal",
                "description": "A number that encodes how contents of the arrangement are aligned  horizontally. The choices are: 1 = left aligned, 2 = right aligned,  3 = horizontally centered.  Alignment has no effect if the arrangement's width is automatic.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "AlignVertical",
                "description": "A number that encodes how the contents of the arrangement are aligned  vertically. The choices are: 1 = aligned at the top, 2 = vertically centered, 3 = aligned at the bottom.  Alignment has no effect if the arrangement's height is automatic.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BackgroundColor",
                "description": "Returns the component's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Clickable",
                "description": "Set the component clickable or not clickable.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FullClickable",
                "description": "",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "true"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Returns the path of the button's image.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Scrollbar",
                "description": "Whether to display a scrollbar",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UseRoundCard",
                "description": "If enabled the card layout will have then round corners.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "isCard",
                "description": "If enabled the arrangement will be convert to a card view. You can detect clicks on it with the \"Click\" event.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Click",
                "description": "Click listener event.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LongClick",
                "description": "Long click listener event.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": []
    },
    {
        "type": "com.google.appinventor.components.runtime.VideoPicker",
        "name": "VideoPicker",
        "external": "false",
        "version": "5",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "A special-purpose button. When the user taps an video picker, the device's video gallery appears, and the user can choose an video.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "BackgroundColor",
                "editorType": "color",
                "defaultValue": "&HFF444444",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "BorderShadow",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Enabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontBold",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontItalic",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontSize",
                "editorType": "non_negative_float",
                "defaultValue": "14.0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypeface",
                "editorType": "typeface",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FontTypefaceImport",
                "editorType": "font_asset",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HTMLFormat",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Image",
                "editorType": "image_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "RotationAngle",
                "editorType": "float",
                "defaultValue": "0.0",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Shape",
                "editorType": "button_shape",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ShowFeedback",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Text",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextAlignment",
                "editorType": "textalignment",
                "defaultValue": "1",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TextColor",
                "editorType": "color",
                "defaultValue": "&HFFFFFFFF",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "TouchColor",
                "editorType": "color",
                "defaultValue": "&HFFCCCCCC",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "BackgroundColor",
                "description": "Returns the button's background color",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "BorderShadow",
                "description": "Returns true if the button have a outside border shadow on click.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Enabled",
                "description": "If set, user can tap check box to cause action.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontBold",
                "description": "If set, button text is displayed in bold.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontItalic",
                "description": "If set, button text is displayed in italics.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontSize",
                "description": "Point size for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FontTypeface",
                "description": "Font family for button text.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "FontTypefaceImport",
                "description": "Set a custom font.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HTMLFormat",
                "description": "If true, then this button will show html text else it will show plain text. Note: Not all HTML is supported.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Image",
                "description": "Image to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RotationAngle",
                "description": "Sets the degrees that the button is rotated around the pivot point. Increasing values result in clockwise rotation.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Selection",
                "description": "Path to the file containing the video that was selected.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Shape",
                "description": "Specifies the button's shape (default, rounded, rectangular, oval). The shape will not be visible if an Image is being displayed.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ShowFeedback",
                "description": "Specifies if a visual feedback should be shown for a button that as an image as background.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Text",
                "description": "Text to display on button.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TextAlignment",
                "description": "Left, center, or right.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "TextColor",
                "description": "Color for button text.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "TouchColor",
                "description": "Set the buttons touch color.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterPicking",
                "description": "Event to be raised after the picker activity returns its\n result and the properties have been filled in.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "selection",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "BeforePicking",
                "description": "Event to raise when the button of the component is clicked or the list is shown\n using the Open block.  This event occurs before the list of items is displayed, and\n can be used to prepare the list before it is shown.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GotFocus",
                "description": "Indicates the cursor moved over the button so it is now possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "LostFocus",
                "description": "Indicates the cursor moved away from the button so it is now no longer possible to click it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchDown",
                "description": "Indicates that the button was pressed down.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "TouchUp",
                "description": "Indicates that a button has been released.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "AnimationStyle",
                "description": "Allows you to set animation style. Valid (case-insensitive) values are: ChasingDots, Circle, CubeGrid, DoubleBounce, FadingCircle, FoldingCube, Pulse, RotatingCircle, RotatingPlane, ThreeBounce, WanderingCubes, Wave. If invalid style is used, animation will be removed.Position can be: top, left, right, bottom. Size can be 100.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "style",
                        "type": "text"
                    },
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "ButtonClick",
                "description": "Perform a button click as function.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Open",
                "description": "Opens the picker, as though the user clicked on it.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetShadow",
                "description": "Place a blurred shadow of text underneath the text, drawn with the specified x, y, radius, color (e.g. -11, 12, 13, black.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "x",
                        "type": "number"
                    },
                    {
                        "name": "y",
                        "type": "number"
                    },
                    {
                        "name": "radius",
                        "type": "number"
                    },
                    {
                        "name": "color",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromFontAwesome",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/fontawesome.com\/cheatsheet Use as example for a heart icon just 'f004'.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromMaterialFont",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text. Use a material icon as the button icon without uploading a image resource into your project. You can find the icon name (or code) here at https:\/\/material.io\/icons",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "iconName",
                        "type": "text"
                    },
                    {
                        "name": "iconColor",
                        "type": "number"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "size",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WithIconFromPicture",
                "description": "Show an image on the given position near to the button. You can use following words for the position: 'Left', 'Right', 'Top' or 'Bottom'. Use the padding to add space between the icon and text.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "position",
                        "type": "text"
                    },
                    {
                        "name": "picture",
                        "type": "text"
                    },
                    {
                        "name": "padding",
                        "type": "number"
                    },
                    {
                        "name": "width",
                        "type": "number"
                    },
                    {
                        "name": "height",
                        "type": "number"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.VideoPlayer",
        "name": "VideoPlayer",
        "external": "false",
        "version": "8",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "A multimedia component capable of playing videos. When the application is run, the VideoPlayer will be displayed as a rectangle on-screen.  If the user touches the rectangle, controls will appear to play\/pause, skip ahead, and skip backward within the video.  The application can also control behavior by calling the <code>Start<\/code>, <code>Pause<\/code>, and <code>SeekTo<\/code> methods.  <p>Video files should be in 3GPP (.3gp) or MPEG-4 (.mp4) formats.  For more details about legal formats, see <a href=\"http:\/\/developer.android.com\/guide\/appendix\/media-formats.html\" target=\"_blank\">Android Supported Media Formats<\/a>.<\/p><p>App Inventor for Android only permits video files under 1 MB and limits the total size of an application to 5 MB, not all of which is available for media (video, audio, and sound) files.  If your media files are too large, you may get errors when packaging or installing your application, in which case you should reduce the number of media files or their sizes.  Most video editing software, such as Windows Movie Maker and Apple iMovie, can help you decrease the size of videos by shortening them or re-encoding the video into a more compact format.<\/p><p>You can also set the media source to a URL that points to a streaming video, but the URL must point to the video file itself, not to a program that plays the video.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ShowControls",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Source",
                "editorType": "video_asset",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Volume",
                "editorType": "non_negative_float",
                "defaultValue": "50",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "CurrentPosition",
                "description": "Returns the current position of the source file that is playing.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "FullScreen",
                "description": "Returns whether the VideoPlayer's video is currently being\n shown in fullscreen mode or not.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "IsPlaying",
                "description": "Reports whether the media is playing.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "ShowControls",
                "description": "If enabled the user will see the control buttons.",
                "type": "boolean",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Source",
                "description": "The \"path\" to the video.  Usually, this will be the name of the video file, which should be added in the Designer.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Volume",
                "description": "Sets the volume to a number between 0 and 100. Values less than 0 will be treated as 0, and values greater than 100 will be treated as 100.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "Completed",
                "description": "Indicates that the video has reached the end",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "VideoPlayerError",
                "description": "The VideoPlayerError event is no longer used. Please use the Screen.ErrorOccurred event instead.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "GetDuration",
                "description": "Returns duration of the video in milliseconds.",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "Pause",
                "description": "Pauses playback of the video.  Playback can be resumed at the same location by calling the <code>Start<\/code> method.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SeekTo",
                "description": "Seeks to the requested time (specified in milliseconds) in the video. If the video is paused, the frame shown will not be updated by the seek. The player can jump only to key frames in the video, so seeking to times that differ by short intervals may not actually move to different frames.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "ms",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "Start",
                "description": "Starts playback of the video.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Stop",
                "description": "Resets to start of video and pauses it if video was playing.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Wallpaper",
        "name": "Wallpaper",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "UTILITIES",
        "helpString": "Component for Wallpaper",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/wallpaper.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "SaveWallpaperAs",
                "editorType": "string",
                "defaultValue": "wallpaperPicture.png",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "DesiredMinimumHeight",
                "description": "Returns the desired minimum height for the wallpaper.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "DesiredMinimumWidth",
                "description": "Returns the desired minimum width for the wallpaper.",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "IsSetWallpaperAllowed",
                "description": "Returns whether the calling package is allowed to set the wallpaper for the calling user. This block works only on devices with Android 7+.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "IsWallpaperSupported",
                "description": "Returns whether wallpapers are supported for the calling user. This block works only on devices with Android 6+.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "SaveWallpaperAs",
                "description": "After the user clicked on \"Get Wallpaper\" this will be the name for the wallpaper picture.",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotWallpaper",
                "description": "Event to detect that the component got the current system wallpaper.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "picture",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "WallpaperChanged",
                "description": "Event to detect that the user has changed the wallpaper. This event will be invoked by the \"Set Wallpaper\" function.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "WallpaperCleared",
                "description": "Event to detect that the user has cleared\/deleted the wallpaper.",
                "deprecated": "false",
                "params": []
            }
        ],
        "methods": [
            {
                "name": "Clear",
                "description": "Remove any currently set system wallpaper, reverting to the system's built-in wallpaper.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ClearWallpaper",
                "description": "Reset all wallpaper to the factory default. This block works only on devices with Android 9+.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GetWallpaper",
                "description": "Retrieve the current system wallpaper; if no wallpaper is set, the system built-in static wallpaper is returned.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "SetLockScreenWallpaper",
                "description": "Change the current lock screen wallpaper. This block works only on devices with Android 7+.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "image",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "SetWallpaper",
                "description": "Change the current system wallpaper.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "image",
                        "type": "text"
                    }
                ]
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.Web",
        "name": "Web",
        "external": "false",
        "version": "6",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "CONNECTIVITY",
        "helpString": "Non-visible component that provides functions for HTTP GET, POST, PUT, and DELETE requests.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/web.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "AllowCookies",
                "editorType": "boolean",
                "defaultValue": "false",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ResponseFileName",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "SaveResponse",
                "editorType": "boolean",
                "defaultValue": "false",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Timeout",
                "editorType": "non_negative_integer",
                "defaultValue": "0",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "Url",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "AllowCookies",
                "description": "Whether the cookies from a response should be saved and used in subsequent requests. Cookies are only supported on Android version 2.3 or greater.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "RequestHeaders",
                "description": "The request headers, as a list of two-element sublists. The first element of each sublist represents the request header field name. The second element of each sublist represents the request header field values, either a single value or a list containing multiple values.",
                "type": "list",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "ResponseFileName",
                "description": "The name of the file where the response should be saved. If SaveResponse is true and ResponseFileName is empty, then a new file name will be generated.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "SaveResponse",
                "description": "Whether the response should be saved in a file.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Timeout",
                "description": "The number of milliseconds that a web request will wait for a response before giving up. If set to 0, then there is no time limit on how long the request will wait.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Url",
                "description": "The URL for the web request.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotFile",
                "description": "Event indicating that a request has finished.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    },
                    {
                        "name": "responseCode",
                        "type": "number"
                    },
                    {
                        "name": "responseType",
                        "type": "text"
                    },
                    {
                        "name": "fileName",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GotText",
                "description": "Event indicating that a request has finished.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    },
                    {
                        "name": "responseCode",
                        "type": "number"
                    },
                    {
                        "name": "responseType",
                        "type": "text"
                    },
                    {
                        "name": "responseContent",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "TimedOut",
                "description": "Event indicating that a request has timed out.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "BuildRequestData",
                "description": "Converts a list of two-element sublists, representing name and value pairs, to a\n string formatted as application\/x-www-form-urlencoded media type, suitable to pass to\n PostText.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "list",
                        "type": "list"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "ClearCookies",
                "description": "Clears all cookies for this Web component.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Delete",
                "description": "Performs an HTTP DELETE request using the Url property and retrieves the\n response.<br>\n If the SaveResponse property is true, the response will be saved in a file\n and the GotFile event will be triggered. The ResponseFileName property\n can be used to specify the name of the file.<br>\n If the SaveResponse property is false, the GotText event will be\n triggered.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Get",
                "description": "Performs an HTTP GET request using the Url property and retrieves the\n response.<br>\n If the SaveResponse property is true, the response will be saved in a file\n and the GotFile event will be triggered. The ResponseFileName property\n can be used to specify the name of the file.<br>\n If the SaveResponse property is false, the GotText event will be\n triggered.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "HtmlTextDecode",
                "description": "Decodes the given HTML text value. HTML character entities such as &amp;amp;, &amp;lt;, &amp;gt;, &amp;apos;, and &amp;quot; are changed to &amp;, &lt;, &gt;, &#39;, and &quot;. Entities such as &amp;#xhhhh, and &amp;#nnnn are changed to the appropriate characters.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "htmlText",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "JsonTextDecode",
                "description": "Decodes the given JSON encoded value to produce a corresponding AppInventor value.\n A JSON list [x, y, z] decodes to a list (x y z),  A JSON object with name A and value B,\n (denoted as A:B enclosed in curly braces) decodes to a list\n ((A B)), that is, a list containing the two-element list (A B).",
                "deprecated": "false",
                "params": [
                    {
                        "name": "jsonText",
                        "type": "text"
                    }
                ],
                "returnType": "any"
            },
            {
                "name": "PostFile",
                "description": "Performs an HTTP POST request using the Url property and data from the specified file.<br>If the SaveResponse property is true, the response will be saved in a file and the GotFile event will be triggered. The ResponseFileName property can be used to specify the name of the file.<br>If the SaveResponse property is false, the GotText event will be triggered.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "path",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PostText",
                "description": "Performs an HTTP POST request using the Url property and the specified text.<br>The characters of the text are encoded using UTF-8 encoding.<br>If the SaveResponse property is true, the response will be saved in a file and the GotFile event will be triggered. The responseFileName property can be used to specify the name of the file.<br>If the SaveResponse property is false, the GotText event will be triggered.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PostTextWithEncoding",
                "description": "Performs an HTTP POST request using the Url property and the specified text.<br>The characters of the text are encoded using the given encoding.<br>If the SaveResponse property is true, the response will be saved in a file and the GotFile event will be triggered. The ResponseFileName property can be used to specify the name of the file.<br>If the SaveResponse property is false, the GotText event will be triggered.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "encoding",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PutFile",
                "description": "Performs an HTTP PUT request using the Url property and data from the specified file.<br>If the SaveResponse property is true, the response will be saved in a file and the GotFile event will be triggered. The ResponseFileName property can be used to specify the name of the file.<br>If the SaveResponse property is false, the GotText event will be triggered.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "path",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PutText",
                "description": "Performs an HTTP PUT request using the Url property and the specified text.<br>The characters of the text are encoded using UTF-8 encoding.<br>If the SaveResponse property is true, the response will be saved in a file and the GotFile event will be triggered. The responseFileName property can be used to specify the name of the file.<br>If the SaveResponse property is false, the GotText event will be triggered.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "PutTextWithEncoding",
                "description": "Performs an HTTP PUT request using the Url property and the specified text.<br>The characters of the text are encoded using the given encoding.<br>If the SaveResponse property is true, the response will be saved in a file and the GotFile event will be triggered. The ResponseFileName property can be used to specify the name of the file.<br>If the SaveResponse property is false, the GotText event will be triggered.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    },
                    {
                        "name": "encoding",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "UriDecode",
                "description": "Decodes the encoded text value.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "UriEncode",
                "description": "Encodes the given text value so that it can be used in a URL.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "text",
                        "type": "text"
                    }
                ],
                "returnType": "text"
            },
            {
                "name": "XMLTextDecode",
                "description": "Decodes the given XML string to produce a list structure.  See the App Inventor documentation on \"Other topics, notes, and details\" for information.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "XmlText",
                        "type": "text"
                    }
                ],
                "returnType": "any"
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.WebViewer",
        "name": "WebViewer",
        "external": "false",
        "version": "13",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "VIEWS",
        "helpString": "Component for viewing Web pages. The Home URL can be specified in the Designer or in the Blocks Editor. The view can be set to follow links when they are tapped, and users can fill in Web forms. Warning: This is not a full browser. For example, pressing the phone's hardware Back key will exit the app, rather than move back in the browser history.<p \/>You can use the WebViewer.WebViewString property to communicate between your app and Javascript code running in the Webviewer page. In the app, you get and set WebViewString.  In the WebViewer, you include Javascript that references the window.Makeroid object, using the methoods <em>getWebViewString()<\/em> and <em>setWebViewString(text)<\/em>. <p \/>For example, if the WebViewer opens to a page that contains the Javascript command <br \/><em>document.write(\"The answer is\" + window.Makeroid.getWebViewString());<\/em> <br \/>and if you set WebView.WebVewString to \"hello\", then the web page will show <br \/><em>The answer is hello<\/em>. <br \/>And if the Web page contains Javascript that executes the command <br \/><em>window.Makeroid.setWebViewString(\"hello from Javascript\")<\/em>, <br \/>then the value of the WebViewString property will be <br \/><em>hello from Javascript<\/em>.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "false",
        "iconName": "",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "DesktopMode",
                "editorType": "boolean",
                "defaultValue": "false",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "EnableJavaScript",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "FollowLinks",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "HomeUrl",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "IgnoreSslErrors",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "LoadImages",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "PromptforPermission",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Scrollbar",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "UseExternalBrowser",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "UserAgent",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "UsesLocation",
                "editorType": "boolean",
                "defaultValue": "False",
                "propertyType": "advanced",
                "editorArgs": []
            },
            {
                "name": "Visible",
                "editorType": "visibility",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ZoomDisplay",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ZoomEnabled",
                "editorType": "boolean",
                "defaultValue": "True",
                "propertyType": "common",
                "editorArgs": []
            },
            {
                "name": "ZoomPercent",
                "editorType": "integer",
                "defaultValue": "100",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "Column",
                "description": "Column property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "CurrentPageTitle",
                "description": "Title of the page currently viewed",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "CurrentUrl",
                "description": "URL of the page currently viewed. This could be different from the Home URL if new pages were visited by following links.",
                "type": "text",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "DesktopMode",
                "description": "Get\/Set Desktop mode by altering the user agent string.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "EnableJavaScript",
                "description": "Enable\/Disable JavaScript. Enabled by default",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "FollowLinks",
                "description": "Determines whether to follow links when they are tapped in the WebViewer.  If you follow links, you can use GoBack and GoForward to navigate the browser history.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Height",
                "description": "Specifies the component's vertical height, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "HeightPercent",
                "description": "Specifies the component's vertical height as a percentage\n of the height of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "HomeUrl",
                "description": "URL of the page the WebViewer should initially open to. Setting this will load the page.",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "IgnoreSslErrors",
                "description": "Determine whether or not to ignore SSL errors. Set to true to ignore errors. Use this to accept self signed certificates from websites.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "LoadImages",
                "description": "Whether or not to automatically load images",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "PromptforPermission",
                "description": "If True, then prompt the user of the WebView to give permission to access the geolocation API. If False, then assume permission is granted.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Row",
                "description": "Row property getter method.",
                "type": "number",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Scrollbar",
                "description": "Whether to display a scrollbar",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UseExternalBrowser",
                "description": "Open a link in the webviewer page using the external browser. If true the page will be loaded in the external browser and not in the webviewer itself.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UserAgent",
                "description": "Get User Agent",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "UsesLocation",
                "description": "Whether or not to give the application permission to use the Javascript geolocation API. This property is available only in the designer.",
                "type": "boolean",
                "rw": "invisible",
                "deprecated": "false"
            },
            {
                "name": "Visible",
                "description": "Returns true iff the component is visible.",
                "type": "boolean",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WebViewString",
                "description": "Gets the WebView's String, which is viewable through Javascript in the WebView as the window.AppInventor object",
                "type": "text",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "Width",
                "description": "Specifies the component's horizontal width, measured in pixels.",
                "type": "number",
                "rw": "read-write",
                "deprecated": "false"
            },
            {
                "name": "WidthPercent",
                "description": "Specifies the component's horizontal width as a percentage\n of the Width of its parent Component.",
                "type": "number",
                "rw": "write-only",
                "deprecated": "false"
            },
            {
                "name": "ZoomDisplay",
                "description": "Show or Hide the zoom display.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ZoomEnabled",
                "description": "Enable or Disable pinch zooming. This effects both pinch zooming and the zoom controls.",
                "type": "boolean",
                "rw": "read-only",
                "deprecated": "false"
            },
            {
                "name": "ZoomPercent",
                "description": "The zoom of the page in percent %",
                "type": "number",
                "rw": "read-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "AfterJSEvaluated",
                "description": "Get the result of the evaluated JS",
                "deprecated": "false",
                "params": [
                    {
                        "name": "result",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "CookiesRemoved",
                "description": "This event return true when the cookies have been successfully removed. If the cookies was successfully cleared then the next run returns false as status, if in this time no new cookies was set.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "success",
                        "type": "boolean"
                    }
                ]
            },
            {
                "name": "OnConsoleMessage",
                "description": "Get webpage console output",
                "deprecated": "false",
                "params": [
                    {
                        "name": "message",
                        "type": "text"
                    },
                    {
                        "name": "lineNumber",
                        "type": "number"
                    },
                    {
                        "name": "sourceId",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "OnDownloadStart",
                "description": "Event for listening download links.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    },
                    {
                        "name": "contentDisposition",
                        "type": "text"
                    },
                    {
                        "name": "mimetype",
                        "type": "text"
                    },
                    {
                        "name": "contentLength",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "PageLoaded",
                "description": "Triggers when page finished loading",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ProgressChanged",
                "description": "Event to detect that the loading progress has changed.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "progress",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "WebViewStringChange",
                "description": "When the JavaScript calls AppInventor.setWebViewString this event is run.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "value",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "CanGoBack",
                "description": "Returns true if the WebViewer can go back in the history list.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "CanGoBackOrForward",
                "description": "Returns true if the WebViewer can go back or forward the number of steps in the history list.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "steps",
                        "type": "number"
                    }
                ],
                "returnType": "boolean"
            },
            {
                "name": "CanGoForward",
                "description": "Returns true if the WebViewer can go forward in the history list.",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "ClearCaches",
                "description": "Clear WebView caches.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ClearCookies",
                "description": "Start to clear the WebView cookies.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "ClearLocations",
                "description": "Clear stored location permissions.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "EvaluateJS",
                "description": "Evaluate JS in the context of the current page",
                "deprecated": "false",
                "params": [
                    {
                        "name": "script",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "GoBack",
                "description": "Go back to the previous page in the history list. Does nothing if there is no previous page.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GoBackOrForward",
                "description": "Go forward or backward a number of steps away from the current page. Steps is negative if backward and positive if forward.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "steps",
                        "type": "number"
                    }
                ]
            },
            {
                "name": "GoForward",
                "description": "Go forward to the next page in the history list. Does nothing if there is no next page.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GoHome",
                "description": "Loads the home URL page. This happens automatically when the home URL is changed.",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "GoToUrl",
                "description": "Load the page at the given URL.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "url",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "LoadHtml",
                "description": "Load HTML content using Base64-encoded data URI scheme",
                "deprecated": "false",
                "params": [
                    {
                        "name": "html",
                        "type": "text"
                    }
                ]
            },
            {
                "name": "Reload",
                "description": "Reloads the current page",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "StopLoading",
                "description": "Stops the current load.",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.WiFiAdmin",
        "name": "WiFiAdmin",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "CONNECTIVITY",
        "helpString": "Control the WiFi of the Device",
        "helpUrl": "https:\/\/docs.kodular.io\/components\/connectivity\/wifi\/",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/wifi.png",
        "androidMinSdk": 19,
        "properties": [],
        "blockProperties": [],
        "events": [],
        "methods": [
            {
                "name": "BSSID",
                "description": "Return the basic service set identifier (BSSID) of the current access point",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "Disable",
                "description": "Disable the Wi-Fi",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Enable",
                "description": "Enable the Wi-Fi",
                "deprecated": "false",
                "params": []
            },
            {
                "name": "Is5GHzSupported",
                "description": "Return whether this adapter supports 5 GHz band",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "IsEnabled",
                "description": "Return whether Wi-Fi is enabled or disabled",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "IsWiFiDirectSupported",
                "description": "Return whether this adapter supports Wi-Fi Direct",
                "deprecated": "false",
                "params": [],
                "returnType": "boolean"
            },
            {
                "name": "LinkSpeed",
                "description": "Returns the current link speed in Mbps",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "LocalIP",
                "description": "Return the current Local IP",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "MacAddress",
                "description": "Returns the wlan mac address.",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "SSID",
                "description": "Returns the service set identifier (SSID) of the current 802.11 network",
                "deprecated": "false",
                "params": [],
                "returnType": "text"
            },
            {
                "name": "SignalStrength",
                "description": "Returns the received signal strength indicator of the current 802.11 network, in dBm",
                "deprecated": "false",
                "params": [],
                "returnType": "number"
            },
            {
                "name": "Toggle",
                "description": "Toggle the Wi-Fi",
                "deprecated": "false",
                "params": []
            }
        ]
    },
    {
        "type": "com.google.appinventor.components.runtime.YandexTranslate",
        "name": "YandexTranslate",
        "external": "false",
        "version": "2",
        "dateBuilt": "2020-05-14T22:54:53+0530",
        "categoryString": "MEDIA",
        "helpString": "Use this component to translate words and sentences between different languages. This component needs Internet access, as it will request translations to the Yandex.Translate service. Specify the source and target language in the form source-target using two letter language codes. So\"en-es\" will translate from English to Spanish while \"es-ru\" will translate from Spanish to Russian. If you leave out the source language, the service will attempt to detect the source language. So providing just \"es\" will attempt to detect the source language and translate it to Spanish.<p \/> This component is powered by the Yandex translation service.  See http:\/\/api.yandex.com\/translate\/ for more information, including the list of available languages and the meanings of the language codes and status codes. <p \/>Note: Translation happens asynchronously in the background. When the translation is complete, the \"GotTranslation\" event is triggered.",
        "helpUrl": "",
        "showOnPalette": "true",
        "nonVisible": "true",
        "iconName": "images/yandex.png",
        "androidMinSdk": 19,
        "properties": [
            {
                "name": "ApiKey",
                "editorType": "string",
                "defaultValue": "",
                "propertyType": "common",
                "editorArgs": []
            }
        ],
        "blockProperties": [
            {
                "name": "ApiKey",
                "description": "",
                "type": "text",
                "rw": "write-only",
                "deprecated": "false"
            }
        ],
        "events": [
            {
                "name": "GotTranslation",
                "description": "Event triggered when the Yandex.Translate service returns the translated text. This event also provides a response code for error handling. If the responseCode is not 200, then something went wrong with the call, and the translation will not be available.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "responseCode",
                        "type": "text"
                    },
                    {
                        "name": "translation",
                        "type": "text"
                    }
                ]
            }
        ],
        "methods": [
            {
                "name": "RequestTranslation",
                "description": "By providing a target language to translate to (for instance, 'es' for Spanish, 'en' for English, or 'ru' for Russian), and a word or sentence to translate, this method will request a translation to the Yandex.Translate service.\nOnce the text is translated by the external service, the event GotTranslation will be executed.\nNote: Yandex.Translate will attempt to detect the source language. You can also specify prepending it to the language translation. I.e., es-ru will specify Spanish to Russian translation.",
                "deprecated": "false",
                "params": [
                    {
                        "name": "languageToTranslateTo",
                        "type": "text"
                    },
                    {
                        "name": "textToTranslate",
                        "type": "text"
                    }
                ]
            }
        ]
    }
]
