{
    "$schema": "../../TcHmiFramework/Schema/ControlDescription.Schema.json",
    "apiVersion": 1,
    "name": "TcHmiKeyboard",
    "namespace": "TcHmi.Controls.Beckhoff",
    "displayName": "Keyboard",
    "version": {
        "full": "1.12.760.48",
        "major": 1,
        "minor": 12,
        "build": 760,
        "revision": 48
    },
    "visible": true,
    "themeable": "Standard",
    "base": "TcHmi.Controls.System.TcHmiControl",
    "description": "An on-screen Keyboard.",
    "defaultDesignerEvent": "",
    "properties": {
        "containerControl": false,
        "geometry": {
            "width": 790,
            "height": 250
        }
    },
    "icons": [
        {
            "name": "Icons/16x16.png",
            "width": 16,
            "height": 16
        }
    ],
    "template": "Template.html",
    "dependencyFiles": [
        {
            "name": "Style.css",
            "type": "Stylesheet",
            "description": ""
        },
        {
            "name": "TcHmiKeyboard.js",
            "type": "JavaScript",
            "description": ""
        }
    ],
    "themes": {
        "Base": {
            "resources": [
                {
                    "name": "Themes/Base/Style.css",
                    "type": "Stylesheet",
                    "description": ""
                }
            ]
        },
        "Base-Dark": {
            "resources": [
                {
                    "name": "Themes/Base-Dark/Style.css",
                    "type": "Stylesheet",
                    "description": ""
                }
            ]
        }
    },
    "attributes": [
        {
            "name": "data-tchmi-width-mode",
            "propertyName": "WidthMode",
            "propertySetterName": "setWidthMode",
            "propertyGetterName": "getWidthMode",
            "displayName": "WidthMode",
            "visible": true,
            "themeable": "Advanced",
            "displayPriority": 40,
            "type": "tchmi:framework#/definitions/SizeModeWithContent",
            "category": "Layout",
            "description": "Defines wether the control width is applied as configured via the width attribute or automatically adjusts to fill the parent or fit the displayed keyboard layout.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": "Value"
        },
        {
            "name": "data-tchmi-height-mode",
            "propertyName": "HeightMode",
            "propertySetterName": "setHeightMode",
            "propertyGetterName": "getHeightMode",
            "displayName": "HeightMode",
            "visible": true,
            "themeable": "Advanced",
            "displayPriority": 40,
            "type": "tchmi:framework#/definitions/SizeModeWithContent",
            "category": "Layout",
            "description": "Defines wether the control height is applied as configured via the height attribute or automatically adjusts to fill the parent or fit the displayed keyboard layout.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": "Value"
        },
        {
            "name": "data-tchmi-layout-file",
            "propertyName": "LayoutFile",
            "propertySetterName": "setLayoutFile",
            "propertyGetterName": "getLayoutFile",
            "displayName": "LayoutFile",
            "visible": true,
            "themeable": "Advanced",
            "displayPriority": 10,
            "type": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiKeyboard.ProjectKeyboardLayouts",
            "category": "Common",
            "description": "Path to a layout JSON file in the project.\nThis overrides Layout.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": "KeyboardLayouts/US - compact.keyboard.json",
            "defaultValueInternal": null
        },
        {
            "name": "data-tchmi-scale-mode",
            "propertyName": "ScaleMode",
            "propertySetterName": "setScaleMode",
            "propertyGetterName": "getScaleMode",
            "displayName": "ScaleMode",
            "visible": true,
            "themeable": "Advanced",
            "displayPriority": 60,
            "type": "tchmi:framework#/definitions/ScaleMode",
            "category": "Common",
            "description": "Scale the content to control size. Alternatively, the control size can be set to the size of the displayed layout using WidthMode and HeightMode.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": "ScaleToFit",
            "defaultValueInternal": "None"
        },
        {
            "name": "data-tchmi-fixed-target",
            "propertyName": "FixedTarget",
            "propertySetterName": "setFixedTarget",
            "propertyGetterName": "getFixedTarget",
            "displayName": "FixedTarget",
            "visible": true,
            "themeable": "Advanced",
            "displayPriority": 10,
            "type": "tchmi:general#/definitions/String",
            "category": "Behaviour",
            "description": "Set this to the name of a control to always send input to that control, regardless of focus.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": ""
        },
        {
            "name": "data-tchmi-release-sticky-keys-manually",
            "propertyName": "ReleaseStickyKeysManually",
            "propertySetterName": "setReleaseStickyKeysManually",
            "propertyGetterName": "getReleaseStickyKeysManually",
            "displayName": "ReleaseStickyKeysManually",
            "visible": true,
            "themeable": "Advanced",
            "displayPriority": 20,
            "type": "tchmi:general#/definitions/Boolean",
            "category": "Behaviour",
            "description": "Whether to require an explicit keypress on a sticky key to release it, or release it automatically after a character was typed.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": false
        },
        {
            "name": "data-tchmi-pressed-keys",
            "propertyName": "PressedKeys",
            "propertyGetterName": "getPressedKeys",
            "displayName": "PressedKeys",
            "visible": true,
            "type": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiKeyboard.KeyList",
            "category": "Behaviour",
            "description": "Currently pressed keys.",
            "readOnly": true,
            "bindable": false,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": []
        },
        {
            "name": "data-tchmi-longpress-delay",
            "propertyName": "LongpressDelay",
            "propertySetterName": "setLongpressDelay",
            "propertyGetterName": "getLongpressDelay",
            "displayName": "LongpressDelay",
            "visible": true,
            "themeable": "Advanced",
            "displayPriority": 60,
            "type": "tchmi:general#/definitions/Number",
            "category": "Behaviour",
            "description": "The time in milliseconds before the longpress action is triggered.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": 300
        },
        {
            "name": "data-tchmi-repetition-delay",
            "propertyName": "RepetitionDelay",
            "propertySetterName": "setRepetitionDelay",
            "propertyGetterName": "getRepetitionDelay",
            "displayName": "RepetitionDelay",
            "visible": true,
            "themeable": "Advanced",
            "displayPriority": 60,
            "type": "tchmi:general#/definitions/Number",
            "category": "Behaviour",
            "description": "The time in milliseconds between repeated kepresses when the longpress action is repetition.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": 50
        },
        {
            "name": "data-tchmi-indirect-input-horizontal-alignment",
            "propertyName": "IndirectInputHorizontalAlignment",
            "propertySetterName": "setIndirectInputHorizontalAlignment",
            "propertyGetterName": "getIndirectInputHorizontalAlignment",
            "displayName": "IndirectInputHorizontalAlignment",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 30,
            "type": "tchmi:framework#/definitions/HorizontalAlignment",
            "category": "Indirect Input",
            "description": "The horizontal alignment of text in the indirect input textbox.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": "Left"
        },
        {
            "name": "data-tchmi-indirect-input-font-size",
            "propertyName": "IndirectInputFontSize",
            "propertySetterName": "setIndirectInputFontSize",
            "propertyGetterName": "getIndirectInputFontSize",
            "displayName": "IndirectInputFontSize",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 40,
            "type": "tchmi:framework#/definitions/MeasurementValue",
            "category": "Indirect Input",
            "description": "The font size of the indirect input textbox.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": null
        },
        {
            "name": "data-tchmi-indirect-input-font-size-unit",
            "propertyName": "IndirectInputFontSizeUnit",
            "propertySetterName": "setIndirectInputFontSizeUnit",
            "propertyGetterName": "getIndirectInputFontSizeUnit",
            "displayName": "IndirectInputFontSizeUnit",
            "refTo": "IndirectInputFontSize",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 40,
            "type": "tchmi:framework#/definitions/MeasurementUnit",
            "category": "Indirect Input",
            "description": "The font size unit of the indirect input textbox.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": "px"
        },
        {
            "name": "data-tchmi-indirect-input-padding",
            "propertyName": "IndirectInputPadding",
            "propertySetterName": "setIndirectInputPadding",
            "propertyGetterName": "getIndirectInputPadding",
            "displayName": "IndirectInputPadding",
            "visible": true,
            "themeable": "Advanced",
            "displayPriority": 110,
            "type": "tchmi:framework#/definitions/Padding",
            "category": "Indirect Input",
            "description": "The padding of the indirect input textbox.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "allowSymbolExpressionsInObject": true,
            "defaultValue": {
                "top": 3,
                "right": 3,
                "bottom": 3,
                "left": 3
            },
            "defaultValueInternal": null
        },
        {
            "name": "data-tchmi-label-font-family",
            "propertyName": "LabelFontFamily",
            "propertySetterName": "setLabelFontFamily",
            "propertyGetterName": "getLabelFontFamily",
            "displayName": "LabelFontFamily",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 60,
            "type": "tchmi:framework#/definitions/FontFamily",
            "category": "Labels",
            "description": "Comma separated list of family name or keyword: 'serif', 'sans-serif', 'monospace'.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": null
        },
        {
            "name": "data-tchmi-label-font-size",
            "propertyName": "LabelFontSize",
            "propertySetterName": "setLabelFontSize",
            "propertyGetterName": "getLabelFontSize",
            "displayName": "LabelFontSize",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 60,
            "type": "tchmi:framework#/definitions/MeasurementValue",
            "category": "Labels",
            "description": "The size of the font. Percent values are relative to the parent elements font size.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": 14,
            "defaultValueInternal": 12
        },
        {
            "name": "data-tchmi-label-font-size-unit",
            "propertyName": "LabelFontSizeUnit",
            "propertySetterName": "setLabelFontSizeUnit",
            "propertyGetterName": "getLabelFontSizeUnit",
            "refTo": "LabelFontSize",
            "displayName": "LabelFontSizeUnit",
            "visible": true,
            "themeable": "Advanced",
            "displayPriority": 60,
            "type": "tchmi:framework#/definitions/MeasurementUnit",
            "category": "Labels",
            "description": "Could be 'px' or for relative sizing '%'.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": "px"
        },
        {
            "name": "data-tchmi-label-font-style",
            "propertyName": "LabelFontStyle",
            "propertySetterName": "setLabelFontStyle",
            "propertyGetterName": "getLabelFontStyle",
            "displayName": "LabelFontStyle",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 60,
            "type": "tchmi:framework#/definitions/FontStyle",
            "category": "Labels",
            "description": "'Normal', 'Italic' (slanted with special glyphs), 'Oblique' (slanted normal glyphs) or 'Auto' for inherited.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": "Auto"
        },
        {
            "name": "data-tchmi-label-font-weight",
            "propertyName": "LabelFontWeight",
            "propertySetterName": "setLabelFontWeight",
            "propertyGetterName": "getLabelFontWeight",
            "displayName": "LabelFontWeight",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 60,
            "type": "tchmi:framework#/definitions/FontWeight",
            "category": "Labels",
            "description": "'Normal', 'Bold' (glyphs with more weight) or 'Auto' for inherited.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": "Auto"
        },
        {
            "name": "data-tchmi-label-stroke-thickness",
            "propertyName": "LabelStrokeThickness",
            "propertySetterName": "setLabelStrokeThickness",
            "propertyGetterName": "getLabelStrokeThickness",
            "displayName": "LabelStrokeThickness",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 30,
            "type": "tchmi:general#/definitions/Number",
            "category": "Labels",
            "description": "How thick to stroke graphical labels.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "defaultValue": null,
            "defaultValueInternal": null
        },
        {
            "name": "data-tchmi-keyboard-padding",
            "propertyName": "KeyboardPadding",
            "propertySetterName": "setKeyboardPadding",
            "propertyGetterName": "getKeyboardPadding",
            "displayName": "KeyboardPadding",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 51,
            "type": "tchmi:framework#/definitions/PixelPadding",
            "category": "Layout",
            "description": "Padding of the whole keyboard",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "allowSymbolExpressionsInObject": true,
            "defaultValue": {
                "top": 10,
                "topUnit": "px",
                "right": 10,
                "rightUnit": "px",
                "bottom": 10,
                "bottomUnit": "px",
                "left": 10,
                "leftUnit": "px"
            },
            "defaultValueInternal": null
        },
        {
            "name": "data-tchmi-key-padding",
            "propertyName": "KeyPadding",
            "propertySetterName": "setKeyPadding",
            "propertyGetterName": "getKeyPadding",
            "displayName": "KeyPadding",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 51,
            "type": "tchmi:framework#/definitions/Padding",
            "category": "Layout",
            "description": "Padding of the individual keys",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "allowSymbolExpressionsInObject": true,
            "defaultValue": {
                "top": 4,
                "topUnit": "px",
                "right": 4,
                "rightUnit": "px",
                "bottom": 4,
                "bottomUnit": "px",
                "left": 4,
                "leftUnit": "px"
            },
            "defaultValueInternal": null
        },
        {
            "name": "data-tchmi-additional-key-backdrop-padding",
            "propertyName": "AdditionalKeyBackdropPadding",
            "propertySetterName": "setAdditionalKeyBackdropPadding",
            "propertyGetterName": "getAdditionalKeyBackdropPadding",
            "displayName": "AdditionalKeyBackdropPadding",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 51,
            "type": "tchmi:framework#/definitions/Padding",
            "category": "Layout",
            "description": "Padding of the backdrop behind additional keys",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "allowSymbolExpressionsInObject": true,
            "defaultValue": {
                "top": 10,
                "topUnit": "px",
                "right": 10,
                "rightUnit": "px",
                "bottom": 10,
                "bottomUnit": "px",
                "left": 10,
                "leftUnit": "px"
            },
            "defaultValueInternal": null
        },
        {
            "name": "data-tchmi-key-background-color",
            "propertyName": "KeyBackgroundColor",
            "propertySetterName": "setKeyBackgroundColor",
            "propertyGetterName": "getKeyBackgroundColor",
            "displayName": "KeyBackgroundColor",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 20,
            "type": "tchmi:framework#/definitions/Color",
            "category": "Colors",
            "description": "The background color of the keys.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "allowSymbolExpressionsInObject": true,
            "defaultValue": null,
            "defaultValueInternal": null
        },
        {
            "name": "data-tchmi-label-color",
            "propertyName": "LabelColor",
            "propertySetterName": "setLabelColor",
            "propertyGetterName": "getLabelColor",
            "displayName": "LabelColor",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 20,
            "type": "tchmi:framework#/definitions/SolidColor",
            "category": "Colors",
            "description": "The font color of text labels.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "allowSymbolExpressionsInObject": true,
            "defaultValue": null,
            "defaultValueInternal": null
        },
        {
            "name": "data-tchmi-label-stroke-color",
            "propertyName": "LabelStrokeColor",
            "propertySetterName": "setLabelStrokeColor",
            "propertyGetterName": "getLabelStrokeColor",
            "displayName": "LabelStrokeColor",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 20,
            "type": "tchmi:framework#/definitions/SolidColor",
            "category": "Colors",
            "description": "The stroke color of graphical symbols.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "allowSymbolExpressionsInObject": true,
            "defaultValue": null,
            "defaultValueInternal": null
        },
        {
            "name": "data-tchmi-label-fill-color",
            "propertyName": "LabelFillColor",
            "propertySetterName": "setLabelFillColor",
            "propertyGetterName": "getLabelFillColor",
            "displayName": "LabelFillColor",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 60,
            "type": "tchmi:framework#/definitions/Color",
            "category": "Colors",
            "description": "The fill color of graphical symbols.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "allowSymbolExpressionsInObject": true,
            "defaultValue": null,
            "defaultValueInternal": null
        },
        {
            "name": "data-tchmi-additional-key-backdrop-color",
            "propertyName": "AdditionalKeyBackdropColor",
            "propertySetterName": "setAdditionalKeyBackdropColor",
            "propertyGetterName": "getAdditionalKeyBackdropColor",
            "displayName": "AdditionalKeyBackdropColor",
            "visible": true,
            "themeable": "Standard",
            "displayPriority": 60,
            "type": "tchmi:framework#/definitions/Color",
            "category": "Colors",
            "description": "The background color of the backdrop behind additional keys.",
            "readOnly": false,
            "bindable": true,
            "defaultBindingMode": "OneWay",
            "heritable": true,
            "allowSymbolExpressionsInObject": true,
            "defaultValue": null,
            "defaultValueInternal": null
        }
    ],
    "attributeCategories": [
        {
            "name": "Behaviour",
            "displayPriority": 500,
            "defaultCollapsed": true,
            "description": "Attributes defining the behaviour of the control."
        },
        {
            "name": "Indirect Input",
            "displayPriority": 140,
            "defaultCollapsed": true,
            "description": "Attributes controlling the indirect input mode via a textbox owned by the keyboard."
        },
        {
            "name": "Labels",
            "displayPriority": 150,
            "defaultCollapsed": true,
            "description": "Attributes defining the labels of the control."
        }
    ],
    "functions": [],
    "events": [
        {
            "name": ".onKeyPressStarted",
            "displayName": ".onKeyPressStarted",
            "visible": true,
            "displayPriority": 10,
            "category": "Control",
            "description": "The onKeyPressStarted event is fired when the user presses down a key.",
            "heritable": true
        },
        {
            "name": ".onKeyPressCanceled",
            "displayName": ".onKeyPressCanceled",
            "visible": true,
            "displayPriority": 11,
            "category": "Control",
            "description": "The onKeyPressCanceled event is fired when the user cancels a key press by moving the pointer off the key.",
            "heritable": true
        },
        {
            "name": ".onKeyPressFinished",
            "displayName": ".onKeyPressFinished",
            "visible": true,
            "displayPriority": 12,
            "category": "Control",
            "description": "The onKeyPressFinished event is fired when the user finishes pressing a key by releasing a key that was pressed before.",
            "heritable": true
        },
        {
            "name": ".onKeyPressEnded",
            "displayName": ".onKeyPressEnded",
            "visible": true,
            "displayPriority": 13,
            "category": "Control",
            "description": "The onKeyPressEnded event is fired after a key press is finished or canceled.",
            "heritable": true
        },
        {
            "name": ".onIndirectInputAccepted",
            "displayName": ".onIndirectInputAccepted",
            "visible": true,
            "displayPriority": 14,
            "category": "Control",
            "description": "The onIndirectInputAccepted event is fired when the user accepts the indirect input.",
            "heritable": true
        },
        {
            "name": ".onIndirectInputCanceled",
            "displayName": ".onIndirectInputCanceled",
            "visible": true,
            "displayPriority": 15,
            "category": "Control",
            "description": "The onIndirectInputCanceled event is fired when the user cancels the indirect input.",
            "heritable": true
        },
        {
            "name": ".onLayoutLoaded",
            "displayName": ".onLayoutLoaded",
            "visible": true,
            "displayPriority": 16,
            "category": "Control",
            "description": "The onLayoutLoaded event is fired when the layout file was fetched, parsed and the keys were created.",
            "heritable": true
        }
    ],
    "dataTypes": [
        {
            "schema": "Schema/Types.Schema.json"
        }
    ],
    "languages": {
        "en": "Lang/en.json",
        "de": "Lang/de.json"
    }
}