diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..b203355
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "http://json.schemastore.org/eslintrc",
+ "env": {
+ "browser": true,
+ "es6": true,
+ "jquery": true
+ },
+ "parserOptions": {
+ "ecmaVersion": 6,
+ "sourceType": "script"
+ },
+ "rules": {
+ "no-dupe-args": "error",
+ "no-dupe-else-if": "error",
+ "no-duplicate-case": "warn",
+ "no-redeclare": "error",
+ "no-unexpected-multiline": "error",
+ "use-isnan": "error"
+ },
+ "overrides": [
+ {
+ "files": [ "*.ts", "*.tsx" ],
+ "rules": {
+
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..deb59a5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,290 @@
+## Ignore TwinCAT HMI temporary files, build results, and
+## files generated by popular TwinCAT HMI add-ons.
+
+.engineering_servers/
+tchmipublish.journal.json
+liveview_*
+*.cache
+*.db-shm
+*.db-wal
+*.pid
+**/.hmiframework/
+**/.hmipkgs/
+**/*.d.ts
+**/*.js.map
+
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+
+# User-specific files
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+*.vcxproj.filters
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# Visual Studio 2015 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+**/Properties/launchSettings.json
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# TODO: Comment the next line if you want to checkin your web deploy settings
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/packages/*
+# except build/, which is used as an MSBuild target.
+!**/packages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/packages/repositories.config
+# NuGet v3's project.json files produces more ignoreable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+node_modules/
+orleans.codegen.cs
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because git is used.
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+# CodeRush
+.cr/
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/
\ No newline at end of file
diff --git a/.tfignore b/.tfignore
new file mode 100644
index 0000000..42911af
--- /dev/null
+++ b/.tfignore
@@ -0,0 +1,14 @@
+## Ignore TwinCAT HMI temporary files, build results, and
+## files generated by popular TwinCAT HMI add-ons.
+
+.engineering_servers/
+tchmipublish.journal.json
+liveview_*
+*.cache
+*.db-shm
+*.db-wal
+*.pid
+**/.hmiframework/
+**/.hmipkgs/
+**/*.d.ts
+**/*.js.map
diff --git a/Desktop.view b/Desktop.view
new file mode 100644
index 0000000..b14975e
--- /dev/null
+++ b/Desktop.view
@@ -0,0 +1,404 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Fonts/Fonts.css b/Fonts/Fonts.css
new file mode 100644
index 0000000..6cc8e4c
--- /dev/null
+++ b/Fonts/Fonts.css
@@ -0,0 +1,21 @@
+@font-face {
+ font-family: RobotoCondensed;
+ src: url(Roboto-Condensed-webfont.woff);
+}
+
+/**
+ Description about font inclusion in TcHmi
+
+ As a default we include Roboto Condensed (in Fonts folder) as a webfont which will render latin, greek, vietnamese, cyrillic glyphs
+
+ If Roboto does not render the glyphs we use some preinstalled fallback
+ 'Microsoft YaHei' (Windows), 'Hiragino Sans GB' (Mac/iOS), 'Noto Sans CJK SC/TC' (Android), 'WenQuanYi Micro Hei' (Linux) renders chinese
+ 'Meiryo' (Windows), 'Hiragino Kaku Gothic Pro' (Mac/iOS), 'Noto Sans CJK JP' (Android) renders japanese
+
+ For other fonts you can add the woff files into the tchmi project and
+ add a @font-face section yourself
+ The noto family from google tries to cover all of the world, is free to use and fits nicely with roboto
+ see https://www.google.com/get/noto/ and https://fonts.google.com/earlyaccess
+
+ The font usage is defined in the main css file of the active theme (for example Themes/Base/Style.css).
+*/
\ No newline at end of file
diff --git a/Fonts/Roboto-Condensed-webfont.woff b/Fonts/Roboto-Condensed-webfont.woff
new file mode 100644
index 0000000..7bee562
Binary files /dev/null and b/Fonts/Roboto-Condensed-webfont.woff differ
diff --git a/Images/Beckhoff_Logo.svg b/Images/Beckhoff_Logo.svg
new file mode 100644
index 0000000..e3c1032
--- /dev/null
+++ b/Images/Beckhoff_Logo.svg
@@ -0,0 +1,15 @@
+
+
diff --git a/Images/Favicon.ico b/Images/Favicon.ico
new file mode 100644
index 0000000..efdf337
Binary files /dev/null and b/Images/Favicon.ico differ
diff --git a/Images/Manifest/launcher-icon-0-75x.png b/Images/Manifest/launcher-icon-0-75x.png
new file mode 100644
index 0000000..f075f76
Binary files /dev/null and b/Images/Manifest/launcher-icon-0-75x.png differ
diff --git a/Images/Manifest/launcher-icon-1-5x.png b/Images/Manifest/launcher-icon-1-5x.png
new file mode 100644
index 0000000..085e5c0
Binary files /dev/null and b/Images/Manifest/launcher-icon-1-5x.png differ
diff --git a/Images/Manifest/launcher-icon-1x.png b/Images/Manifest/launcher-icon-1x.png
new file mode 100644
index 0000000..06202e3
Binary files /dev/null and b/Images/Manifest/launcher-icon-1x.png differ
diff --git a/Images/Manifest/launcher-icon-2x.png b/Images/Manifest/launcher-icon-2x.png
new file mode 100644
index 0000000..3bdf140
Binary files /dev/null and b/Images/Manifest/launcher-icon-2x.png differ
diff --git a/Images/Manifest/launcher-icon-3x.png b/Images/Manifest/launcher-icon-3x.png
new file mode 100644
index 0000000..c0ef6b7
Binary files /dev/null and b/Images/Manifest/launcher-icon-3x.png differ
diff --git a/Images/Manifest/launcher-icon-4x.png b/Images/Manifest/launcher-icon-4x.png
new file mode 100644
index 0000000..04cbf4f
Binary files /dev/null and b/Images/Manifest/launcher-icon-4x.png differ
diff --git a/Infineon_HMI.hmiproj b/Infineon_HMI.hmiproj
new file mode 100644
index 0000000..a92378c
--- /dev/null
+++ b/Infineon_HMI.hmiproj
@@ -0,0 +1,407 @@
+
+
+
+
+
+ $(registry:HKEY_CURRENT_USER\Software\Beckhoff\TwinCAT3\3.1@InstallDir)\..\Functions\TE2000-HMI-Engineering
+ $(registry:HKEY_LOCAL_MACHINE\Software\Beckhoff\TwinCAT3\3.1@InstallDir)\..\Functions\TE2000-HMI-Engineering
+ $(registry:HKEY_LOCAL_MACHINE\Software\Wow6432Node\Beckhoff\TwinCAT3\3.1@InstallDir)\..\Functions\TE2000-HMI-Engineering
+ 15.0
+ TwinCAT HMI
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+ Infineon_HMI
+ 2
+ 1.0.0.0
+ 3000
+ false
+ false
+ client
+ 1.0
+
+
+ Default
+ True
+ True
+ native,Version=v1.12.0,Profile=tchmi
+ native1.12-tchmi
+ v2
+ False
+ Infineon_HMI
+ 13000
+ 3443
+ 14.3.617.1
+ 14.3.617.1
+ False
+
+
+ $(TcHmiDirectory)\MSBuild\Beckhoff.TwinCAT.HMI.tasks
+ $(TcHmiDirectory)\MSBuild\Beckhoff.TwinCAT.HMI.targets
+
+
+
+
+
+ <_TcHmiNodeJsMode>Global
+ <_TcHmiNodeJsMode Condition="'$(_TcHmiNodeJsMode)' == ''">Global
+ <_TcHmiNodePath Condition="'$(_TcHmiNodeJsMode)' == 'Global'">$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Node.js@InstallPath)
+ <_TcHmiNodePath Condition="'$(_TcHmiNodeJsMode)' == 'Global' AND '$(_TcHmiNodePath)' == '' AND Exists('C:\Program Files\nodejs\')">C:\Program Files\nodejs\
+ <_TcHmiNodePath Condition="'$(_TcHmiNodeJsMode)' == 'Global' AND '$(_TcHmiNodePath)' == '' AND Exists('C:\Program Files (x86)\nodejs\')">C:\Program Files (x86)\nodejs\
+
+
+
+ $(_TcHmiNodePath)
+
+
+
+ 2.0
+ b4b0e423-9884-4277-82a6-6d7062793303
+ TwinCAT3HmiProject
+ TwinCAT3HmiProject
+ Release
+ TwinCAT HMI
+
+
+
+ true
+ full
+ false
+ bin\
+ DEBUG;TRACE
+ prompt
+ 4
+ TwinCAT HMI
+ Infineon_HMI
+
+
+ pdbonly
+ true
+ bin\
+ TRACE
+ prompt
+ 4
+ TwinCAT HMI
+ Infineon_HMI
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreBuildEvent;
+ CoreBuild;
+ PostBuildEvent
+
+
+ BaseClean
+
+
+
+ $(MSBuildProjectDirectory)
+ 127.0.0.1
+ 1010
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Infineon_HMI
+
+
+
+ false
+
+
+ Content
+ True
+
+
+ Content
+ True
+
+
+ Content
+ True
+
+
+ Content
+ True
+
+
+ Content
+ True
+
+
+ Content
+ True
+
+
+ Content
+ True
+
+
+ Content
+ True
+
+
+ Content
+ True
+
+
+ Content
+ true
+
+
+ Content
+ true
+ tsconfig.tpl.json
+
+
+ Content
+ true
+
+
+ Content
+ false
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ false
+
+
+ Content
+ false
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+ Content
+ true
+
+
+
+
+
+
+
+ Content
+
+
+ Content
+
+
+ Content
+
+
+ Content
+ false
+
+
+ Content
+ false
+
+
+ Content
+ false
+
+
+ Content
+ false
+
+
+ Content
+ false
+
+
+ Content
+ false
+
+
+ Content
+
+
+ Content
+
+
+ Content
+
+
+ Content
+ false
+
+
+ Content
+ false
+
+
+ Content
+ false
+
+
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/KeyboardLayouts/German - compact.keyboard.json b/KeyboardLayouts/German - compact.keyboard.json
new file mode 100644
index 0000000..1252ef0
--- /dev/null
+++ b/KeyboardLayouts/German - compact.keyboard.json
@@ -0,0 +1,3534 @@
+{
+ "useIndirectInput": false,
+ "hasNumPad": false,
+ "displayName": "German (Compact)",
+ "localeName": "de-DE",
+ "layouts": [
+ {
+ "name": "default",
+ "dimensions": {
+ "width": 770,
+ "height": 230
+ },
+ "keys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyQ",
+ "key": "q",
+ "shiftKey": "Q",
+ "labels": [
+ {
+ "text": "q",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Q",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit1",
+ "key": "1",
+ "shiftKey": "1",
+ "labels": [
+ {
+ "text": "1",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyQ",
+ "key": "@",
+ "shiftKey": "@",
+ "labels": [
+ {
+ "text": "@",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyW",
+ "key": "w",
+ "shiftKey": "W",
+ "labels": [
+ {
+ "text": "w",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "W",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit2",
+ "key": "2",
+ "shiftKey": "2",
+ "labels": [
+ {
+ "text": "2",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyE",
+ "key": "e",
+ "shiftKey": "E",
+ "labels": [
+ {
+ "text": "e",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "E",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit3",
+ "key": "3",
+ "shiftKey": "3",
+ "labels": [
+ {
+ "text": "3",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": -120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyE",
+ "key": "€",
+ "shiftKey": "€",
+ "labels": [
+ {
+ "text": "€",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyE",
+ "key": "ê",
+ "shiftKey": "Ê",
+ "labels": [
+ {
+ "text": "ê",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ê",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 240,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyE",
+ "key": "é",
+ "shiftKey": "É",
+ "labels": [
+ {
+ "text": "é",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "É",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 360,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyE",
+ "key": "è",
+ "shiftKey": "È",
+ "labels": [
+ {
+ "text": "è",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "È",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyR",
+ "key": "r",
+ "shiftKey": "R",
+ "labels": [
+ {
+ "text": "r",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "R",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit4",
+ "key": "4",
+ "shiftKey": "4",
+ "labels": [
+ {
+ "text": "4",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyT",
+ "key": "t",
+ "shiftKey": "T",
+ "labels": [
+ {
+ "text": "t",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "T",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit5",
+ "key": "5",
+ "shiftKey": "5",
+ "labels": [
+ {
+ "text": "5",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyY",
+ "key": "z",
+ "shiftKey": "Z",
+ "labels": [
+ {
+ "text": "z",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Z",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit6",
+ "key": "6",
+ "shiftKey": "6",
+ "labels": [
+ {
+ "text": "6",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyU",
+ "key": "u",
+ "shiftKey": "U",
+ "labels": [
+ {
+ "text": "u",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "U",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit7",
+ "key": "7",
+ "shiftKey": "7",
+ "labels": [
+ {
+ "text": "7",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyU",
+ "key": "û",
+ "shiftKey": "Û",
+ "labels": [
+ {
+ "text": "û",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Û",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 240,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyU",
+ "key": "ú",
+ "shiftKey": "Ú",
+ "labels": [
+ {
+ "text": "ú",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ú",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 360,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyU",
+ "key": "ù",
+ "shiftKey": "Ù",
+ "labels": [
+ {
+ "text": "ù",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ù",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 54.54545454545454,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyI",
+ "key": "i",
+ "shiftKey": "I",
+ "labels": [
+ {
+ "text": "i",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "I",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit8",
+ "key": "8",
+ "shiftKey": "8",
+ "labels": [
+ {
+ "text": "8",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyI",
+ "key": "î",
+ "shiftKey": "Î",
+ "labels": [
+ {
+ "text": "î",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Î",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 240,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyI",
+ "key": "í",
+ "shiftKey": "Í",
+ "labels": [
+ {
+ "text": "í",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Í",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 360,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyI",
+ "key": "ì",
+ "shiftKey": "Ì",
+ "labels": [
+ {
+ "text": "ì",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ì",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 62.33766233766234,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyO",
+ "key": "o",
+ "shiftKey": "O",
+ "labels": [
+ {
+ "text": "o",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "O",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit9",
+ "key": "9",
+ "shiftKey": "9",
+ "labels": [
+ {
+ "text": "9",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyO",
+ "key": "ô",
+ "shiftKey": "Ô",
+ "labels": [
+ {
+ "text": "ô",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ô",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 240,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyO",
+ "key": "ó",
+ "shiftKey": "Ó",
+ "labels": [
+ {
+ "text": "ó",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ó",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 360,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyO",
+ "key": "ò",
+ "shiftKey": "Ò",
+ "labels": [
+ {
+ "text": "ò",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ò",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 70.12987012987013,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyP",
+ "key": "p",
+ "shiftKey": "P",
+ "labels": [
+ {
+ "text": "p",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "P",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit0",
+ "key": "0",
+ "shiftKey": "0",
+ "labels": [
+ {
+ "text": "0",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 77.92207792207793,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketLeft",
+ "key": "ü",
+ "shiftKey": "Ü",
+ "labels": [
+ {
+ "text": "ü",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ü",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 2.5974025974025974,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyA",
+ "key": "a",
+ "shiftKey": "A",
+ "labels": [
+ {
+ "text": "a",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "A",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyA",
+ "key": "â",
+ "shiftKey": "Â",
+ "labels": [
+ {
+ "text": "â",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Â",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyA",
+ "key": "á",
+ "shiftKey": "Á",
+ "labels": [
+ {
+ "text": "á",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Á",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 240,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyA",
+ "key": "à",
+ "shiftKey": "À",
+ "labels": [
+ {
+ "text": "à",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "À",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 10.38961038961039,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyS",
+ "key": "s",
+ "shiftKey": "S",
+ "labels": [
+ {
+ "text": "s",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "S",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyS",
+ "key": "ß",
+ "shiftKey": "ß",
+ "labels": [
+ {
+ "text": "ß",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 18.181818181818183,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyD",
+ "key": "d",
+ "shiftKey": "D",
+ "labels": [
+ {
+ "text": "d",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "D",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 25.97402597402597,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyF",
+ "key": "f",
+ "shiftKey": "F",
+ "labels": [
+ {
+ "text": "f",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "F",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 33.76623376623377,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyG",
+ "key": "g",
+ "shiftKey": "G",
+ "labels": [
+ {
+ "text": "g",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "G",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 41.55844155844156,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyH",
+ "key": "h",
+ "shiftKey": "H",
+ "labels": [
+ {
+ "text": "h",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "H",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 49.35064935064935,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyJ",
+ "key": "j",
+ "shiftKey": "J",
+ "labels": [
+ {
+ "text": "j",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "J",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 57.14285714285714,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyK",
+ "key": "k",
+ "shiftKey": "K",
+ "labels": [
+ {
+ "text": "k",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "K",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 64.93506493506493,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyL",
+ "key": "l",
+ "shiftKey": "L",
+ "labels": [
+ {
+ "text": "l",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "L",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 72.72727272727273,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Semicolon",
+ "key": "ö",
+ "shiftKey": "Ö",
+ "labels": [
+ {
+ "text": "ö",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ö",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 80.51948051948052,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Quote",
+ "key": "ä",
+ "shiftKey": "Ä",
+ "labels": [
+ {
+ "text": "ä",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ä",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyZ",
+ "key": "y",
+ "shiftKey": "Y",
+ "labels": [
+ {
+ "text": "y",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Y",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyZ",
+ "key": "ý",
+ "shiftKey": "Ý",
+ "labels": [
+ {
+ "text": "ý",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ý",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyX",
+ "key": "x",
+ "shiftKey": "X",
+ "labels": [
+ {
+ "text": "x",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "X",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyC",
+ "key": "c",
+ "shiftKey": "C",
+ "labels": [
+ {
+ "text": "c",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "C",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyV",
+ "key": "v",
+ "shiftKey": "V",
+ "labels": [
+ {
+ "text": "v",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "V",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyB",
+ "key": "b",
+ "shiftKey": "B",
+ "labels": [
+ {
+ "text": "b",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "B",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyN",
+ "key": "n",
+ "shiftKey": "N",
+ "labels": [
+ {
+ "text": "n",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "N",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 54.54545454545454,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyM",
+ "key": "m",
+ "shiftKey": "M",
+ "labels": [
+ {
+ "text": "m",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "M",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyM",
+ "key": "µ",
+ "shiftKey": "µ",
+ "labels": [
+ {
+ "text": "µ",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 62.33766233766234,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Comma",
+ "key": ",",
+ "shiftKey": ";",
+ "labels": [
+ {
+ "text": ",",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": ";",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 70.12987012987013,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Period",
+ "key": ".",
+ "shiftKey": ":",
+ "labels": [
+ {
+ "text": ".",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": ":",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Minus",
+ "key": "-",
+ "shiftKey": "_",
+ "labels": [
+ {
+ "text": "-",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "_",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Slash",
+ "key": "/",
+ "shiftKey": "\\",
+ "labels": [
+ {
+ "text": "/",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "\\",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 77.92207792207793,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "IntlBackslash",
+ "key": "?",
+ "shiftKey": "!",
+ "labels": [
+ {
+ "text": "?",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "!",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 78.26086956521739,
+ "width": 45.45454545454545,
+ "height": 21.73913043478261
+ },
+ "code": "Space",
+ "key": " ",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 0,
+ "width": 14.285714285714285,
+ "height": 21.73913043478261
+ },
+ "code": "Backspace",
+ "key": "Backspace",
+ "type": "edit",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "dimensions": {
+ "width": 22,
+ "height": 14
+ },
+ "path": "M 0.5 7 L 7 0.5 L 21.5 0.5 L 21.5 13.5 L 7 13.5 Z M 10 3 L 18 11 M 10 11 L 18 3"
+ }
+ }
+ ],
+ "longpressAction": "repeat"
+ },
+ {
+ "geometry": {
+ "left": 88.31168831168831,
+ "top": 26.08695652173913,
+ "width": 11.688311688311687,
+ "height": 21.73913043478261
+ },
+ "code": "Enter",
+ "key": "Enter",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 21.5 8.5 L 21.5 0.5 L 21.5 8.5 L 5.5 8.5 M 5.5 3.5 L 0.5 8.5 L 5.5 13.5",
+ "dimensions": {
+ "width": 22,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "noCapsLock": false,
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ShiftLeft",
+ "key": "Shift",
+ "type": "modifier",
+ "mode": "sticky",
+ "location": "left",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "dimensions": {
+ "width": 14,
+ "height": 14
+ },
+ "path": "M 3.5 13.5 L 3.5 6.5 L 0.5 6.5 L 7 0.5 L 13.5 6.5 L 10.5 6.5 L 10.5 13.5 Z"
+ },
+ "hidden": [
+ "locked"
+ ]
+ },
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 3.5 8.5 L 3.5 6.5 L 0.5 6.5 L 7 0.5 L 13.5 6.5 L 10.5 6.5 L 10.5 8.5 Z M 3.5 13.5 L 3.5 10.5 L 10.5 10.5 L 10.5 13.5 Z",
+ "dimensions": {
+ "width": 14,
+ "height": 14
+ }
+ },
+ "visible": [
+ "locked"
+ ]
+ }
+ ],
+ "longpressAction": "lock"
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 52.17391304347826,
+ "width": 14.285714285714285,
+ "height": 21.73913043478261
+ },
+ "code": "ShiftRight",
+ "key": "Shift",
+ "type": "modifier",
+ "mode": "sticky",
+ "location": "right",
+ "labels": [
+ {
+ "svg": {
+ "path": "M 3.5 13.5 L 3.5 6.5 L 0.5 6.5 L 7 0.5 L 13.5 6.5 L 10.5 6.5 L 10.5 13.5 Z",
+ "dimensions": {
+ "width": 14,
+ "height": 14
+ }
+ },
+ "type": "svg",
+ "hidden": [
+ "locked"
+ ]
+ },
+ {
+ "type": "svg",
+ "visible": [
+ "locked"
+ ],
+ "svg": {
+ "path": "M 3.5 8.5 L 3.5 6.5 L 0.5 6.5 L 7 0.5 L 13.5 6.5 L 10.5 6.5 L 10.5 8.5 Z M 3.5 13.5 L 3.5 10.5 L 10.5 10.5 L 10.5 13.5 Z",
+ "dimensions": {
+ "width": 14,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "lock"
+ },
+ {
+ "geometry": {
+ "left": 70.12987012987013,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowLeft",
+ "key": "ArrowLeft",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 6.5 0.5 L 0.5 7 L 6.5 13.5",
+ "dimensions": {
+ "width": 7,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat"
+ },
+ {
+ "geometry": {
+ "left": 77.92207792207793,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowRight",
+ "key": "ArrowRight",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 0.5 L 6.5 7 L 0.5 13.5",
+ "dimensions": {
+ "width": 7,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat"
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowUp",
+ "key": "ArrowUp",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 6.5 L 7 0.5 L 13.5 6.5",
+ "dimensions": {
+ "width": 14,
+ "height": 7
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat"
+ },
+ {
+ "geometry": {
+ "left": 93.5064935064935,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowDown",
+ "key": "ArrowDown",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "dimensions": {
+ "width": 14,
+ "height": 7
+ },
+ "path": "M 0.5 0.5 L 7 6.5 L 13.5 0.5"
+ }
+ }
+ ],
+ "longpressAction": "repeat"
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "",
+ "key": "",
+ "type": "layout-switch",
+ "layoutName": "numbersAndSymbols",
+ "labels": [
+ {
+ "text": "123+",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "numbersAndSymbols",
+ "dimensions": {
+ "width": 770,
+ "height": 230
+ },
+ "keys": [
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 0,
+ "width": 14.285714285714285,
+ "height": 21.73913043478261
+ },
+ "code": "Backspace",
+ "key": "Backspace",
+ "type": "edit",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 7 L 7 0.5 L 21.5 0.5 L 21.5 13.5 L 7 13.5 Z M 10 3 L 18 11 M 10 11 L 18 3",
+ "dimensions": {
+ "width": 22,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 26.08695652173913,
+ "width": 14.285714285714285,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadEnter",
+ "key": "Enter",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 21.5 8.5 L 21.5 0.5 L 21.5 8.5 L 5.5 8.5 M 5.5 3.5 L 0.5 8.5 L 5.5 13.5",
+ "dimensions": {
+ "width": 22,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "location": "numpad",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowLeft",
+ "key": "ArrowLeft",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 6.5 0.5 L 0.5 7 L 6.5 13.5",
+ "dimensions": {
+ "width": 7,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 93.5064935064935,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowRight",
+ "key": "ArrowRight",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 0.5 L 6.5 7 L 0.5 13.5",
+ "dimensions": {
+ "width": 7,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowUp",
+ "key": "ArrowUp",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 6.5 L 7 0.5 L 13.5 6.5",
+ "dimensions": {
+ "width": 14,
+ "height": 7
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 93.5064935064935,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowDown",
+ "key": "ArrowDown",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 0.5 L 7 6.5 L 13.5 0.5",
+ "dimensions": {
+ "width": 14,
+ "height": 7
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "",
+ "key": "",
+ "type": "layout-switch",
+ "layoutName": "default",
+ "labels": [
+ {
+ "text": "ABC",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad1",
+ "key": "1",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "1",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad2",
+ "key": "2",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "2",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad3",
+ "key": "3",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "3",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad4",
+ "key": "4",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "4",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad5",
+ "key": "5",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "5",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad6",
+ "key": "6",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "6",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad7",
+ "key": "7",
+ "labels": [
+ {
+ "text": "7",
+ "type": "text"
+ }
+ ],
+ "location": "numpad",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad8",
+ "key": "8",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "8",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad9",
+ "key": "9",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "9",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad0",
+ "key": "0",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "0",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDecimal",
+ "key": ",",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": ",",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDecimal",
+ "key": ".",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": ".",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadAdd",
+ "key": "+",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "+",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadSubtract",
+ "key": "-",
+ "labels": [
+ {
+ "text": "-",
+ "type": "text"
+ }
+ ],
+ "location": "numpad",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadMultiply",
+ "key": "×",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "×",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDivide",
+ "key": "÷",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "÷",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDivide",
+ "key": "/",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "/",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "IntlBackslash",
+ "key": "\\",
+ "labels": [
+ {
+ "text": "\\",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadMultiply",
+ "key": "*",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "*",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Ampersand",
+ "key": "&",
+ "labels": [
+ {
+ "text": "&",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Equal",
+ "key": "=",
+ "labels": [
+ {
+ "text": "=",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Percent",
+ "key": "%",
+ "labels": [
+ {
+ "text": "%",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Quote",
+ "key": "\"",
+ "labels": [
+ {
+ "text": "\"",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Quote",
+ "key": "'",
+ "labels": [
+ {
+ "text": "'",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketRight",
+ "key": ")",
+ "labels": [
+ {
+ "text": ")",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketLeft",
+ "key": "(",
+ "labels": [
+ {
+ "text": "(",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketLeft",
+ "key": "[",
+ "labels": [
+ {
+ "text": "[",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketRight",
+ "key": "]",
+ "labels": [
+ {
+ "text": "]",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketLeft",
+ "key": "{",
+ "labels": [
+ {
+ "text": "{",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketRight",
+ "key": "}",
+ "labels": [
+ {
+ "text": "}",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Pound",
+ "key": "£",
+ "labels": [
+ {
+ "text": "£",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Yen",
+ "key": "¥",
+ "labels": [
+ {
+ "text": "¥",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Euro",
+ "key": "€",
+ "labels": [
+ {
+ "text": "€",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Dollar",
+ "key": "$",
+ "labels": [
+ {
+ "text": "$",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "At",
+ "key": "@",
+ "labels": [
+ {
+ "text": "@",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 78.26086956521739,
+ "width": 22.07792207792208,
+ "height": 21.73913043478261
+ },
+ "code": "Space",
+ "key": " ",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "",
+ "key": "",
+ "type": "layout-switch",
+ "layoutName": "numbersAndSymbols2",
+ "labels": [
+ {
+ "type": "text",
+ "text": "§Σ√"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "numbersAndSymbols2",
+ "dimensions": {
+ "width": 770,
+ "height": 230
+ },
+ "keys": [
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 0,
+ "width": 14.285714285714285,
+ "height": 21.73913043478261
+ },
+ "code": "Backspace",
+ "key": "Backspace",
+ "type": "edit",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 7 L 7 0.5 L 21.5 0.5 L 21.5 13.5 L 7 13.5 Z M 10 3 L 18 11 M 10 11 L 18 3",
+ "dimensions": {
+ "width": 22,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 26.08695652173913,
+ "width": 14.285714285714285,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadEnter",
+ "key": "Enter",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 21.5 8.5 L 21.5 0.5 L 21.5 8.5 L 5.5 8.5 M 5.5 3.5 L 0.5 8.5 L 5.5 13.5",
+ "dimensions": {
+ "width": 22,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "location": "numpad",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowLeft",
+ "key": "ArrowLeft",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 6.5 0.5 L 0.5 7 L 6.5 13.5",
+ "dimensions": {
+ "width": 7,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 93.5064935064935,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowRight",
+ "key": "ArrowRight",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 0.5 L 6.5 7 L 0.5 13.5",
+ "dimensions": {
+ "width": 7,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowUp",
+ "key": "ArrowUp",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 6.5 L 7 0.5 L 13.5 6.5",
+ "dimensions": {
+ "width": 14,
+ "height": 7
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 93.5064935064935,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowDown",
+ "key": "ArrowDown",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 0.5 L 7 6.5 L 13.5 0.5",
+ "dimensions": {
+ "width": 14,
+ "height": 7
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "",
+ "key": "",
+ "type": "layout-switch",
+ "layoutName": "default",
+ "labels": [
+ {
+ "text": "ABC",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad1",
+ "key": "1",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "1",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad2",
+ "key": "2",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "2",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad3",
+ "key": "3",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "3",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad4",
+ "key": "4",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "4",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad5",
+ "key": "5",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "5",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad6",
+ "key": "6",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "6",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad7",
+ "key": "7",
+ "labels": [
+ {
+ "text": "7",
+ "type": "text"
+ }
+ ],
+ "location": "numpad",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad8",
+ "key": "8",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "8",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad9",
+ "key": "9",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "9",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad0",
+ "key": "0",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "0",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDecimal",
+ "key": ",",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": ",",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDecimal",
+ "key": ".",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": ".",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Hat",
+ "key": "^",
+ "labels": [
+ {
+ "text": "^",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Cubed",
+ "key": "³",
+ "labels": [
+ {
+ "text": "³",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Diameter",
+ "key": "⌀",
+ "labels": [
+ {
+ "text": "⌀",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Trademark",
+ "key": "™",
+ "labels": [
+ {
+ "text": "™",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "RegisteredTrademark",
+ "key": "®",
+ "labels": [
+ {
+ "text": "®",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Copyright",
+ "key": "©",
+ "labels": [
+ {
+ "text": "©",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Pi",
+ "key": "π",
+ "labels": [
+ {
+ "text": "π",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Degrees",
+ "key": "°",
+ "labels": [
+ {
+ "text": "°",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Squared",
+ "key": "²",
+ "labels": [
+ {
+ "text": "²",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Hash",
+ "key": "#",
+ "labels": [
+ {
+ "text": "#",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Root",
+ "key": "√",
+ "labels": [
+ {
+ "text": "√",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Sum",
+ "key": "Σ",
+ "labels": [
+ {
+ "text": "Σ",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "GreaterThan",
+ "key": ">",
+ "labels": [
+ {
+ "text": ">",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "LessThan",
+ "key": "<",
+ "labels": [
+ {
+ "text": "<",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "LessThanOrEqual",
+ "key": "≤",
+ "labels": [
+ {
+ "text": "≤",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "GreaterThanOrEqual",
+ "key": "≥",
+ "labels": [
+ {
+ "text": "≥",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Backtick",
+ "key": "`",
+ "labels": [
+ {
+ "text": "`",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Tick",
+ "key": "´",
+ "labels": [
+ {
+ "text": "´",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Cent",
+ "key": "¢",
+ "labels": [
+ {
+ "text": "¢",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Promille",
+ "key": "‰",
+ "labels": [
+ {
+ "text": "‰",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Tilde",
+ "key": "~",
+ "labels": [
+ {
+ "text": "~",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Paragraph",
+ "key": "§",
+ "labels": [
+ {
+ "text": "§",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Pipe",
+ "key": "|",
+ "labels": [
+ {
+ "text": "|",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 78.26086956521739,
+ "width": 22.07792207792208,
+ "height": 21.73913043478261
+ },
+ "code": "Space",
+ "key": " ",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "",
+ "key": "",
+ "type": "layout-switch",
+ "layoutName": "numbersAndSymbols",
+ "labels": [
+ {
+ "type": "text",
+ "text": "123+"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/KeyboardLayouts/Numpad (plusminus).keyboard.json b/KeyboardLayouts/Numpad (plusminus).keyboard.json
new file mode 100644
index 0000000..8aca743
--- /dev/null
+++ b/KeyboardLayouts/Numpad (plusminus).keyboard.json
@@ -0,0 +1,302 @@
+{
+ "useIndirectInput": false,
+ "hasNumPad": true,
+ "displayName": "Numpad (+/-)",
+ "localeName": null,
+ "layouts":
+ [
+ {
+ "name": "default",
+ "dimensions":
+ {
+ "width": 230,
+ "height": 230
+ },
+ "keys":
+ [
+ {
+ "geometry":
+ {
+ "left": 0,
+ "top": 0,
+ "width": 21.73913043478261,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad1",
+ "key": "1",
+ "location": "numpad",
+ "labels":
+ [
+ {
+ "type": "text",
+ "text": "1"
+ }
+ ]
+ },
+ {
+ "geometry":
+ {
+ "left": 26.08695652173913,
+ "top": 0,
+ "width": 21.73913043478261,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad2",
+ "key": "2",
+ "location": "numpad",
+ "labels":
+ [
+ {
+ "type": "text",
+ "text": "2"
+ }
+ ]
+ },
+ {
+ "geometry":
+ {
+ "left": 52.17391304347826,
+ "top": 0,
+ "width": 21.73913043478261,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad3",
+ "key": "3",
+ "location": "numpad",
+ "labels":
+ [
+ {
+ "type": "text",
+ "text": "3"
+ }
+ ]
+ },
+ {
+ "geometry":
+ {
+ "left": 0,
+ "top": 26.08695652173913,
+ "width": 21.73913043478261,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad4",
+ "key": "4",
+ "location": "numpad",
+ "labels":
+ [
+ {
+ "type": "text",
+ "text": "4"
+ }
+ ]
+ },
+ {
+ "geometry":
+ {
+ "left": 26.08695652173913,
+ "top": 26.08695652173913,
+ "width": 21.73913043478261,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad5",
+ "key": "5",
+ "labels":
+ [
+ {
+ "type": "text",
+ "text": "5"
+ }
+ ]
+ },
+ {
+ "geometry":
+ {
+ "left": 52.17391304347826,
+ "top": 26.08695652173913,
+ "width": 21.73913043478261,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad6",
+ "key": "6",
+ "location": "numpad",
+ "labels":
+ [
+ {
+ "type": "text",
+ "text": "6"
+ }
+ ]
+ },
+ {
+ "geometry":
+ {
+ "left": 0,
+ "top": 52.17391304347826,
+ "width": 21.73913043478261,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad7",
+ "key": "7",
+ "location": "numpad",
+ "labels":
+ [
+ {
+ "type": "text",
+ "text": "7"
+ }
+ ]
+ },
+ {
+ "geometry":
+ {
+ "left": 26.08695652173913,
+ "top": 52.17391304347826,
+ "width": 21.73913043478261,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad8",
+ "key": "8",
+ "location": "numpad",
+ "labels":
+ [
+ {
+ "type": "text",
+ "text": "8"
+ }
+ ]
+ },
+ {
+ "geometry":
+ {
+ "left": 52.17391304347826,
+ "top": 52.17391304347826,
+ "width": 21.73913043478261,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad9",
+ "key": "9",
+ "location": "numpad",
+ "labels":
+ [
+ {
+ "type": "text",
+ "text": "9"
+ }
+ ]
+ },
+ {
+ "geometry":
+ {
+ "left": 26.08695652173913,
+ "top": 78.26086956521739,
+ "width": 21.73913043478261,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad0",
+ "key": "0",
+ "location": "numpad",
+ "labels":
+ [
+ {
+ "type": "text",
+ "text": "0"
+ }
+ ]
+ },
+ {
+ "geometry":
+ {
+ "left": 0,
+ "top": 78.26086956521739,
+ "width": 21.73913043478261,
+ "height": 21.73913043478261
+ },
+ "code": "PlusMinus",
+ "key": "PlusMinus",
+ "type": "edit",
+ "labels":
+ [
+ {
+ "type": "text",
+ "text": "+/-"
+ }
+ ]
+ },
+ {
+ "geometry":
+ {
+ "left": 52.17391304347826,
+ "top": 78.26086956521739,
+ "width": 21.73913043478261,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDecimal",
+ "key": ".",
+ "location": "numpad",
+ "labels":
+ [
+ {
+ "type": "text",
+ "text": "."
+ }
+ ]
+ },
+ {
+ "geometry":
+ {
+ "left": 78.26086956521739,
+ "top": 0,
+ "width": 21.73913043478261,
+ "height": 47.82608695652174
+ },
+ "code": "Backspace",
+ "key": "Backspace",
+ "type": "edit",
+ "labels":
+ [
+ {
+ "type": "svg",
+ "svg":
+ {
+ "path": "M 0.5 7 L 7 0.5 L 21.5 0.5 L 21.5 13.5 L 7 13.5 Z M 10 3 L 18 11 M 10 11 L 18 3",
+ "dimensions":
+ {
+ "width": 22,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat"
+ },
+ {
+ "geometry":
+ {
+ "left": 78.26086956521739,
+ "top": 52.17391304347826,
+ "width": 21.73913043478261,
+ "height": 47.82608695652174
+ },
+ "code": "NumpadEnter",
+ "key": "Enter",
+ "location": "numpad",
+ "labels":
+ [
+ {
+ "type": "svg",
+ "svg":
+ {
+ "path": "M 21.5 8.5 L 21.5 0.5 L 21.5 8.5 L 5.5 8.5 M 5.5 3.5 L 0.5 8.5 L 5.5 13.5",
+ "dimensions":
+ {
+ "width": 22,
+ "height": 14
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/KeyboardLayouts/US - compact.keyboard.json b/KeyboardLayouts/US - compact.keyboard.json
new file mode 100644
index 0000000..5f4b727
--- /dev/null
+++ b/KeyboardLayouts/US - compact.keyboard.json
@@ -0,0 +1,3613 @@
+{
+ "useIndirectInput": false,
+ "hasNumPad": false,
+ "displayName": "US (Compact)",
+ "localeName": "en-US",
+ "layouts": [
+ {
+ "name": "default",
+ "dimensions": {
+ "width": 770,
+ "height": 230
+ },
+ "keys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyQ",
+ "key": "q",
+ "shiftKey": "Q",
+ "labels": [
+ {
+ "text": "q",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Q",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit1",
+ "key": "1",
+ "shiftKey": "1",
+ "labels": [
+ {
+ "text": "1",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyQ",
+ "key": "@",
+ "shiftKey": "@",
+ "labels": [
+ {
+ "text": "@",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyW",
+ "key": "w",
+ "shiftKey": "W",
+ "labels": [
+ {
+ "text": "w",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "W",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit2",
+ "key": "2",
+ "shiftKey": "2",
+ "labels": [
+ {
+ "text": "2",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyE",
+ "key": "e",
+ "shiftKey": "E",
+ "labels": [
+ {
+ "text": "e",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "E",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit3",
+ "key": "3",
+ "shiftKey": "3",
+ "labels": [
+ {
+ "text": "3",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": -120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyE",
+ "key": "€",
+ "shiftKey": "€",
+ "labels": [
+ {
+ "text": "€",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyE",
+ "key": "ê",
+ "shiftKey": "Ê",
+ "labels": [
+ {
+ "text": "ê",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ê",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 240,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyE",
+ "key": "é",
+ "shiftKey": "É",
+ "labels": [
+ {
+ "text": "é",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "É",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 360,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyE",
+ "key": "è",
+ "shiftKey": "È",
+ "labels": [
+ {
+ "text": "è",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "È",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyR",
+ "key": "r",
+ "shiftKey": "R",
+ "labels": [
+ {
+ "text": "r",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "R",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit4",
+ "key": "4",
+ "shiftKey": "4",
+ "labels": [
+ {
+ "text": "4",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyT",
+ "key": "t",
+ "shiftKey": "T",
+ "labels": [
+ {
+ "text": "t",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "T",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit5",
+ "key": "5",
+ "shiftKey": "5",
+ "labels": [
+ {
+ "text": "5",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyY",
+ "key": "y",
+ "shiftKey": "Y",
+ "labels": [
+ {
+ "text": "y",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Y",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit6",
+ "key": "6",
+ "shiftKey": "6",
+ "labels": [
+ {
+ "text": "6",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyY",
+ "key": "ý",
+ "shiftKey": "Ý",
+ "labels": [
+ {
+ "text": "ý",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ý",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyU",
+ "key": "u",
+ "shiftKey": "U",
+ "labels": [
+ {
+ "text": "u",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "U",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit7",
+ "key": "7",
+ "shiftKey": "7",
+ "labels": [
+ {
+ "text": "7",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyU",
+ "key": "ü",
+ "shiftKey": "Ü",
+ "labels": [
+ {
+ "text": "ü",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ü",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 240,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyU",
+ "key": "û",
+ "shiftKey": "Û",
+ "labels": [
+ {
+ "text": "û",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Û",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 360,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyU",
+ "key": "ú",
+ "shiftKey": "Ú",
+ "labels": [
+ {
+ "text": "ú",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ú",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 480,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyU",
+ "key": "ù",
+ "shiftKey": "Ù",
+ "labels": [
+ {
+ "text": "ù",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ù",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 54.54545454545454,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyI",
+ "key": "i",
+ "shiftKey": "I",
+ "labels": [
+ {
+ "text": "i",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "I",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit8",
+ "key": "8",
+ "shiftKey": "8",
+ "labels": [
+ {
+ "text": "8",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyI",
+ "key": "î",
+ "shiftKey": "Î",
+ "labels": [
+ {
+ "text": "î",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Î",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 240,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyI",
+ "key": "í",
+ "shiftKey": "Í",
+ "labels": [
+ {
+ "text": "í",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Í",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 360,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyI",
+ "key": "ì",
+ "shiftKey": "Ì",
+ "labels": [
+ {
+ "text": "ì",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ì",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 62.33766233766234,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyO",
+ "key": "o",
+ "shiftKey": "O",
+ "labels": [
+ {
+ "text": "o",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "O",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit9",
+ "key": "9",
+ "shiftKey": "9",
+ "labels": [
+ {
+ "text": "9",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyO",
+ "key": "ö",
+ "shiftKey": "Ö",
+ "labels": [
+ {
+ "text": "ö",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ö",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 240,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyO",
+ "key": "ô",
+ "shiftKey": "Ô",
+ "labels": [
+ {
+ "text": "ô",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ô",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 360,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyO",
+ "key": "ó",
+ "shiftKey": "Ó",
+ "labels": [
+ {
+ "text": "ó",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ó",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 480,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyO",
+ "key": "ò",
+ "shiftKey": "Ò",
+ "labels": [
+ {
+ "text": "ò",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ò",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 70.12987012987013,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyP",
+ "key": "p",
+ "shiftKey": "P",
+ "labels": [
+ {
+ "text": "p",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "P",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "Digit0",
+ "key": "0",
+ "shiftKey": "0",
+ "labels": [
+ {
+ "text": "0",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 77.92207792207793,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Quote",
+ "key": "'",
+ "shiftKey": "\"",
+ "labels": [
+ {
+ "text": "'",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "\"",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 2.5974025974025974,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyA",
+ "key": "a",
+ "shiftKey": "A",
+ "labels": [
+ {
+ "text": "a",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "A",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyA",
+ "key": "ä",
+ "shiftKey": "Ä",
+ "labels": [
+ {
+ "text": "ä",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Ä",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 120,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyA",
+ "key": "â",
+ "shiftKey": "Â",
+ "labels": [
+ {
+ "text": "â",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Â",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 240,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyA",
+ "key": "á",
+ "shiftKey": "Á",
+ "labels": [
+ {
+ "text": "á",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Á",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 360,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyA",
+ "key": "à",
+ "shiftKey": "À",
+ "labels": [
+ {
+ "text": "à",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "À",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 10.38961038961039,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyS",
+ "key": "s",
+ "shiftKey": "S",
+ "labels": [
+ {
+ "text": "s",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "S",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyS",
+ "key": "ß",
+ "shiftKey": "ß",
+ "labels": [
+ {
+ "text": "ß",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 18.181818181818183,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyD",
+ "key": "d",
+ "shiftKey": "D",
+ "labels": [
+ {
+ "text": "d",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "D",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 25.97402597402597,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyF",
+ "key": "f",
+ "shiftKey": "F",
+ "labels": [
+ {
+ "text": "f",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "F",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 33.76623376623377,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyG",
+ "key": "g",
+ "shiftKey": "G",
+ "labels": [
+ {
+ "text": "g",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "G",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 41.55844155844156,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyH",
+ "key": "h",
+ "shiftKey": "H",
+ "labels": [
+ {
+ "text": "h",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "H",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 49.35064935064935,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyJ",
+ "key": "j",
+ "shiftKey": "J",
+ "labels": [
+ {
+ "text": "j",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "J",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 57.14285714285714,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyK",
+ "key": "k",
+ "shiftKey": "K",
+ "labels": [
+ {
+ "text": "k",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "K",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 64.93506493506493,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyL",
+ "key": "l",
+ "shiftKey": "L",
+ "labels": [
+ {
+ "text": "l",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "L",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 72.72727272727273,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketLeft",
+ "key": "(",
+ "shiftKey": "[",
+ "labels": [
+ {
+ "text": "(",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "[",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 80.51948051948052,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketRight",
+ "key": ")",
+ "shiftKey": "]",
+ "labels": [
+ {
+ "text": ")",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "]",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyZ",
+ "key": "z",
+ "shiftKey": "Z",
+ "labels": [
+ {
+ "text": "z",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "Z",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyX",
+ "key": "x",
+ "shiftKey": "X",
+ "labels": [
+ {
+ "text": "x",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "X",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyC",
+ "key": "c",
+ "shiftKey": "C",
+ "labels": [
+ {
+ "text": "c",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "C",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyV",
+ "key": "v",
+ "shiftKey": "V",
+ "labels": [
+ {
+ "text": "v",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "V",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyB",
+ "key": "b",
+ "shiftKey": "B",
+ "labels": [
+ {
+ "text": "b",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "B",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyN",
+ "key": "n",
+ "shiftKey": "N",
+ "labels": [
+ {
+ "text": "n",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "N",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 54.54545454545454,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "KeyM",
+ "key": "m",
+ "shiftKey": "M",
+ "labels": [
+ {
+ "text": "m",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "M",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ],
+ "longpressAction": "additionalKeys",
+ "additionalKeys": [
+ {
+ "geometry": {
+ "left": 0,
+ "top": -120,
+ "width": 100,
+ "height": 100
+ },
+ "code": "KeyM",
+ "key": "µ",
+ "shiftKey": "µ",
+ "labels": [
+ {
+ "text": "µ",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 62.33766233766234,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Comma",
+ "key": ",",
+ "shiftKey": ";",
+ "labels": [
+ {
+ "text": ",",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": ";",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 70.12987012987013,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Period",
+ "key": ".",
+ "shiftKey": ":",
+ "labels": [
+ {
+ "text": ".",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": ":",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Minus",
+ "key": "-",
+ "shiftKey": "_",
+ "labels": [
+ {
+ "text": "-",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "_",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Slash",
+ "key": "/",
+ "shiftKey": "\\",
+ "labels": [
+ {
+ "text": "/",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "\\",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 77.92207792207793,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "IntlBackslash",
+ "key": "?",
+ "shiftKey": "!",
+ "labels": [
+ {
+ "text": "?",
+ "visible": [
+ "default"
+ ],
+ "type": "text"
+ },
+ {
+ "text": "!",
+ "visible": [
+ "shift"
+ ],
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 78.26086956521739,
+ "width": 45.45454545454545,
+ "height": 21.73913043478261
+ },
+ "code": "Space",
+ "key": " ",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 0,
+ "width": 14.285714285714285,
+ "height": 21.73913043478261
+ },
+ "code": "Backspace",
+ "key": "Backspace",
+ "type": "edit",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "dimensions": {
+ "width": 22,
+ "height": 14
+ },
+ "path": "M 0.5 7 L 7 0.5 L 21.5 0.5 L 21.5 13.5 L 7 13.5 Z M 10 3 L 18 11 M 10 11 L 18 3"
+ }
+ }
+ ],
+ "longpressAction": "repeat"
+ },
+ {
+ "geometry": {
+ "left": 88.31168831168831,
+ "top": 26.08695652173913,
+ "width": 11.688311688311687,
+ "height": 21.73913043478261
+ },
+ "code": "Enter",
+ "key": "Enter",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 21.5 8.5 L 21.5 0.5 L 21.5 8.5 L 5.5 8.5 M 5.5 3.5 L 0.5 8.5 L 5.5 13.5",
+ "dimensions": {
+ "width": 22,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "noCapsLock": false,
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ShiftLeft",
+ "key": "Shift",
+ "type": "modifier",
+ "mode": "sticky",
+ "location": "left",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "dimensions": {
+ "width": 14,
+ "height": 14
+ },
+ "path": "M 3.5 13.5 L 3.5 6.5 L 0.5 6.5 L 7 0.5 L 13.5 6.5 L 10.5 6.5 L 10.5 13.5 Z"
+ },
+ "hidden": [
+ "locked"
+ ]
+ },
+ {
+ "type": "svg",
+ "visible": [
+ "locked"
+ ],
+ "svg": {
+ "dimensions": {
+ "width": 14,
+ "height": 14
+ },
+ "path": "M 3.5 8.5 L 3.5 6.5 L 0.5 6.5 L 7 0.5 L 13.5 6.5 L 10.5 6.5 L 10.5 8.5 Z M 3.5 13.5 L 3.5 10.5 L 10.5 10.5 L 10.5 13.5 Z"
+ }
+ }
+ ],
+ "longpressAction": "lock"
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 52.17391304347826,
+ "width": 14.285714285714285,
+ "height": 21.73913043478261
+ },
+ "code": "ShiftRight",
+ "key": "Shift",
+ "type": "modifier",
+ "mode": "sticky",
+ "location": "right",
+ "labels": [
+ {
+ "svg": {
+ "path": "M 3.5 13.5 L 3.5 6.5 L 0.5 6.5 L 7 0.5 L 13.5 6.5 L 10.5 6.5 L 10.5 13.5 Z",
+ "dimensions": {
+ "width": 14,
+ "height": 14
+ }
+ },
+ "type": "svg",
+ "hidden": [
+ "locked"
+ ]
+ },
+ {
+ "type": "svg",
+ "visible": [
+ "locked"
+ ],
+ "position": "",
+ "svg": {
+ "dimensions": {
+ "width": 14,
+ "height": 14
+ },
+ "path": "M 3.5 8.5 L 3.5 6.5 L 0.5 6.5 L 7 0.5 L 13.5 6.5 L 10.5 6.5 L 10.5 8.5 Z M 3.5 13.5 L 3.5 10.5 L 10.5 10.5 L 10.5 13.5 Z"
+ }
+ }
+ ],
+ "longpressAction": "lock"
+ },
+ {
+ "geometry": {
+ "left": 70.12987012987013,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowLeft",
+ "key": "ArrowLeft",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 6.5 0.5 L 0.5 7 L 6.5 13.5",
+ "dimensions": {
+ "width": 7,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat"
+ },
+ {
+ "geometry": {
+ "left": 77.92207792207793,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowRight",
+ "key": "ArrowRight",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 0.5 L 6.5 7 L 0.5 13.5",
+ "dimensions": {
+ "width": 7,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat"
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowUp",
+ "key": "ArrowUp",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 6.5 L 7 0.5 L 13.5 6.5",
+ "dimensions": {
+ "width": 14,
+ "height": 7
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat"
+ },
+ {
+ "geometry": {
+ "left": 93.5064935064935,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowDown",
+ "key": "ArrowDown",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "dimensions": {
+ "width": 14,
+ "height": 7
+ },
+ "path": "M 0.5 0.5 L 7 6.5 L 13.5 0.5"
+ }
+ }
+ ],
+ "longpressAction": "repeat"
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "",
+ "key": "",
+ "type": "layout-switch",
+ "layoutName": "numbersAndSymbols",
+ "labels": [
+ {
+ "text": "123+",
+ "type": "text"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "numbersAndSymbols",
+ "dimensions": {
+ "width": 770,
+ "height": 230
+ },
+ "keys": [
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 0,
+ "width": 14.285714285714285,
+ "height": 21.73913043478261
+ },
+ "code": "Backspace",
+ "key": "Backspace",
+ "type": "edit",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 7 L 7 0.5 L 21.5 0.5 L 21.5 13.5 L 7 13.5 Z M 10 3 L 18 11 M 10 11 L 18 3",
+ "dimensions": {
+ "width": 22,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 26.08695652173913,
+ "width": 14.285714285714285,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadEnter",
+ "key": "Enter",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 21.5 8.5 L 21.5 0.5 L 21.5 8.5 L 5.5 8.5 M 5.5 3.5 L 0.5 8.5 L 5.5 13.5",
+ "dimensions": {
+ "width": 22,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "location": "numpad",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowLeft",
+ "key": "ArrowLeft",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 6.5 0.5 L 0.5 7 L 6.5 13.5",
+ "dimensions": {
+ "width": 7,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 93.5064935064935,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowRight",
+ "key": "ArrowRight",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 0.5 L 6.5 7 L 0.5 13.5",
+ "dimensions": {
+ "width": 7,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowUp",
+ "key": "ArrowUp",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 6.5 L 7 0.5 L 13.5 6.5",
+ "dimensions": {
+ "width": 14,
+ "height": 7
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 93.5064935064935,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowDown",
+ "key": "ArrowDown",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 0.5 L 7 6.5 L 13.5 0.5",
+ "dimensions": {
+ "width": 14,
+ "height": 7
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "",
+ "key": "",
+ "type": "layout-switch",
+ "layoutName": "default",
+ "labels": [
+ {
+ "text": "ABC",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad1",
+ "key": "1",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "1",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad2",
+ "key": "2",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "2",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad3",
+ "key": "3",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "3",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad4",
+ "key": "4",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "4",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad5",
+ "key": "5",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "5",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad6",
+ "key": "6",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "6",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad7",
+ "key": "7",
+ "labels": [
+ {
+ "text": "7",
+ "type": "text"
+ }
+ ],
+ "location": "numpad",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad8",
+ "key": "8",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "8",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad9",
+ "key": "9",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "9",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad0",
+ "key": "0",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "0",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDecimal",
+ "key": ",",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": ",",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDecimal",
+ "key": ".",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": ".",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadAdd",
+ "key": "+",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "+",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadSubtract",
+ "key": "-",
+ "labels": [
+ {
+ "text": "-",
+ "type": "text"
+ }
+ ],
+ "location": "numpad",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadMultiply",
+ "key": "×",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "×",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDivide",
+ "key": "÷",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "÷",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDivide",
+ "key": "/",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "/",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "IntlBackslash",
+ "key": "\\",
+ "labels": [
+ {
+ "text": "\\",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadMultiply",
+ "key": "*",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "*",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Ampersand",
+ "key": "&",
+ "labels": [
+ {
+ "text": "&",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Equal",
+ "key": "=",
+ "labels": [
+ {
+ "text": "=",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Percent",
+ "key": "%",
+ "labels": [
+ {
+ "text": "%",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Quote",
+ "key": "\"",
+ "labels": [
+ {
+ "text": "\"",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Quote",
+ "key": "'",
+ "labels": [
+ {
+ "text": "'",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketRight",
+ "key": ")",
+ "labels": [
+ {
+ "text": ")",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketLeft",
+ "key": "(",
+ "labels": [
+ {
+ "text": "(",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketLeft",
+ "key": "[",
+ "labels": [
+ {
+ "text": "[",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketRight",
+ "key": "]",
+ "labels": [
+ {
+ "text": "]",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketLeft",
+ "key": "{",
+ "labels": [
+ {
+ "text": "{",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "BracketRight",
+ "key": "}",
+ "labels": [
+ {
+ "text": "}",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Pound",
+ "key": "£",
+ "labels": [
+ {
+ "text": "£",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Yen",
+ "key": "¥",
+ "labels": [
+ {
+ "text": "¥",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Euro",
+ "key": "€",
+ "labels": [
+ {
+ "text": "€",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Dollar",
+ "key": "$",
+ "labels": [
+ {
+ "text": "$",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "At",
+ "key": "@",
+ "labels": [
+ {
+ "text": "@",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 78.26086956521739,
+ "width": 22.07792207792208,
+ "height": 21.73913043478261
+ },
+ "code": "Space",
+ "key": " ",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "",
+ "key": "",
+ "type": "layout-switch",
+ "layoutName": "numbersAndSymbols2",
+ "labels": [
+ {
+ "type": "text",
+ "text": "§Σ√"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "numbersAndSymbols2",
+ "dimensions": {
+ "width": 770,
+ "height": 230
+ },
+ "keys": [
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 0,
+ "width": 14.285714285714285,
+ "height": 21.73913043478261
+ },
+ "code": "Backspace",
+ "key": "Backspace",
+ "type": "edit",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 7 L 7 0.5 L 21.5 0.5 L 21.5 13.5 L 7 13.5 Z M 10 3 L 18 11 M 10 11 L 18 3",
+ "dimensions": {
+ "width": 22,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 26.08695652173913,
+ "width": 14.285714285714285,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadEnter",
+ "key": "Enter",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 21.5 8.5 L 21.5 0.5 L 21.5 8.5 L 5.5 8.5 M 5.5 3.5 L 0.5 8.5 L 5.5 13.5",
+ "dimensions": {
+ "width": 22,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "location": "numpad",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowLeft",
+ "key": "ArrowLeft",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 6.5 0.5 L 0.5 7 L 6.5 13.5",
+ "dimensions": {
+ "width": 7,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 93.5064935064935,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowRight",
+ "key": "ArrowRight",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 0.5 L 6.5 7 L 0.5 13.5",
+ "dimensions": {
+ "width": 7,
+ "height": 14
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 85.71428571428571,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowUp",
+ "key": "ArrowUp",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 6.5 L 7 0.5 L 13.5 6.5",
+ "dimensions": {
+ "width": 14,
+ "height": 7
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 93.5064935064935,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "ArrowDown",
+ "key": "ArrowDown",
+ "type": "action",
+ "labels": [
+ {
+ "type": "svg",
+ "svg": {
+ "path": "M 0.5 0.5 L 7 6.5 L 13.5 0.5",
+ "dimensions": {
+ "width": 14,
+ "height": 7
+ }
+ }
+ }
+ ],
+ "longpressAction": "repeat",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "",
+ "key": "",
+ "type": "layout-switch",
+ "layoutName": "default",
+ "labels": [
+ {
+ "text": "ABC",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad1",
+ "key": "1",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "1",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad2",
+ "key": "2",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "2",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad3",
+ "key": "3",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "3",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad4",
+ "key": "4",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "4",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad5",
+ "key": "5",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "5",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad6",
+ "key": "6",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "6",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad7",
+ "key": "7",
+ "labels": [
+ {
+ "text": "7",
+ "type": "text"
+ }
+ ],
+ "location": "numpad",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad8",
+ "key": "8",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "8",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad9",
+ "key": "9",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "9",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 66.23376623376623,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Numpad0",
+ "key": "0",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": "0",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 58.44155844155844,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDecimal",
+ "key": ",",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": ",",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 74.02597402597402,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "NumpadDecimal",
+ "key": ".",
+ "location": "numpad",
+ "labels": [
+ {
+ "text": ".",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Hat",
+ "key": "^",
+ "labels": [
+ {
+ "text": "^",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Cubed",
+ "key": "³",
+ "labels": [
+ {
+ "text": "³",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Diameter",
+ "key": "⌀",
+ "labels": [
+ {
+ "text": "⌀",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 46.75324675324675,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Trademark",
+ "key": "™",
+ "labels": [
+ {
+ "text": "™",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "RegisteredTrademark",
+ "key": "®",
+ "labels": [
+ {
+ "text": "®",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 78.26086956521739,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Copyright",
+ "key": "©",
+ "labels": [
+ {
+ "text": "©",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Pi",
+ "key": "π",
+ "labels": [
+ {
+ "text": "π",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Degrees",
+ "key": "°",
+ "labels": [
+ {
+ "text": "°",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 38.961038961038966,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Squared",
+ "key": "²",
+ "labels": [
+ {
+ "text": "²",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Hash",
+ "key": "#",
+ "labels": [
+ {
+ "text": "#",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Root",
+ "key": "√",
+ "labels": [
+ {
+ "text": "√",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 31.16883116883117,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Sum",
+ "key": "Σ",
+ "labels": [
+ {
+ "text": "Σ",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "GreaterThan",
+ "key": ">",
+ "labels": [
+ {
+ "text": ">",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "LessThan",
+ "key": "<",
+ "labels": [
+ {
+ "text": "<",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "LessThanOrEqual",
+ "key": "≤",
+ "labels": [
+ {
+ "text": "≤",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "GreaterThanOrEqual",
+ "key": "≥",
+ "labels": [
+ {
+ "text": "≥",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 15.584415584415584,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Backtick",
+ "key": "`",
+ "labels": [
+ {
+ "text": "`",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 23.376623376623375,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Tick",
+ "key": "´",
+ "labels": [
+ {
+ "text": "´",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Cent",
+ "key": "¢",
+ "labels": [
+ {
+ "text": "¢",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 0,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Promille",
+ "key": "‰",
+ "labels": [
+ {
+ "text": "‰",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Tilde",
+ "key": "~",
+ "labels": [
+ {
+ "text": "~",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 26.08695652173913,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Paragraph",
+ "key": "§",
+ "labels": [
+ {
+ "text": "§",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "Pipe",
+ "key": "|",
+ "labels": [
+ {
+ "text": "|",
+ "type": "text"
+ }
+ ],
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 7.792207792207792,
+ "top": 78.26086956521739,
+ "width": 22.07792207792208,
+ "height": 21.73913043478261
+ },
+ "code": "Space",
+ "key": " ",
+ "ignoreModifiers": true
+ },
+ {
+ "geometry": {
+ "left": 0,
+ "top": 52.17391304347826,
+ "width": 6.493506493506493,
+ "height": 21.73913043478261
+ },
+ "code": "",
+ "key": "",
+ "type": "layout-switch",
+ "layoutName": "numbersAndSymbols",
+ "labels": [
+ {
+ "type": "text",
+ "text": "123+"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Localization/de.localization b/Localization/de.localization
new file mode 100644
index 0000000..76aaffb
--- /dev/null
+++ b/Localization/de.localization
@@ -0,0 +1,7 @@
+{
+ "$schema": "./../../Packages/Beckhoff.TwinCAT.HMI.Framework.14.3.360/runtimes/native1.12-tchmi/Schema/LocalizationDescription.Schema.json",
+ "locale": "de",
+ "localizedText": {
+ "Language": "Deutsch"
+ }
+}
\ No newline at end of file
diff --git a/Localization/en.localization b/Localization/en.localization
new file mode 100644
index 0000000..8115be4
--- /dev/null
+++ b/Localization/en.localization
@@ -0,0 +1,7 @@
+{
+ "$schema": "./../../Packages/Beckhoff.TwinCAT.HMI.Framework.14.3.360/runtimes/native1.12-tchmi/Schema/LocalizationDescription.Schema.json",
+ "locale": "en",
+ "localizedText": {
+ "Language": "English"
+ }
+}
\ No newline at end of file
diff --git a/Properties/Default.tpl b/Properties/Default.tpl
new file mode 100644
index 0000000..cdfceb6
--- /dev/null
+++ b/Properties/Default.tpl
@@ -0,0 +1,82 @@
+-- Designer --
+
+
+
+
+ {{TITLE}}
+
+
+
+ {{GLOBAL_JS_INCLUDES}}
+
+
+ {{VIEWLEVEL}}
+
+
+-- /Designer --
+
+-- LiveView_and_Build --
+
+
+
+
+
+ {{TITLE}}
+
+
+
+
+
+
+ {{GLOBAL_JS_INCLUDES}}
+
+
+
+
+ {{VIEWLEVEL}}
+
+
+-- /LiveView_and_Build --
\ No newline at end of file
diff --git a/Properties/tchmi.framework.Schema.json b/Properties/tchmi.framework.Schema.json
new file mode 100644
index 0000000..9e8c88b
--- /dev/null
+++ b/Properties/tchmi.framework.Schema.json
@@ -0,0 +1,13486 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "definitions": {
+ "AccessConfigBase": {
+ "title": "Access",
+ "type": "object",
+ "engineeringColumns": [
+ "accessright",
+ "group",
+ "permission"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "accessright",
+ "displayName": "Accessright",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Right which this rule defines."
+ },
+ {
+ "name": "group",
+ "displayName": "Group",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Group to which this access right is given."
+ },
+ {
+ "name": "permission",
+ "displayName": "Permission",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Permission for this access rule. \nAllow of one group overrides Deny/Inherit of another group. \nDeny will result in deny if we have no Allow of another group. \nInherit will ask parent control when we got no Allow/Deny. If the parent does not define something there will be a specified default."
+ }
+ ],
+ "properties": {
+ "accessright": {
+ "type": "string"
+ },
+ "group": {
+ "type": "string",
+ "minLength": 1
+ },
+ "permission": {
+ "type": "string",
+ "enum": [
+ "Allow",
+ "Deny",
+ "Inherit"
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "accessright",
+ "group",
+ "permission"
+ ]
+ },
+ "AccessConfig": {
+ "type": "array",
+ "items": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/AccessConfigBase"
+ },
+ {
+ "properties": {
+ "accessright": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "operate",
+ "observe"
+ ]
+ },
+ {
+ "type": "string",
+ "minLength": 1
+ }
+ ],
+ "default": "operate"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "BorderRadius": {
+ "type": "object",
+ "engineeringColumns": [
+ "topLeft",
+ "topRight",
+ "bottomRight",
+ "bottomLeft"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "topLeft",
+ "category": "general",
+ "displayName": "Top Left",
+ "displayPriority": 10,
+ "description": "Sets the top left corner radius of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "topLeftUnit",
+ "category": "general",
+ "refTo": "topLeft",
+ "displayName": "Top Left Unit",
+ "displayPriority": 10,
+ "description": "Sets the top left corner radius unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "topRight",
+ "category": "general",
+ "displayName": "Top Right",
+ "displayPriority": 10,
+ "description": "Sets the top right corner radius of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "topRightUnit",
+ "category": "general",
+ "refTo": "topRight",
+ "displayName": "Top Right Unit",
+ "displayPriority": 10,
+ "description": "Sets the top right corner radius unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "bottomRight",
+ "category": "general",
+ "displayName": "Bottom Right",
+ "displayPriority": 10,
+ "description": "Sets the bottom right corner radius of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "bottomRightUnit",
+ "category": "general",
+ "refTo": "bottomRight",
+ "displayName": "Bottom Right Unit",
+ "displayPriority": 10,
+ "description": "Sets the bottom right corner radius unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "bottomLeft",
+ "category": "general",
+ "displayName": "Bottom Left",
+ "displayPriority": 10,
+ "description": "Sets the bottom left corner radius of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "bottomLeftUnit",
+ "category": "general",
+ "refTo": "bottomLeft",
+ "displayName": "Bottom Left Unit",
+ "displayPriority": 10,
+ "description": "Sets the bottom left corner radius unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ }
+ ],
+ "properties": {
+ "topLeft": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "topLeftUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ },
+ "topRight": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "topRightUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ },
+ "bottomRight": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "bottomRightUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ },
+ "bottomLeft": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "bottomLeftUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "topLeft",
+ "topRight",
+ "bottomRight",
+ "bottomLeft"
+ ]
+ },
+ "BorderStyle": {
+ "definitions": {
+ "style": {
+ "type": "string",
+ "enum": [
+ "Solid",
+ "Dashed",
+ "Dotted",
+ "None"
+ ],
+ "default": "Solid"
+ }
+ },
+ "type": "object",
+ "engineeringColumns": [
+ "left",
+ "top",
+ "right",
+ "bottom"
+ ],
+ "properties": {
+ "left": {
+ "$ref": "#/definitions/BorderStyle/definitions/style"
+ },
+ "top": {
+ "$ref": "#/definitions/BorderStyle/definitions/style"
+ },
+ "right": {
+ "$ref": "#/definitions/BorderStyle/definitions/style"
+ },
+ "bottom": {
+ "$ref": "#/definitions/BorderStyle/definitions/style"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "left",
+ "top",
+ "right",
+ "bottom"
+ ]
+ },
+ "BorderWidth": {
+ "type": "object",
+ "engineeringColumns": [
+ "left",
+ "top",
+ "right",
+ "bottom"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "left",
+ "category": "general",
+ "displayName": "Left",
+ "displayPriority": 10,
+ "description": "Sets the left border width of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "leftUnit",
+ "category": "general",
+ "refTo": "left",
+ "displayName": "Left Unit",
+ "displayPriority": 10,
+ "description": "Sets the left border width unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "top",
+ "category": "general",
+ "displayName": "Top",
+ "displayPriority": 10,
+ "description": "Sets the top border width of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "topUnit",
+ "category": "general",
+ "refTo": "top",
+ "displayName": "Top Unit",
+ "displayPriority": 10,
+ "description": "Sets the top border width unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "right",
+ "category": "general",
+ "displayName": "Right",
+ "displayPriority": 10,
+ "description": "Sets the right border width of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "rightUnit",
+ "category": "general",
+ "refTo": "right",
+ "displayName": "Right Unit",
+ "displayPriority": 10,
+ "description": "Sets the right border width unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "bottom",
+ "category": "general",
+ "displayName": "Bottom",
+ "displayPriority": 10,
+ "description": "Sets the bottom border width of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "bottomUnit",
+ "category": "general",
+ "refTo": "bottom",
+ "displayName": "Bottom Unit",
+ "displayPriority": 10,
+ "description": "Sets the bottom border width unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ }
+ ],
+ "properties": {
+ "left": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "leftUnit": {
+ "$ref": "#/definitions/PixelUnit"
+ },
+ "top": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "topUnit": {
+ "$ref": "#/definitions/PixelUnit"
+ },
+ "right": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "rightUnit": {
+ "$ref": "#/definitions/PixelUnit"
+ },
+ "bottom": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "bottomUnit": {
+ "$ref": "#/definitions/PixelUnit"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "left",
+ "top",
+ "right",
+ "bottom"
+ ]
+ },
+ "BoxShadowList": {
+ "type": "array",
+ "items": {
+ "title": "BoxShadow definition",
+ "type": "object",
+ "engineeringColumns": [
+ "color",
+ "offsetX",
+ "offsetY"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "color",
+ "category": "Colors",
+ "displayName": "Color",
+ "displayPriority": 10,
+ "description": "Color of this Box Shadow",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "offsetX",
+ "category": "General",
+ "displayName": "Offset X",
+ "displayPriority": 10,
+ "description": "The Shadow Offset.",
+ "defaultValue": null,
+ "defaultValueInternal": 0
+ },
+ {
+ "name": "offsetXUnit",
+ "refTo": "offsetX",
+ "category": "General",
+ "displayName": "Offset X Unit",
+ "displayPriority": 10,
+ "description": "The Shadow Offset.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "offsetY",
+ "category": "General",
+ "displayName": "Offset Y",
+ "displayPriority": 10,
+ "description": "The Shadow Offset.",
+ "defaultValue": null,
+ "defaultValueInternal": 0
+ },
+ {
+ "name": "offsetYUnit",
+ "refTo": "offsetY",
+ "category": "General",
+ "displayName": "Offset Y Unit",
+ "displayPriority": 10,
+ "description": "The Shadow Offset.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "inset",
+ "category": "General",
+ "displayName": "Inset",
+ "displayPriority": 10,
+ "description": "Inset shadows are drawn inside the border (even transparent ones), above the background, but below content.",
+ "defaultValue": null,
+ "defaultValueInternal": false
+ },
+ {
+ "name": "blur",
+ "category": "General",
+ "displayName": "Blur",
+ "displayPriority": 10,
+ "description": "The larger this value, the bigger the blur, so the shadow becomes bigger and lighter.",
+ "defaultValue": null,
+ "defaultValueInternal": 0
+ },
+ {
+ "name": "blurUnit",
+ "refTo": "blur",
+ "category": "General",
+ "displayName": "Blur Unit",
+ "displayPriority": 10,
+ "description": "The larger this value, the bigger the blur, so the shadow becomes bigger and lighter.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "spread",
+ "category": "General",
+ "displayName": "Spread",
+ "displayPriority": 10,
+ "description": "Positive values will cause the shadow to expand and grow bigger, negative values will cause the shadow to shrink.",
+ "defaultValue": null,
+ "defaultValueInternal": 0
+ },
+ {
+ "name": "spreadUnit",
+ "refTo": "spread",
+ "category": "General",
+ "displayName": "Spread Unit",
+ "displayPriority": 10,
+ "description": "Positive values will cause the shadow to expand and grow bigger, negative values will cause the shadow to shrink.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ }
+ ],
+ "properties": {
+ "color": {
+ "$ref": "#/definitions/SolidColor"
+ },
+ "offsetX": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "offsetXUnit": {
+ "$ref": "#/definitions/PixelUnit"
+ },
+ "offsetY": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "offsetYUnit": {
+ "$ref": "#/definitions/PixelUnit"
+ },
+ "inset": {
+ "type": "boolean"
+ },
+ "blur": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "blurUnit": {
+ "$ref": "#/definitions/PixelUnit"
+ },
+ "spread": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "spreadUnit": {
+ "$ref": "#/definitions/PixelUnit"
+ }
+ },
+ "additionalProperties": false
+ },
+ "minItems": 0
+ },
+ "ClassNameList": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "minItems": 0
+ },
+ "Color": {
+ "anyOf": [
+ {
+ "$ref": "#/definitions/SolidColor"
+ },
+ {
+ "$ref": "#/definitions/LinearGradientColor"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null
+ },
+ "ContentPath": {
+ "type": "string",
+ "minLength": 1
+ },
+ "ContextReference": {
+ "type": "object"
+ },
+ "Control": {
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiControl",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "ControlAccessRight": {
+ "type": "object",
+ "description": "An access right which is checked by controls. In the Schema a defaultValue of true mean access is granted, false is denied, null is ask parent.",
+ "properties": {
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "description": "Name of the access definition in the HTML."
+ },
+ "displayName": {
+ "type": "string",
+ "description": "Name which should be presented the user."
+ },
+ "visible": {
+ "type": "boolean",
+ "description": "Determine if an access definition is shown to the user."
+ },
+ "description": {
+ "type": "string",
+ "description": "A long description of this access definition."
+ },
+ "defaultValueInternal": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Defines the default of this control access right. This will be used if the check for this access right does not return a result. true mean access is granted, false is denied, null is ask parent."
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "displayName",
+ "visible",
+ "defaultValueInternal"
+ ]
+ },
+ "ControlAccessRightName": {
+ "type": "string"
+ },
+ "ControlNamespace": {
+ "type": "string",
+ "minLength": 1
+ },
+ "ControlPropertyName": {
+ "type": "string"
+ },
+ "ControlType": {
+ "type": "string",
+ "minLength": 1
+ },
+ "DOMEvent": {
+ "type": "object",
+ "frameworkInstanceOf": "Event"
+ },
+ "DOMMouseEvent": {
+ "type": "object",
+ "frameworkInstanceOf": "MouseEvent"
+ },
+ "DOMErrorEvent": {
+ "type": "object",
+ "frameworkInstanceOf": "ErrorEvent"
+ },
+ "DOMInputEvent": {
+ "type": "object",
+ "frameworkInstanceOf": "InputEvent"
+ },
+ "DOMFocusEvent": {
+ "type": "object",
+ "frameworkInstanceOf": "FocusEvent"
+ },
+ "DOMPointerEvent": {
+ "type": "object",
+ "frameworkInstanceOf": "PointerEvent"
+ },
+ "DOMTouchEvent": {
+ "type": "object",
+ "frameworkInstanceOf": "TouchEvent"
+ },
+ "DOMWheelEvent": {
+ "type": "object",
+ "frameworkInstanceOf": "WheelEvent"
+ },
+ "Empty": {
+ "type": "string",
+ "enum": [
+ ""
+ ]
+ },
+ "EnumMapping": {
+ "type": "object",
+ "patternProperties": {
+ "^-?\\d+$": {
+ "type": "string"
+ }
+ }
+ },
+ "FilterStrategy": {
+ "title": "Filter Strategy",
+ "description": "The strategy to use while filtering a tree structure.",
+ "type": "string",
+ "enum": [
+ "DepthFirst",
+ "BreadthFirst"
+ ]
+ },
+ "FontFamily": {
+ "type": "string"
+ },
+ "FontSizeUnit": {
+ "type": "string",
+ "enum": [
+ "px",
+ "%"
+ ],
+ "default": "px"
+ },
+ "FontStyle": {
+ "type": "string",
+ "enum": [
+ "Normal",
+ "Italic",
+ "Oblique",
+ "Auto"
+ ],
+ "default": "Normal"
+ },
+ "FontWeight": {
+ "type": "string",
+ "enum": [
+ "Normal",
+ "Bold",
+ "Auto"
+ ],
+ "default": "Normal"
+ },
+ "Fraction": {
+ "type": "number",
+ "minimum": 0,
+ "maximum": 1
+ },
+ "Function": {
+ "type": "object",
+ "definitions": {
+ "value": {
+ "anyOf": [
+ {
+ "title": "StaticValue",
+ "type": "object",
+ "properties": {
+ "objectType": {
+ "description": "An enum defining the variable type.",
+ "type": "string",
+ "enum": [
+ "StaticValue"
+ ]
+ },
+ "value": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "array"
+ },
+ {
+ "type": "object"
+ }
+ ]
+ },
+ "valueType": {
+ "type": "string",
+ "minLength": 6,
+ "pattern": "^tchmi:",
+ "description": "Information about the used type as a tchmi reference name for re-edit scenarios."
+ }
+ },
+ "required": [
+ "objectType",
+ "value"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "Symbol",
+ "type": "object",
+ "properties": {
+ "objectType": {
+ "description": "An enum defining the variable type.",
+ "type": "string",
+ "enum": [
+ "Symbol"
+ ]
+ },
+ "symbolExpression": {
+ "$ref": "#/definitions/Function/definitions/symbolExpression"
+ }
+ },
+ "required": [
+ "objectType",
+ "symbolExpression"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "ControlApiFunction",
+ "type": "object",
+ "description": "Defines an API of the control.",
+ "properties": {
+ "objectType": {
+ "description": "An enum defining the variable type.",
+ "type": "string",
+ "enum": [
+ "ControlApiFunction"
+ ]
+ },
+ "control": {
+ "type": "string"
+ },
+ "fn": {
+ "type": "string"
+ },
+ "valueType": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "objectType",
+ "control",
+ "fn",
+ "valueType"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "EventDataObject",
+ "type": "object",
+ "properties": {
+ "objectType": {
+ "description": "An enum defining the variable type.",
+ "type": "string",
+ "enum": [
+ "EventDataObject"
+ ]
+ },
+ "propertyPath": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "objectType",
+ "propertyPath"
+ ],
+ "additionalProperties": false
+ }
+ ]
+ },
+ "symbolExpression": {
+ "title": "SymbolExpression",
+ "type": "string",
+ "pattern": "^%(s|i|l|pp|tp|f|ctrl|ctx|tr|t)%.+%\\/\\1%$"
+ }
+ },
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "Function"
+ ]
+ },
+ "fn": {
+ "type": "string"
+ },
+ "active": {
+ "type": "boolean",
+ "description": "Should function be active?",
+ "default": true
+ },
+ "fnParams": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Function/definitions/value"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "objectType",
+ "fn",
+ "fnParams"
+ ]
+ },
+ "FunctionList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Function"
+ }
+ },
+ "HorizontalAlignment": {
+ "type": "string",
+ "enum": [
+ "Left",
+ "Center",
+ "Right"
+ ]
+ },
+ "HTMLElement": {
+ "type": "object",
+ "frameworkInstanceOf": "HTMLElement"
+ },
+ "Id": {
+ "type": "string",
+ "minLength": 1
+ },
+ "Inputmode": {
+ "description": "Defines which keyboard layout should be loaded in the system keyboard when interacting. The exact layout file is defined in the project. \nThe most common one are: 'numeric', 'decimal', 'text'. Own project keywords are possible. \n'skip' ignores a focusIn, 'none' closes a keyboard on focusIn.",
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "text",
+ "numeric",
+ "decimal",
+ "skip",
+ "none"
+ ],
+ "description": "'skip' ignores a focusIn, 'none' closes a keyboard on focusIn."
+ },
+ {
+ "type": "string",
+ "description": "Project defined input mode"
+ }
+ ],
+ "default": "text"
+ },
+ "Interval": {
+ "type": "string",
+ "frameworkMetaType": "IntervalName"
+ },
+ "LinearGradientColor": {
+ "type": "object",
+ "propertiesMeta": [
+ {
+ "name": "angle",
+ "displayName": "Angle",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Angle this Gradient is defined"
+ }
+ ],
+ "properties": {
+ "angle": {
+ "type": "number"
+ },
+ "stopPoints": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/StopPoint"
+ },
+ "minItems": 2
+ }
+ },
+ "default": {
+ "angle": 0,
+ "stopPoints": [
+ {
+ "color": "rgba(0, 0, 0, 1)",
+ "stop": "0%"
+ },
+ {
+ "color": "rgba(255, 255, 255, 1)",
+ "stop": "100%"
+ }
+ ]
+ },
+ "additionalProperties": false,
+ "required": [
+ "angle",
+ "stopPoints"
+ ]
+ },
+ "Locale": {
+ "default": "en",
+ "description": "(Deprecated, use ProjectLocale from general) A list of locales for which we have a localization file in the project.",
+ "type": "string"
+ },
+ "MeasurementUnit": {
+ "type": "string",
+ "enum": [
+ "px",
+ "%"
+ ],
+ "default": "px"
+ },
+ "MeasurementUnitOrFactor": {
+ "type": "string",
+ "enum": [
+ "px",
+ "%",
+ "factor"
+ ],
+ "default": "px",
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiGrid.MeasurementUnitOrFactor"
+ },
+ "MeasurementValue": {
+ "type": "number"
+ },
+ "MultipleRecipeReferences": {
+ "description": "Refers to one or more recipe types of the server.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/RecipeReference"
+ }
+ },
+ "MultipleRecipeTypeReferences": {
+ "description": "Refers to one or more recipe types of the server.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/RecipeTypeReference"
+ }
+ },
+ "Padding": {
+ "type": "object",
+ "engineeringColumns": [
+ "left",
+ "top",
+ "right",
+ "bottom"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "left",
+ "category": "general",
+ "displayName": "Left",
+ "displayPriority": 10,
+ "description": "Sets the left padding of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "leftUnit",
+ "category": "general",
+ "refTo": "left",
+ "displayName": "Left Unit",
+ "displayPriority": 10,
+ "description": "Sets the left padding unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "top",
+ "category": "general",
+ "displayName": "Top",
+ "displayPriority": 10,
+ "description": "Sets the top padding of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "topUnit",
+ "category": "general",
+ "refTo": "top",
+ "displayName": "Top Unit",
+ "displayPriority": 10,
+ "description": "Sets the top padding unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "right",
+ "category": "general",
+ "displayName": "Right",
+ "displayPriority": 10,
+ "description": "Sets the right padding of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "rightUnit",
+ "category": "general",
+ "refTo": "right",
+ "displayName": "Right Unit",
+ "displayPriority": 10,
+ "description": "Sets the right padding unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "bottom",
+ "category": "general",
+ "displayName": "Bottom",
+ "displayPriority": 10,
+ "description": "Sets the bottom padding of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "bottomUnit",
+ "category": "general",
+ "refTo": "bottom",
+ "displayName": "Bottom Unit",
+ "displayPriority": 10,
+ "description": "Sets the bottom padding unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ }
+ ],
+ "properties": {
+ "left": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "leftUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ },
+ "top": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "topUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ },
+ "right": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "rightUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ },
+ "bottom": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "bottomUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "left",
+ "top",
+ "right",
+ "bottom"
+ ]
+ },
+ "Path": {
+ "type": "string",
+ "minLength": 1
+ },
+ "PixelPadding": {
+ "type": "object",
+ "engineeringColumns": [
+ "left",
+ "top",
+ "right",
+ "bottom"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "left",
+ "category": "general",
+ "displayName": "Left",
+ "displayPriority": 10,
+ "description": "Sets the left padding of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "leftUnit",
+ "category": "general",
+ "refTo": "left",
+ "displayName": "Left Unit",
+ "displayPriority": 10,
+ "description": "Sets the left padding unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "top",
+ "category": "general",
+ "displayName": "Top",
+ "displayPriority": 10,
+ "description": "Sets the top padding of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "topUnit",
+ "category": "general",
+ "refTo": "top",
+ "displayName": "Top Unit",
+ "displayPriority": 10,
+ "description": "Sets the top padding unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "right",
+ "category": "general",
+ "displayName": "Right",
+ "displayPriority": 10,
+ "description": "Sets the right padding of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "rightUnit",
+ "category": "general",
+ "refTo": "right",
+ "displayName": "Right Unit",
+ "displayPriority": 10,
+ "description": "Sets the right padding unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "bottom",
+ "category": "general",
+ "displayName": "Bottom",
+ "displayPriority": 10,
+ "description": "Sets the bottom padding of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "bottomUnit",
+ "category": "general",
+ "refTo": "bottom",
+ "displayName": "Bottom Unit",
+ "displayPriority": 10,
+ "description": "Sets the bottom padding unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ }
+ ],
+ "properties": {
+ "left": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "leftUnit": {
+ "$ref": "#/definitions/PixelUnit"
+ },
+ "top": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "topUnit": {
+ "$ref": "#/definitions/PixelUnit"
+ },
+ "right": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "rightUnit": {
+ "$ref": "#/definitions/PixelUnit"
+ },
+ "bottom": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/PositiveNumber"
+ },
+ {
+ "$ref": "#/definitions/MeasurementValue"
+ }
+ ]
+ },
+ "bottomUnit": {
+ "$ref": "#/definitions/PixelUnit"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "left",
+ "top",
+ "right",
+ "bottom"
+ ]
+ },
+ "PixelUnit": {
+ "type": "string",
+ "enum": [
+ "px"
+ ]
+ },
+ "PositiveNumber": {
+ "allOf": [
+ {
+ "$ref": "tchmi:general#/definitions/Number"
+ },
+ {
+ "minimum": 0
+ }
+ ]
+ },
+ "RecipeReference": {
+ "description": "Refers to one recipe of the server.",
+ "type": "string",
+ "minLength": 1
+ },
+ "RecipeTypeReference": {
+ "description": "Refers to one recipe type of the server.",
+ "type": "string",
+ "minLength": 1
+ },
+ "ScaleMode": {
+ "type": "string",
+ "enum": [
+ "None",
+ "ScaleToFill",
+ "ScaleToFit",
+ "ScaleToFitWidth",
+ "ScaleToFitHeight"
+ ],
+ "default": "None"
+ },
+ "ScrollMode": {
+ "type": "string",
+ "enum": [
+ "No",
+ "Yes",
+ "Auto"
+ ]
+ },
+ "ServerEvent": {
+ "anyOf": [
+ {
+ "title": "Message",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "integer",
+ "enum": [
+ 0
+ ],
+ "options": [
+ {
+ "label": "ENUM_0_MESSAGE",
+ "value": 0
+ }
+ ],
+ "default": 0
+ },
+ "domain": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "timeReceived": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "sessionId": {
+ "type": "string"
+ },
+ "severity": {
+ "$ref": "tchmi:server#/definitions/severity"
+ },
+ "sourceDomain": {
+ "type": "string"
+ },
+ "text": {
+ "type": "string"
+ },
+ "timeRaised": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "params": {
+ "type": "object"
+ }
+ },
+ "required": [
+ "type",
+ "domain",
+ "name",
+ "timeReceived",
+ "severity",
+ "sourceDomain",
+ "text",
+ "timeRaised",
+ "params"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "Alarm",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "integer",
+ "enum": [
+ 1
+ ],
+ "options": [
+ {
+ "label": "ENUM_1_ALARM",
+ "value": 1
+ }
+ ],
+ "default": 1
+ },
+ "domain": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "timeReceived": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "sessionId": {
+ "type": "string"
+ },
+ "severity": {
+ "$ref": "tchmi:server#/definitions/severity"
+ },
+ "sourceDomain": {
+ "type": "string"
+ },
+ "text": {
+ "type": "string"
+ },
+ "timeRaised": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "params": {
+ "type": "object"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "timeCleared": {
+ "$ref": "tchmi:server#/definitions/nullableDateTime"
+ },
+ "timeConfirmed": {
+ "$ref": "tchmi:server#/definitions/nullableDateTime"
+ },
+ "alarmState": {
+ "$ref": "tchmi:server#/definitions/alarmState"
+ },
+ "confirmationState": {
+ "$ref": "tchmi:server#/definitions/confirmationState"
+ }
+ },
+ "required": [
+ "type",
+ "domain",
+ "name",
+ "timeReceived",
+ "severity",
+ "sourceDomain",
+ "text",
+ "timeRaised",
+ "params",
+ "id",
+ "timeCleared",
+ "timeConfirmed",
+ "alarmState",
+ "confirmationState"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "PayloadEvent",
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "integer",
+ "enum": [
+ 2
+ ],
+ "options": [
+ {
+ "label": "ENUM_2_PAYLOAD",
+ "value": 2
+ }
+ ],
+ "default": 2
+ },
+ "domain": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "timeReceived": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "sessionId": {
+ "type": "string"
+ },
+ "payload": {}
+ },
+ "required": [
+ "type",
+ "domain",
+ "name",
+ "timeReceived"
+ ],
+ "additionalProperties": false
+ }
+ ]
+ },
+ "SizeMode": {
+ "type": "string",
+ "enum": [
+ "Value",
+ "Parent"
+ ],
+ "default": "Value"
+ },
+ "SizeModeWithContent": {
+ "type": "string",
+ "enum": [
+ "Value",
+ "Parent",
+ "Content"
+ ],
+ "default": "Value"
+ },
+ "SolidColor": {
+ "type": "object",
+ "properties": {
+ "color": {
+ "description": "Defining a color as CSS color: #-hexadecimal, rgb(), rgba(), hsl(), hsla(), css color keyword, none or transparent.",
+ "type": "string",
+ "minLength": 1,
+ "default": "#000000"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "color"
+ ]
+ },
+ "Sorting": {
+ "title": "Sorting",
+ "type": "array",
+ "items": {
+ "title": "Sorting criterion",
+ "type": "object",
+ "engineeringColumns": [
+ "name",
+ "order"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "name",
+ "displayName": "Name",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Name of the property to sort by",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "order",
+ "displayName": "Order",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Sort definition",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ }
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "order": {
+ "type": "string",
+ "enum": [
+ "Ascending",
+ "Descending"
+ ],
+ "default": "Ascending"
+ }
+ },
+ "required": [
+ "order"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "StopPoint": {
+ "title": "StopPoint definition",
+ "type": "object",
+ "properties": {
+ "color": {
+ "description": "Defining a color as CSS color: #-hexadecimal, rgb(), rgba(), hsl(), hsla(), lowercase css color keyword or transparent.",
+ "type": "string",
+ "minLength": 1
+ },
+ "stop": {
+ "type": "string",
+ "pattern": "^[0-9]*\\.?[0-9]+(?:px|%)$"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "color"
+ ]
+ },
+ "Symbol": {
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Symbol"
+ },
+ "ThemeName": {
+ "type": "string",
+ "default": "Base"
+ },
+ "ToggleState": {
+ "type": "string",
+ "enum": [
+ "Normal",
+ "Active"
+ ],
+ "default": "Normal"
+ },
+ "TransformList": {
+ "definitions": {
+ "transform": {
+ "anyOf": [
+ {
+ "title": "Translate",
+ "type": "object",
+ "propertiesMeta": [
+ {
+ "name": "transformType",
+ "category": "general",
+ "displayName": "Transform Type",
+ "displayPriority": 10,
+ "description": "Sets the type of transform to be applied to the element.",
+ "defaultValue": "Translate",
+ "defaultValueInternal": "Translate"
+ },
+ {
+ "name": "x",
+ "category": "general",
+ "displayName": "X",
+ "displayPriority": 10,
+ "description": "Sets the x translation of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "xUnit",
+ "category": "general",
+ "refTo": "x",
+ "displayName": "X Unit",
+ "displayPriority": 10,
+ "description": "Sets the x translation unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "y",
+ "category": "general",
+ "displayName": "Y",
+ "displayPriority": 10,
+ "description": "Sets the y translation of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "yUnit",
+ "category": "general",
+ "refTo": "y",
+ "displayName": "Y Unit",
+ "displayPriority": 10,
+ "description": "Sets the y translation unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "z",
+ "category": "general",
+ "displayName": "Z",
+ "displayPriority": 10,
+ "description": "Sets the z translation of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "zUnit",
+ "category": "general",
+ "refTo": "z",
+ "displayName": "Z Unit",
+ "displayPriority": 10,
+ "description": "Sets the z translation unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ }
+ ],
+ "properties": {
+ "transformType": {
+ "type": "string",
+ "enum": [
+ "Translate"
+ ]
+ },
+ "x": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "xUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ },
+ "y": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "yUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ },
+ "z": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "zUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ }
+ },
+ "required": [
+ "transformType"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "Rotate",
+ "type": "object",
+ "propertiesMeta": [
+ {
+ "name": "transformType",
+ "category": "general",
+ "displayName": "Transform Type",
+ "displayPriority": 10,
+ "description": "Sets the type of transform to be applied to the element.",
+ "defaultValue": "Rotate",
+ "defaultValueInternal": "Rotate"
+ },
+ {
+ "name": "angle",
+ "category": "general",
+ "displayName": "Angle",
+ "displayPriority": 10,
+ "description": "Sets the angle of rotation of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "angleUnit",
+ "category": "general",
+ "refTo": "angle",
+ "displayName": "Angle Unit",
+ "displayPriority": 10,
+ "description": "Sets the angle unit of rotation of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "deg"
+ },
+ {
+ "name": "vector",
+ "category": "General",
+ "displayName": "Vector",
+ "displayPriority": 10,
+ "description": "Sets the vector of rotation of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ }
+ ],
+ "properties": {
+ "transformType": {
+ "type": "string",
+ "enum": [
+ "Rotate"
+ ]
+ },
+ "angle": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "angleUnit": {
+ "$ref": "#/definitions/TransformList/definitions/angleUnit"
+ },
+ "vector": {
+ "title": "Vector",
+ "type": "object",
+ "propertiesMeta": [
+ {
+ "name": "x",
+ "category": "general",
+ "displayName": "X",
+ "displayPriority": 10,
+ "description": "Sets the x component of the vector of rotation applied to the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "y",
+ "category": "general",
+ "displayName": "Y",
+ "displayPriority": 10,
+ "description": "Sets the y component of the vector of rotation applied to the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "z",
+ "category": "general",
+ "displayName": "Z",
+ "displayPriority": 10,
+ "description": "Sets the z component of the vector of rotation applied to the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ }
+ ],
+ "properties": {
+ "x": {
+ "type": "number"
+ },
+ "y": {
+ "type": "number"
+ },
+ "z": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "x",
+ "y",
+ "z"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "transformType",
+ "angle"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "Scale",
+ "type": "object",
+ "propertiesMeta": [
+ {
+ "name": "transformType",
+ "category": "general",
+ "displayName": "Transform Type",
+ "displayPriority": 10,
+ "description": "Sets the type of transform to be applied to the element.",
+ "defaultValue": "Scale",
+ "defaultValueInternal": "Scale"
+ },
+ {
+ "name": "x",
+ "category": "general",
+ "displayName": "X",
+ "displayPriority": 10,
+ "description": "Sets the x scale of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "y",
+ "category": "general",
+ "displayName": "Y",
+ "displayPriority": 10,
+ "description": "Sets the y scale of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "z",
+ "category": "general",
+ "displayName": "Z",
+ "displayPriority": 10,
+ "description": "Sets the z scale of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ }
+ ],
+ "properties": {
+ "transformType": {
+ "type": "string",
+ "enum": [
+ "Scale"
+ ]
+ },
+ "x": {
+ "type": "number"
+ },
+ "y": {
+ "type": "number"
+ },
+ "z": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "transformType"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "Skew",
+ "type": "object",
+ "propertiesMeta": [
+ {
+ "name": "transformType",
+ "category": "general",
+ "displayName": "Transform Type",
+ "displayPriority": 10,
+ "description": "Sets the type of transform to be applied to the element.",
+ "defaultValue": "Skew",
+ "defaultValueInternal": "Skew"
+ },
+ {
+ "name": "xAngle",
+ "category": "general",
+ "displayName": "X Angle",
+ "displayPriority": 10,
+ "description": "Sets the x angle of skew of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "xAngleUnit",
+ "category": "general",
+ "refTo": "xAngle",
+ "displayName": "X Angle Unit",
+ "displayPriority": 10,
+ "description": "Sets the x angle unit of skew of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "deg"
+ },
+ {
+ "name": "yAngle",
+ "category": "general",
+ "displayName": "Y Angle",
+ "displayPriority": 10,
+ "description": "Sets the y angle of skew of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "yAngleUnit",
+ "category": "general",
+ "refTo": "yAngle",
+ "displayName": "Y Angle Unit",
+ "displayPriority": 10,
+ "description": "Sets the y angle unit of skew of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "deg"
+ }
+ ],
+ "properties": {
+ "transformType": {
+ "type": "string",
+ "enum": [
+ "Skew"
+ ]
+ },
+ "xAngle": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "xAngleUnit": {
+ "$ref": "#/definitions/TransformList/definitions/angleUnit"
+ },
+ "yAngle": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "yAngleUnit": {
+ "$ref": "#/definitions/TransformList/definitions/angleUnit"
+ }
+ },
+ "required": [
+ "transformType"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "Origin",
+ "type": "object",
+ "propertiesMeta": [
+ {
+ "name": "transformType",
+ "category": "general",
+ "displayName": "Transform Type",
+ "displayPriority": 10,
+ "description": "Sets the type of transform to be applied to the element.",
+ "defaultValue": "Origin",
+ "defaultValueInternal": "Origin"
+ },
+ {
+ "name": "x",
+ "category": "general",
+ "displayName": "X",
+ "displayPriority": 10,
+ "description": "Sets the x origin of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "xUnit",
+ "category": "general",
+ "refTo": "x",
+ "displayName": "X Unit",
+ "displayPriority": 10,
+ "description": "Sets the x origin unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "y",
+ "category": "general",
+ "displayName": "Y",
+ "displayPriority": 10,
+ "description": "Sets the y origin of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "yUnit",
+ "category": "general",
+ "refTo": "y",
+ "displayName": "Y Unit",
+ "displayPriority": 10,
+ "description": "Sets the y origin unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "z",
+ "category": "general",
+ "displayName": "Z",
+ "displayPriority": 10,
+ "description": "Sets the z origin of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "zUnit",
+ "category": "general",
+ "refTo": "z",
+ "displayName": "Z Unit",
+ "displayPriority": 10,
+ "description": "Sets the z origin unit of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ }
+ ],
+ "properties": {
+ "transformType": {
+ "type": "string",
+ "enum": [
+ "Origin"
+ ]
+ },
+ "x": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "xUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ },
+ "y": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "yUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ },
+ "z": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "zUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ }
+ },
+ "required": [
+ "transformType"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "Perspective",
+ "type": "object",
+ "propertiesMeta": [
+ {
+ "name": "transformType",
+ "category": "general",
+ "displayName": "Transform Type",
+ "displayPriority": 10,
+ "description": "Sets the type of transform to be applied to the element.",
+ "defaultValue": "Perspective",
+ "defaultValueInternal": "Perspective"
+ },
+ {
+ "name": "distance",
+ "category": "general",
+ "displayName": "Distance",
+ "displayPriority": 10,
+ "description": "Sets the distance of the perspective of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "distanceUnit",
+ "category": "general",
+ "refTo": "distance",
+ "displayName": "Distance Unit",
+ "displayPriority": 10,
+ "description": "Sets the distance unit of the perspective of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "origin",
+ "category": "General",
+ "displayName": "Origin",
+ "displayPriority": 10,
+ "description": "Sets the origin of the perspective of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ }
+ ],
+ "properties": {
+ "transformType": {
+ "type": "string",
+ "enum": [
+ "Perspective"
+ ]
+ },
+ "distance": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "distanceUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ },
+ "origin": {
+ "title": "Origin",
+ "type": "object",
+ "propertiesMeta": [
+ {
+ "name": "x",
+ "category": "general",
+ "displayName": "X",
+ "displayPriority": 10,
+ "description": "Sets the x origin of the perspective of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "xUnit",
+ "category": "general",
+ "refTo": "x",
+ "displayName": "X Unit",
+ "displayPriority": 10,
+ "description": "Sets the x origin unit of the perspective of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "y",
+ "category": "general",
+ "displayName": "Y",
+ "displayPriority": 10,
+ "description": "Sets the y origin of the perspective of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "yUnit",
+ "category": "general",
+ "refTo": "y",
+ "displayName": "Y Unit",
+ "displayPriority": 10,
+ "description": "Sets the y origin unit of the perspective of the element.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ }
+ ],
+ "properties": {
+ "x": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "xUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ },
+ "y": {
+ "$ref": "#/definitions/MeasurementValue"
+ },
+ "yUnit": {
+ "$ref": "#/definitions/MeasurementUnit"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "transformType",
+ "distance"
+ ],
+ "additionalProperties": false
+ }
+ ]
+ },
+ "angleUnit": {
+ "type": "string",
+ "enum": [
+ "deg",
+ "rad",
+ "turn",
+ "grad"
+ ]
+ }
+ },
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TransformList/definitions/transform"
+ }
+ },
+ "Trigger": {
+ "definitions": {
+ "action": {
+ "anyOf": [
+ {
+ "title": "Condition",
+ "type": "object",
+ "description": "IF .. THEN ..ELSE - style condition",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "Condition"
+ ]
+ },
+ "parts": {
+ "type": "array",
+ "items": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "if": {
+ "$ref": "#/definitions/Trigger/definitions/expression"
+ },
+ "then": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "showThenActions": {
+ "type": "boolean",
+ "description": "Holds the current state of the Trigger GUI. Not used in runtime"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "elseif": {
+ "$ref": "#/definitions/Trigger/definitions/expression"
+ },
+ "then": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "showThenActions": {
+ "type": "boolean",
+ "description": "Holds the current state of the Trigger GUI. Not used in runtime"
+ }
+ },
+ "additionalProperties": false
+ },
+ {
+ "type": "object",
+ "properties": {
+ "else": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "showThenActions": {
+ "type": "boolean",
+ "description": "Holds the current state of the Trigger GUI. Not used in runtime"
+ }
+ },
+ "additionalProperties": false
+ }
+ ]
+ }
+ },
+ "success": {
+ "description": "Success callback action list.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Trigger/definitions/action"
+ }
+ },
+ "error": {
+ "description": "Error callback action list.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Trigger/definitions/action"
+ }
+ },
+ "active": {
+ "type": "boolean",
+ "description": "Should action be active? Defaults to true.",
+ "default": true
+ },
+ "collapsed": {
+ "type": "boolean",
+ "description": "Should action be collapsed? Not used in runtime",
+ "default": false
+ },
+ "asyncWait": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "objectType"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "SwitchCase",
+ "type": "object",
+ "description": "SWITCH .. CASE ..CASE - style condition",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "SwitchCase"
+ ]
+ },
+ "compare": {
+ "$ref": "#/definitions/Trigger/definitions/value"
+ },
+ "cases": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Trigger/definitions/vCase"
+ }
+ },
+ "caseDefault": {
+ "$ref": "#/definitions/Trigger/definitions/dCase"
+ },
+ "success": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "error": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "active": {
+ "type": "boolean",
+ "description": "Should action be active? Defaults to true.",
+ "default": true
+ },
+ "collapsed": {
+ "type": "boolean",
+ "description": "Should action be collapsed? Not used in runtime",
+ "default": false
+ },
+ "asyncWait": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "objectType",
+ "compare",
+ "cases",
+ "caseDefault"
+ ]
+ },
+ {
+ "title": "WriteToSymbol",
+ "type": "object",
+ "description": "Write to Symbol",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "WriteToSymbol"
+ ]
+ },
+ "symbolExpression": {
+ "$ref": "#/definitions/Trigger/definitions/symbolExpression"
+ },
+ "value": {
+ "$ref": "#/definitions/Trigger/definitions/value"
+ },
+ "success": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "error": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "active": {
+ "type": "boolean",
+ "description": "Should action be active? Defaults to true.",
+ "default": true
+ },
+ "collapsed": {
+ "type": "boolean",
+ "description": "Should action be collapsed? Not used in runtime",
+ "default": false
+ },
+ "asyncWait": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "objectType",
+ "symbolExpression",
+ "value"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "Function",
+ "type": "object",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "Function"
+ ]
+ },
+ "fn": {
+ "type": "string"
+ },
+ "fnParams": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Trigger/definitions/value"
+ }
+ },
+ "success": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "error": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "active": {
+ "type": "boolean",
+ "description": "Should action be active? Defaults to true.",
+ "default": true
+ },
+ "collapsed": {
+ "type": "boolean",
+ "description": "Should action be collapsed? Not used in runtime",
+ "default": false
+ },
+ "asyncWait": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "objectType",
+ "fn",
+ "fnParams"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "JavaScript",
+ "type": "object",
+ "description": "Executes a user-defined JavaScript",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "JavaScript"
+ ]
+ },
+ "sourceLines": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "waitMode": {
+ "type": "string",
+ "enum": [
+ "Synchronous",
+ "Asynchronous"
+ ],
+ "description": "Synchronous: Next step will be called after last JavaScript line. Asynchronous: Next step will be called after calling ctx.success() or ctx.error(TcHmi.Errors.ERROR)"
+ },
+ "success": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Trigger/definitions/action"
+ },
+ "description": "Steps which will be called after call of ctx.success() with Asynchronous or last line with Synchronous."
+ },
+ "error": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Trigger/definitions/action"
+ },
+ "description": "Steps which will be called after the call to ctx.error() with Asynchronous or after an exception with Synchronous."
+ },
+ "active": {
+ "type": "boolean",
+ "description": "Should action be active? Defaults to true.",
+ "default": true
+ },
+ "collapsed": {
+ "type": "boolean",
+ "description": "Should action be collapsed? Not used in runtime",
+ "default": false
+ },
+ "asyncWait": {
+ "type": "boolean",
+ "description": "The next step is called after the completion of this step."
+ }
+ },
+ "required": [
+ "objectType",
+ "sourceLines"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "ActionTemplate",
+ "type": "object",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "ActionTemplate"
+ ]
+ },
+ "description": {
+ "type": "string",
+ "description": "A long description of this control."
+ },
+ "templateName": {
+ "type": "string"
+ },
+ "fnParams": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Trigger/definitions/value"
+ }
+ },
+ "success": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "error": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "active": {
+ "type": "boolean",
+ "description": "Should action be active? Defaults to true.",
+ "default": true
+ },
+ "collapsed": {
+ "type": "boolean",
+ "description": "Should action be collapsed? Not used in runtime",
+ "default": false
+ },
+ "asyncWait": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "objectType",
+ "templateName",
+ "fnParams"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "ControlApiFunction",
+ "type": "object",
+ "description": "Defines an API of the control.",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "ControlApiFunction"
+ ]
+ },
+ "control": {
+ "type": "string"
+ },
+ "fn": {
+ "type": "string"
+ },
+ "fnParams": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Trigger/definitions/value"
+ }
+ },
+ "success": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "error": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "active": {
+ "type": "boolean",
+ "description": "Should action be active? Defaults to true.",
+ "default": true
+ },
+ "collapsed": {
+ "type": "boolean",
+ "description": "Should action be collapsed? Not used in runtime",
+ "default": false
+ },
+ "asyncWait": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "objectType",
+ "control",
+ "fn"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "FunctionExpression",
+ "type": "object",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "FunctionExpression"
+ ]
+ },
+ "functionExpression": {
+ "type": "string"
+ },
+ "success": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "error": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "active": {
+ "type": "boolean",
+ "description": "Should action be active? Defaults to true.",
+ "default": true
+ },
+ "collapsed": {
+ "type": "boolean",
+ "description": "Should action be collapsed? Not used in runtime",
+ "default": false
+ },
+ "asyncWait": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "objectType",
+ "functionExpression"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "Comment",
+ "type": "object",
+ "description": "Free comment. Will be ignored on runtime.",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "Comment"
+ ]
+ },
+ "comment": {
+ "type": "string",
+ "description": "Free comment. Will be ignored on runtime."
+ }
+ },
+ "required": [
+ "objectType"
+ ],
+ "additionalProperties": false
+ }
+ ]
+ },
+ "actionList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Trigger/definitions/action"
+ }
+ },
+ "value": {
+ "anyOf": [
+ {
+ "title": "StaticValue",
+ "type": "object",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "StaticValue"
+ ]
+ },
+ "value": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "number"
+ },
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "array"
+ },
+ {
+ "type": "object"
+ }
+ ]
+ },
+ "valueType": {
+ "type": "string",
+ "minLength": 6,
+ "pattern": "^tchmi:",
+ "description": "Information about the used type as a tchmi reference name for re-edit scenarios while Engineering."
+ }
+ },
+ "required": [
+ "objectType",
+ "value"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "Symbol",
+ "type": "object",
+ "properties": {
+ "objectType": {
+ "description": "Value referenced via a Symbol",
+ "type": "string",
+ "enum": [
+ "Symbol"
+ ]
+ },
+ "valueType": {
+ "type": "string",
+ "minLength": 6,
+ "pattern": "^tchmi:",
+ "description": "Information about the expected type as a tchmi reference name."
+ },
+ "symbolExpression": {
+ "$ref": "#/definitions/Trigger/definitions/symbolExpression"
+ }
+ },
+ "required": [
+ "objectType",
+ "symbolExpression"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "EventDataObject",
+ "type": "object",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "EventDataObject"
+ ]
+ },
+ "propertyPath": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "objectType",
+ "propertyPath"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "title": "FunctionExpression",
+ "type": "object",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "FunctionExpression"
+ ]
+ },
+ "functionExpression": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "objectType",
+ "functionExpression"
+ ],
+ "additionalProperties": false
+ }
+ ]
+ },
+ "comment": {
+ "title": "Comment",
+ "type": "string"
+ },
+ "bindingTarget": {
+ "anyOf": [
+ {
+ "title": "ControlAttributeBindingTarget",
+ "type": "object",
+ "description": "a ControlAttributeBindingTarget",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": [
+ "ControlAttributeBindingTarget"
+ ]
+ },
+ "attributeExpression": {
+ "$ref": "#/definitions/Trigger/definitions/controlAttributeSymbolExpression"
+ }
+ },
+ "required": [
+ "objectType"
+ ],
+ "additionalProperties": false
+ }
+ ]
+ },
+ "expression": {
+ "title": "Expression",
+ "type": "object",
+ "properties": {
+ "compare1": {
+ "$ref": "#/definitions/Trigger/definitions/value"
+ },
+ "compare2": {
+ "$ref": "#/definitions/Trigger/definitions/value"
+ },
+ "compareOperator": {
+ "type": "string",
+ "enum": [
+ "==",
+ "===",
+ "!=",
+ "!==",
+ "<",
+ "<=",
+ ">",
+ ">="
+ ]
+ },
+ "logic": {
+ "anyOf": [
+ {
+ "type": "string",
+ "enum": [
+ "AND",
+ "OR"
+ ]
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "required": [
+ "compare1",
+ "compare2",
+ "compareOperator"
+ ],
+ "additionalProperties": false
+ },
+ "vCase": {
+ "title": "VCase",
+ "type": "object",
+ "properties": {
+ "actions": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ },
+ "caseValue": {
+ "$ref": "#/definitions/Trigger/definitions/value"
+ }
+ },
+ "required": [
+ "actions",
+ "caseValue"
+ ],
+ "additionalProperties": false
+ },
+ "dCase": {
+ "title": "DCase",
+ "type": "object",
+ "properties": {
+ "actions": {
+ "$ref": "#/definitions/Trigger/definitions/actionList"
+ }
+ },
+ "required": [
+ "actions"
+ ],
+ "additionalProperties": false
+ },
+ "symbolExpression": {
+ "title": "SymbolExpression",
+ "description": "Reference to a Symbol Expression",
+ "type": "string",
+ "pattern": "^%(s|i|l|pp|tp|f|ctrl|ctx|tr|t)%.+%\\/\\1%$"
+ },
+ "controlSymbolExpression": {
+ "title": "controlSymbolExpression",
+ "description": "Reference to a Control Symbol Expression",
+ "type": "string",
+ "pattern": "^%(ctrl)%.+%\\1%$"
+ },
+ "controlAttributeSymbolExpression": {
+ "title": "ControlAttributeSymbolExpression",
+ "type": "string",
+ "pattern": "^%(ctrl)%.+%\\1%$"
+ }
+ },
+ "type": "object",
+ "properties": {
+ "event": {
+ "type": "string",
+ "description": "Event name",
+ "minLength": 1
+ },
+ "preventDefault": {
+ "type": "boolean",
+ "description": "If activated the default action of the event will not be triggered.\nIf set on touch events the corresponding mouse events will not be triggered."
+ },
+ "displayName": {
+ "type": "string",
+ "description": "Name which should be presented the user."
+ },
+ "actions": {
+ "type": "array",
+ "minItems": 1,
+ "description": "List of actions to trigger.",
+ "items": {
+ "$ref": "#/definitions/Trigger/definitions/action"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "event",
+ "actions"
+ ]
+ },
+ "TriggerList": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Trigger"
+ },
+ "minItems": 1
+ },
+ "TypeRef": {
+ "type": "string"
+ },
+ "UserControlPath": {
+ "type": "string",
+ "minLength": 1
+ },
+ "VerticalAlignment": {
+ "type": "string",
+ "enum": [
+ "Top",
+ "Center",
+ "Bottom"
+ ]
+ },
+ "VirtualControlRightMappingList": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "engineeringColumns": [
+ "virtualControlRight",
+ "controlRight"
+ ],
+ "properties": {
+ "virtualControlRight": {
+ "description": "Name of the right which is configured on a parent control (aka outer right).",
+ "type": "string",
+ "minLength": 1
+ },
+ "controlRight": {
+ "description": "Name of the right which is working on this control (aka inner right).",
+ "type": "string",
+ "minLength": 1
+ }
+ },
+ "description": "Allows a mapping of rights to parent control virtual rights. For example the 'operate' right of this control can be configured to react on a custom 'canStartPump' right of a parent control.",
+ "additionalProperties": false,
+ "required": [
+ "controlRight",
+ "virtualControlRight"
+ ]
+ },
+ "description": "Allows a mapping of rights to parent control virtual rights. For example the 'operate' right of this control can be configured to react on a custom 'canStartPump' right of a parent control."
+ },
+ "Visibility": {
+ "type": "string",
+ "enum": [
+ "Visible",
+ "Hidden",
+ "Collapsed"
+ ],
+ "default": "Visible"
+ },
+ "TcHmi.Controls.System.TcHmiControl": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiControl",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "TcHmiControl": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiControl"
+ },
+ "TcHmi.Controls.System.TcHmiContainerControl": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiContainerControl",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "TcHmiContainerControl": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiContainerControl"
+ },
+ "TcHmi.Controls.System.TcHmiPartial": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiPartial",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "TcHmiPartial": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiPartial"
+ },
+ "TcHmi.Controls.System.TcHmiPopup": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiPopup",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "TcHmiPopup": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiPopup"
+ },
+ "TcHmi.Controls.System.TcHmiPopup.TargetFile": {
+ "type": "object",
+ "properties": {
+ "path": {
+ "anyOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/UserControlPath"
+ },
+ {
+ "$ref": "tchmi:framework#/definitions/ContentPath"
+ }
+ ]
+ },
+ "attributes": {
+ "description": "A dictionary for the attributes with the html attribute names as keys.",
+ "type": "object",
+ "additionalProperties": {
+ "type": [
+ "object",
+ "array",
+ "string",
+ "boolean",
+ "integer",
+ "number"
+ ]
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "path"
+ ]
+ },
+ "TcHmi.Controls.System.TcHmiPopup.ButtonList": {
+ "title": "ButtonList",
+ "type": "array",
+ "items": {
+ "title": "Button",
+ "type": "object",
+ "propertiesMeta": [
+ {
+ "name": "name",
+ "displayName": "Name",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The name of the button. Used to identify it in events and for styling.",
+ "defaultValue": "",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "value",
+ "displayName": "Value",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The value of the button. Used as an event parameter.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "width",
+ "displayName": "Width",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The width of the button in pixels.",
+ "defaultValue": 60,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "height",
+ "displayName": "Height",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The height of the button in pixels.",
+ "defaultValue": 30,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "widthMode",
+ "displayName": "Width Mode",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The width mode of the button. If set to 'Content', the button will adjust itself to the length its text, ignoring the width value.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "heightMode",
+ "displayName": "Height Mode",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The height mode of the button. If set to 'Content', the button will adjust itself to the height its text, ignoring the height value.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "minWidth",
+ "displayName": "Min Width",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The minimum width of the button in pixels.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "maxWidth",
+ "displayName": "Max Width",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The maximum width of the button in pixels.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "minHeight",
+ "displayName": "Min Height",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The minimum height of the button in pixels.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "maxHeight",
+ "displayName": "Max Height",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The maximum height of the button in pixels.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "textPadding",
+ "displayName": "Text Padding",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The size of the padding around the text.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "text",
+ "displayName": "Text",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "A string to display on the button. Can be bound to a symbol.",
+ "defaultValue": "",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "tooltip",
+ "displayName": "Tooltip",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "An optional tooltip.",
+ "defaultValue": "",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "keepPopupOpen",
+ "displayName": "Keep Popup Open",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Whether to close the popup when a button is pressed or keep it open. If not specified, this defaults to closing the popup.",
+ "defaultValue": false,
+ "defaultValueInternal": false
+ },
+ {
+ "name": "actions",
+ "displayName": "Actions",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Actions to perform when the button is pressed.",
+ "defaultValue": [],
+ "defaultValueInternal": null
+ }
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "value": {
+ "allOf": [
+ {
+ "$ref": "tchmi:general#/definitions/Any"
+ },
+ {
+ "default": null
+ }
+ ]
+ },
+ "width": {
+ "type": "number"
+ },
+ "height": {
+ "type": "number"
+ },
+ "widthMode": {
+ "type": "string",
+ "enum": [
+ "Value",
+ "Content"
+ ]
+ },
+ "heightMode": {
+ "type": "string",
+ "enum": [
+ "Value",
+ "Content"
+ ]
+ },
+ "minWidth": {
+ "type": "number"
+ },
+ "maxWidth": {
+ "type": "number"
+ },
+ "minHeight": {
+ "type": "number"
+ },
+ "maxHeight": {
+ "type": "number"
+ },
+ "textPadding": {
+ "$ref": "tchmi:framework#/definitions/Padding"
+ },
+ "text": {
+ "type": "string"
+ },
+ "tooltip": {
+ "type": "string"
+ },
+ "keepPopupOpen": {
+ "type": "boolean",
+ "default": false
+ },
+ "actions": {
+ "$ref": "tchmi:framework#/definitions/Trigger/definitions/actionList"
+ }
+ },
+ "required": [
+ "name",
+ "text",
+ "width",
+ "height"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "TcHmi.Controls.System.TcHmiPopup.ResultEventObject": {
+ "type": "object",
+ "properties": {
+ "result": {}
+ },
+ "additionalProperties": false
+ },
+ "TcHmiPopupResultEventObject": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiPopup.ResultEventObject"
+ },
+ "TcHmi.Controls.System.TcHmiPopup.ButtonPressedEventObject": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "value": {}
+ },
+ "additionalProperties": false
+ },
+ "TcHmiPopupButtonPressedEventObject": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiPopup.ButtonPressedEventObject"
+ },
+ "TcHmi.Controls.System.TcHmiContainer": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiContainer",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "TcHmiContainer": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiContainer"
+ },
+ "TcHmi.Controls.System.TcHmiContent": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiContent",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "TcHmiContent": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiContent"
+ },
+ "CellOptions": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiGrid.CellOptions"
+ },
+ "ColumnOptions": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiGrid.ColumnOptions"
+ },
+ "RowOptions": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiGrid.RowOptions"
+ },
+ "TcHmi.Controls.System.TcHmiGrid": {
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiGrid",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "TcHmi.Controls.System.TcHmiGrid.CellOptions": {
+ "title": "CellOptions",
+ "description": "Definition of cell options in the grid.",
+ "type": "array",
+ "items": {
+ "title": "Cell definition",
+ "description": "Definition of a cell.",
+ "type": "object",
+ "engineeringColumns": [
+ "columnIndex",
+ "rowIndex"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "columnIndex",
+ "category": "Layout",
+ "displayName": "Column Index",
+ "displayPriority": 10,
+ "description": "Column index of the defined cell.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "rowIndex",
+ "category": "Layout",
+ "displayName": "Row Index",
+ "displayPriority": 10,
+ "description": "Row index of the defined cell.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "padding",
+ "category": "Layout",
+ "displayPriority": 60,
+ "displayName": "Padding",
+ "description": "Inner padding of the cell. \nNote: Percentages always refer to the width of the cell, never its height (even for top and bottom).",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "backgroundColor",
+ "category": "Colors",
+ "displayPriority": 10,
+ "displayName": "Background Color",
+ "description": "Definition of the background color which is used if no or a transparent Background image is set.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "borderColor",
+ "category": "Colors",
+ "displayPriority": 10,
+ "displayName": "Border Color",
+ "description": "Definition of the border color.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "borderWidth",
+ "category": "Border",
+ "displayPriority": 10,
+ "displayName": "Border Width",
+ "description": "Definition of the border width.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "borderStyle",
+ "category": "Border",
+ "displayPriority": 10,
+ "displayName": "Border Style",
+ "description": "Definition of the border style.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "backgroundImage",
+ "category": "Background Image",
+ "displayPriority": 10,
+ "displayName": "Background Image",
+ "description": "Definition of the background image.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "backgroundImageWidth",
+ "category": "Background Image",
+ "displayPriority": 20,
+ "displayName": "Background Image Width",
+ "description": "Width of the background image.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "backgroundImageWidthUnit",
+ "refTo": "backgroundImageWidth",
+ "category": "Background Image",
+ "displayPriority": 20,
+ "displayName": "Background Image Width Unit",
+ "description": "Width Unit of the background image.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "backgroundImageHeight",
+ "category": "Background Image",
+ "displayPriority": 20,
+ "displayName": "Background Image Height",
+ "description": "Height of the background image.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "backgroundImageHeightUnit",
+ "refTo": "backgroundImageHeight",
+ "category": "Background Image",
+ "displayPriority": 20,
+ "displayName": "Background Image Height Unit",
+ "description": "Height Unit of the background image.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "backgroundImageHorizontalAlignment",
+ "category": "Background Image",
+ "displayPriority": 30,
+ "displayName": "Background Image Horizontal Alignment",
+ "description": "Horizontal Aligment of the background image.",
+ "defaultValue": null,
+ "defaultValueInternal": "Center"
+ },
+ {
+ "name": "backgroundImageVerticalAlignment",
+ "category": "Background Image",
+ "displayPriority": 30,
+ "displayName": "Background Image Vertical Alignment",
+ "description": "Vertical Aligment of the background image.",
+ "defaultValue": null,
+ "defaultValueInternal": "Center"
+ },
+ {
+ "name": "backgroundImagePadding",
+ "category": "Background Image",
+ "displayPriority": 60,
+ "displayName": "Background Image Padding",
+ "description": "Padding of the background image.",
+ "defaultValueInternal": null
+ }
+ ],
+ "properties": {
+ "columnIndex": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "ColumnIndex",
+ "description": "Column index of the defined cell.",
+ "default": null,
+ "category": "Layout",
+ "displayPriority": 10
+ },
+ "rowIndex": {
+ "type": "integer",
+ "minimum": 0,
+ "title": "RowIndex",
+ "description": "Row index of the defined cell.",
+ "default": null,
+ "category": "Layout",
+ "displayPriority": 10
+ },
+ "padding": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/Padding"
+ },
+ {
+ "title": "Padding",
+ "description": "Inner padding of the cell. \nNote: Percentages always refer to the width of the cell, never its height (even for top and bottom).",
+ "default": null,
+ "category": "Layout",
+ "displayPriority": 60
+ }
+ ]
+ },
+ "backgroundColor": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/SolidColor"
+ },
+ {
+ "title": "BackgroundColor",
+ "description": "Definition of the background color which is used if no or a transparent Background image is set.",
+ "default": null,
+ "category": "Colors",
+ "displayPriority": 10
+ }
+ ]
+ },
+ "borderColor": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/SolidColor"
+ },
+ {
+ "title": "BorderColor",
+ "description": "Definition of the border color.",
+ "default": null,
+ "category": "Colors",
+ "displayPriority": 10
+ }
+ ]
+ },
+ "borderWidth": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/BorderWidth"
+ },
+ {
+ "title": "BorderWidth",
+ "description": "Definition of the border width.",
+ "default": null,
+ "category": "Border",
+ "displayPriority": 10
+ }
+ ]
+ },
+ "borderStyle": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/BorderStyle"
+ },
+ {
+ "title": "BorderStyle",
+ "description": "Definition of the border style.",
+ "default": null,
+ "category": "Border",
+ "displayPriority": 10
+ }
+ ]
+ },
+ "backgroundImage": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ {
+ "title": "BackgroundImage",
+ "description": "Definition of the background image.",
+ "default": null,
+ "category": "Background Image",
+ "displayPriority": 10
+ }
+ ]
+ },
+ "backgroundImageWidth": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementValue"
+ },
+ {
+ "title": "BackgroundImageWidth",
+ "description": "Width of the background image.",
+ "default": null,
+ "category": "Background Image",
+ "displayPriority": 20
+ }
+ ]
+ },
+ "backgroundImageWidthUnit": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementUnit"
+ },
+ {
+ "title": "BackgroundImageWidthUnit",
+ "description": "Width Unit of the background image.",
+ "default": "px",
+ "refTo": "backgroundImageWidth",
+ "category": "Background Image",
+ "displayPriority": 20
+ }
+ ]
+ },
+ "backgroundImageHeight": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementValue"
+ },
+ {
+ "title": "BackgroundImageHeight",
+ "description": "Height of the background image.",
+ "default": null,
+ "category": "Background Image",
+ "displayPriority": 20
+ }
+ ]
+ },
+ "backgroundImageHeightUnit": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementUnit"
+ },
+ {
+ "title": "BackgroundImageHeightUnit",
+ "description": "Height Unit of the background image.",
+ "default": "px",
+ "refTo": "backgroundImageHeight",
+ "category": "Background Image",
+ "displayPriority": 20
+ }
+ ]
+ },
+ "backgroundImageHorizontalAlignment": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/HorizontalAlignment"
+ },
+ {
+ "title": "BackgroundImageHorizontalAligment",
+ "description": "Horizontal Aligment of the background image.",
+ "default": "Center",
+ "category": "Background Image",
+ "displayPriority": 30
+ }
+ ]
+ },
+ "backgroundImageVerticalAlignment": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/VerticalAlignment"
+ },
+ {
+ "title": "BackgroundImageVerticalAligment",
+ "description": "Vertical Aligment of the background image.",
+ "default": "Center",
+ "category": "Background Image",
+ "displayPriority": 30
+ }
+ ]
+ },
+ "backgroundImagePadding": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/Padding"
+ },
+ {
+ "title": "BackgroundImagePadding",
+ "description": "Padding of the background image.",
+ "default": null,
+ "category": "Background Image",
+ "displayPriority": 60
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "TcHmi.Controls.System.TcHmiGrid.ColumnOptions": {
+ "title": "ColumnOptions",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "title": "Column definition",
+ "description": "Defines one column.",
+ "engineeringColumns": [
+ "width",
+ "widthUnit",
+ "widthMode"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "width",
+ "category": "Layout",
+ "displayName": "Width",
+ "displayPriority": 10,
+ "description": "Defines width of the column in the grid. Can be a pixel value (42px), percent value (42%) or a grow factor (1).\nThe grow factor determines how much the items will grow relative to the rest of the items when positive free space is distributed.",
+ "defaultValue": 1,
+ "defaultValueInternal": 1
+ },
+ {
+ "name": "widthUnit",
+ "refTo": "width",
+ "category": "Layout",
+ "displayName": "Width Unit",
+ "displayPriority": 10,
+ "description": "Defines if the number defines a pixel value (px), percent value (42%) or grow factor (2).",
+ "defaultValue": "factor",
+ "defaultValueInternal": "factor"
+ },
+ {
+ "name": "widthMode",
+ "category": "Layout",
+ "displayName": "Width Mode",
+ "displayPriority": 30,
+ "description": "Defines if the width is taken from the width value or calculated from child controls in this Column.",
+ "defaultValue": "Value",
+ "defaultValueInternal": "Value"
+ },
+ {
+ "name": "maxWidth",
+ "category": "Layout",
+ "displayName": "Max Width",
+ "displayPriority": 60,
+ "description": "Defines maximal width of the column in the grid. Can be a pixel value (42px), percent value (42%).\nmax-width overrides width, but min-width overrides max-width.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "maxWidthUnit",
+ "refTo": "maxWidth",
+ "category": "Layout",
+ "displayName": "Max Width Unit",
+ "displayPriority": 60,
+ "description": "Max Width Unit of the column.",
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "minWidth",
+ "category": "Layout",
+ "displayName": "Min Width",
+ "displayPriority": 61,
+ "description": "Defines minimal width of the column in the grid. Can be a pixel value (42px), percent value (42%).\nmax-width overrides width, but min-width overrides max-width.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "minWidthUnit",
+ "refTo": "minWidth",
+ "category": "Layout",
+ "displayName": "Min Width Unit",
+ "displayPriority": 61,
+ "description": "Min Width Unit of the column.",
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "overflow",
+ "category": "Layout",
+ "displayName": "Overflow",
+ "displayPriority": 65,
+ "description": "Defines if a control should be fully visible if it is outside of this column.",
+ "defaultValue": null,
+ "defaultValueInternal": false
+ }
+ ],
+ "properties": {
+ "width": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementValue"
+ },
+ {
+ "title": "Width",
+ "description": "Defines width of the column in the grid. Can be a pixel value (42px), percent value (42%) or a grow factor (1).\nThe grow factor determines how much the items will grow relative to the rest of the items when positive free space is distributed.",
+ "default": 1,
+ "category": "Layout",
+ "displayPriority": 10
+ }
+ ]
+ },
+ "widthUnit": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiGrid.MeasurementUnitOrFactor"
+ },
+ {
+ "title": "WidthUnit",
+ "description": "Defines if the number defines a pixel value (px), percent value (42%) or grow factor (2).",
+ "default": "factor",
+ "refTo": "width",
+ "category": "Layout",
+ "displayPriority": 10
+ }
+ ]
+ },
+ "widthMode": {
+ "allOf": [
+ {
+ "type": "string",
+ "enum": [
+ "Value",
+ "Content"
+ ]
+ },
+ {
+ "title": "WidthMode",
+ "description": "Defines if the width is taken from the width value or calculated from child controls in this Column.",
+ "default": "Value",
+ "category": "Layout",
+ "displayPriority": 30
+ }
+ ]
+ },
+ "maxWidth": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementValue"
+ },
+ {
+ "title": "MaxWidth",
+ "description": "Defines maximal width of the column in the grid. Can be a pixel value (42px), percent value (42%).\nmax-width overrides width, but min-width overrides max-width.",
+ "default": null,
+ "displayPriority": 60,
+ "category": "Layout"
+ }
+ ]
+ },
+ "maxWidthUnit": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementUnit"
+ },
+ {
+ "title": "MaxWidthUnit",
+ "description": "Max Width Unit of the column.",
+ "default": "px",
+ "category": "Layout",
+ "displayPriority": 60,
+ "refTo": "maxWidth"
+ }
+ ]
+ },
+ "minWidth": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementValue"
+ },
+ {
+ "title": "MinWidth",
+ "description": "Defines minimal width of the column in the grid. Can be a pixel value (42px), percent value (42%).\nmax-width overrides width, but min-width overrides max-width.",
+ "default": null,
+ "category": "Layout",
+ "displayPriority": 61
+ }
+ ]
+ },
+ "minWidthUnit": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementUnit"
+ },
+ {
+ "title": "MinWidthUnit",
+ "description": "Min Width Unit of the column.",
+ "default": "px",
+ "refTo": "minWidth",
+ "category": "Layout",
+ "displayPriority": 61
+ }
+ ]
+ },
+ "overflow": {
+ "allOf": [
+ {
+ "$ref": "tchmi:general#/definitions/Boolean"
+ },
+ {
+ "title": "Overflow",
+ "description": "Defines if a control should be fully visible if it is outside of this column.",
+ "default": false,
+ "category": "Layout",
+ "displayPriority": 65
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "TcHmi.Controls.System.TcHmiGrid.MeasurementUnitOrFactor": {
+ "description": "Defines if the number defines a pixel value (px), percent value (42%) or grow factor (2).\nThe grow factor determines how much the items will grow relative to the rest of the items when positive free space is distributed.",
+ "type": "string",
+ "enum": [
+ "factor",
+ "px",
+ "%"
+ ],
+ "default": "factor"
+ },
+ "TcHmi.Controls.System.TcHmiGrid.RowOptions": {
+ "title": "RowOptions",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "title": "Row definition",
+ "description": "Defines one row.",
+ "engineeringColumns": [
+ "height",
+ "heightUnit",
+ "heightMode"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "height",
+ "category": "Layout",
+ "displayName": "Height",
+ "displayPriority": 10,
+ "description": "Defines height of the cells of this row in the grid. Can be a pixel value (42px), percent value (42%) or a grow factor (1).\nThe grow factor determines how much the items will grow relative to the rest of the items when positive free space is distributed.",
+ "defaultValue": 1,
+ "defaultValueInternal": 1
+ },
+ {
+ "name": "heightUnit",
+ "refTo": "height",
+ "category": "Layout",
+ "displayName": "Height Unit",
+ "displayPriority": 10,
+ "description": "Defines if the number defines a pixel value (px), percent value (42%) or grow factor (2).",
+ "defaultValue": "factor",
+ "defaultValueInternal": "factor"
+ },
+ {
+ "name": "heightMode",
+ "category": "Layout",
+ "displayName": "Height Mode",
+ "displayPriority": 30,
+ "description": "Defines if the height is taken from the height value or calculated from child controls in row.",
+ "defaultValue": "Value",
+ "defaultValueInternal": "Value"
+ },
+ {
+ "name": "maxHeight",
+ "category": "Layout",
+ "displayName": "Max Height",
+ "displayPriority": 60,
+ "description": "Defines maximal height of the row in the grid. Can be a pixel value (42px), percent value (42%).\nmax-height overrides height, but min-height overrides max-height.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "maxHeightUnit",
+ "refTo": "maxHeight",
+ "category": "Layout",
+ "displayName": "Max Height Unit",
+ "displayPriority": 60,
+ "description": "Max Height Unit of the row.",
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "minHeight",
+ "category": "Layout",
+ "displayName": "Min Height",
+ "displayPriority": 61,
+ "description": "Defines minimal height of the row in the grid. Can be a pixel value (42px), percent value (42%).\nmax-height overrides height, but min-height overrides max-height.",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "minHeightUnit",
+ "refTo": "minHeight",
+ "category": "Layout",
+ "displayName": "Min Height Unit",
+ "displayPriority": 61,
+ "description": "Min Height Unit of the row.",
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "overflow",
+ "category": "Layout",
+ "displayName": "Overflow",
+ "displayPriority": 65,
+ "description": "Defines if a control should be fully visible if it is outside of this row.",
+ "defaultValue": null,
+ "defaultValueInternal": false
+ }
+ ],
+ "properties": {
+ "height": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementValue"
+ },
+ {
+ "title": "Height",
+ "description": "Defines height of the cells of this row in the grid. Can be a pixel value (42px), percent value (42%) or a grow factor (1).\nThe grow factor determines how much the items will grow relative to the rest of the items when positive free space is distributed.",
+ "default": 1,
+ "category": "Layout",
+ "displayPriority": 10
+ }
+ ]
+ },
+ "heightUnit": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiGrid.MeasurementUnitOrFactor"
+ },
+ {
+ "title": "HeightUnit",
+ "description": "Defines if the number defines a pixel value (px), percent value (42%) or grow factor (2).",
+ "default": "factor",
+ "refTo": "height",
+ "category": "Layout",
+ "displayPriority": 10
+ }
+ ]
+ },
+ "heightMode": {
+ "allOf": [
+ {
+ "type": "string",
+ "enum": [
+ "Value",
+ "Content"
+ ]
+ },
+ {
+ "title": "HeightMode",
+ "description": "Defines if the height is taken from the height value or calculated from child controls in row.",
+ "default": "Value",
+ "category": "Layout",
+ "displayPriority": 30
+ }
+ ]
+ },
+ "maxHeight": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementValue"
+ },
+ {
+ "title": "MaxHeight",
+ "description": "Defines maximal height of the row in the grid. Can be a pixel value (42px), percent value (42%).\nmax-height overrides height, but min-height overrides max-height.",
+ "default": null,
+ "refTo": "maxHeight",
+ "category": "Layout",
+ "displayPriority": 60
+ }
+ ]
+ },
+ "maxHeightUnit": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementUnit"
+ },
+ {
+ "title": "MaxHeightUnit",
+ "description": "Max Height Unit of the row.",
+ "default": "px",
+ "category": "Layout",
+ "displayPriority": 60
+ }
+ ]
+ },
+ "minHeight": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementValue"
+ },
+ {
+ "title": "MinHeight",
+ "description": "Defines minimal height of the row in the grid. Can be a pixel value (42px), percent value (42%).\nmax-height overrides height, but min-height overrides max-height.",
+ "default": null,
+ "category": "Layout",
+ "displayPriority": 61
+ }
+ ]
+ },
+ "minHeightUnit": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/MeasurementUnit"
+ },
+ {
+ "title": "MinHeightUnit",
+ "description": "Min Height Unit of the row.",
+ "default": "px",
+ "refTo": "minHeight",
+ "category": "Layout",
+ "displayPriority": 61
+ }
+ ]
+ },
+ "overflow": {
+ "allOf": [
+ {
+ "$ref": "tchmi:general#/definitions/Boolean"
+ },
+ {
+ "title": "Overflow",
+ "description": "Defines if a control should be fully visible if it is outside of this row.",
+ "default": false,
+ "category": "Layout",
+ "displayPriority": 65
+ }
+ ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "TcHmiGrid": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiGrid"
+ },
+ "TcHmi.Controls.System.TcHmiHtmlHost": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiHtmlHost",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "TcHmiHtmlHost": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiHtmlHost"
+ },
+ "TcHmi.Controls.System.TcHmiUserControl": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiUserControl",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "TcHmiUserControl": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiUserControl"
+ },
+ "TcHmi.Controls.System.TcHmiView": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiView",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "TcHmiView": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiView"
+ },
+ "TcHmi.Controls.System.TcHmiRegion": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiRegion",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "TcHmiRegion": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiRegion"
+ },
+ "TcHmi.Controls.System.TcHmiUserControlHost": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiUserControlHost",
+ "frameworkControlNamespace": "TcHmi.Controls.System"
+ },
+ "TcHmiUserControlHost": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiUserControlHost"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiAccordionRegion": {
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiAccordionRegion",
+ "frameworkControlNamespace": "TcHmi.Controls.Beckhoff"
+ },
+ "TcHmiAccordionRegion": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiAccordionRegion"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiAccordionRegion.AccordionItemList": {
+ "type": "array",
+ "title": "Accordion Items",
+ "description": "A list of accordion items",
+ "items": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiAccordionRegion.AccordionItem"
+ }
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiAccordionRegion.AccordionItem": {
+ "type": "object",
+ "title": "Accordion Item",
+ "description": "A single accordion item",
+ "engineeringColumns": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "text": {
+ "type": "string"
+ },
+ "targetFile": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.System.TcHmiPopup.TargetFile"
+ },
+ "targetFileHostPreload": {
+ "type": "boolean"
+ },
+ "targetFileHostPreAttach": {
+ "type": "boolean"
+ },
+ "targetFileHostKeepAlive": {
+ "type": "boolean"
+ },
+ "maxContentHeight": {
+ "$ref": "tchmi:framework#/definitions/MeasurementValue"
+ },
+ "accessRights": {
+ "$ref": "tchmi:framework#/definitions/AccessConfig"
+ },
+ "icon": {
+ "type": "object",
+ "properties": {
+ "iconPath": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "iconWidth": {
+ "$ref": "tchmi:framework#/definitions/MeasurementValue"
+ },
+ "iconWidthUnit": {
+ "$ref": "tchmi:framework#/definitions/MeasurementUnit"
+ },
+ "iconHeight": {
+ "$ref": "tchmi:framework#/definitions/MeasurementValue"
+ },
+ "iconHeightUnit": {
+ "$ref": "tchmi:framework#/definitions/MeasurementUnit"
+ }
+ },
+ "propertiesMeta": [
+ {
+ "name": "iconPath",
+ "displayName": "Icon Path",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The icon that will be displayed in the accordion header.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "iconWidth",
+ "displayName": "Icon Width",
+ "category": "General",
+ "displayPriority": 11,
+ "description": "The preferred width of the icon.",
+ "defaultValue": null,
+ "defaultValueInternal": 32
+ },
+ {
+ "name": "iconWidthUnit",
+ "displayName": "Icon Width Unit",
+ "category": "General",
+ "displayPriority": 11,
+ "description": "The unit of preferred width of the icon.",
+ "defaultValue": null,
+ "defaultValueInternal": "px",
+ "refTo": "iconWidth"
+ },
+ {
+ "name": "iconHeight",
+ "displayName": "Icon Height",
+ "category": "General",
+ "displayPriority": 12,
+ "description": "The preferred height of the icon.",
+ "defaultValue": null,
+ "defaultValueInternal": 32
+ },
+ {
+ "name": "iconHeightUnit",
+ "displayName": "Icon Height Unit",
+ "category": "General",
+ "displayPriority": 12,
+ "description": "The unit of preferred height of the icon.",
+ "defaultValue": null,
+ "defaultValueInternal": "px",
+ "refTo": "iconHeight"
+ }
+ ],
+ "required": [
+ "iconPath"
+ ],
+ "additionalProperties": false
+ }
+ },
+ "propertiesMeta": [
+ {
+ "name": "name",
+ "displayName": "Name",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Name of the accordion item.",
+ "defaultValue": "newTab",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "text",
+ "displayName": "Text",
+ "category": "General",
+ "displayPriority": 11,
+ "description": "The text that will be displayed in the accordion header.",
+ "defaultValue": "Accordion Item",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "targetFile",
+ "displayName": "Target File",
+ "category": "General",
+ "displayPriority": 12,
+ "description": "The content or usercontrol to show.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "targetFileHostPreload",
+ "displayName": "Target File Host Preload",
+ "category": "General",
+ "displayPriority": 13,
+ "description": "Defines whether the target file host is preloaded when the accordion region is initialized or loaded when the accordion item is selected.",
+ "defaultValue": null,
+ "defaultValueInternal": false
+ },
+ {
+ "name": "targetFileHostPreAttach",
+ "displayName": "Target File Host Pre Attach",
+ "category": "General",
+ "displayPriority": 14,
+ "description": "Defines whether the target file host is pre attached to the DOM even if the accorion item is not yet opened. Does only have an effect if TargetFileHostPreload is true.",
+ "defaultValue": null,
+ "defaultValueInternal": false
+ },
+ {
+ "name": "targetFileHostKeepAlive",
+ "displayName": "Target File Host Keep Alive",
+ "category": "General",
+ "displayPriority": 15,
+ "description": "Defines whether the target file host is kept alive when the accordion item is closed. Has no effect when TargetFileHostPreload is set to true.",
+ "defaultValue": null,
+ "defaultValueInternal": false
+ },
+ {
+ "name": "maxContentHeight",
+ "displayName": "Max Content Height",
+ "category": "General",
+ "displayPriority": 16,
+ "description": "The maximal height of the accordion items content in 'px'.",
+ "defaultValue": null,
+ "defaultValueInternal": 240
+ },
+ {
+ "name": "icon",
+ "displayName": "Icon",
+ "category": "General",
+ "displayPriority": 30,
+ "description": "The Icon displayed in the accordion header.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ }
+ ],
+ "additionalProperties": false,
+ "required": [
+ "name"
+ ]
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiAdsState": {
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiAdsState",
+ "frameworkControlNamespace": "TcHmi.Controls.Beckhoff"
+ },
+ "TcHmiAdsState": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiAdsState"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiAdsState.StateImages": {
+ "type": "object",
+ "title": "StateImages",
+ "description": "A structure defining an image for each state the control can have and the fallback image.",
+ "propertiesMeta": [
+ {
+ "name": "Fallback",
+ "displayName": "Fallback",
+ "category": "General",
+ "displayPriority": 1,
+ "description": "The Fallback Image if a state is not defined.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Invalid",
+ "displayName": "Invalid",
+ "category": "General",
+ "displayPriority": 2,
+ "description": "The Image for the State 'Invalid'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Idle",
+ "displayName": "Idle",
+ "category": "General",
+ "displayPriority": 3,
+ "description": "The Image for the State 'Idle'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Reset",
+ "displayName": "Reset",
+ "category": "General",
+ "displayPriority": 4,
+ "description": "The Image for the State 'Reset'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Init",
+ "displayName": "Init",
+ "category": "General",
+ "displayPriority": 5,
+ "description": "The Image for the State 'Init'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Start",
+ "displayName": "Start",
+ "category": "General",
+ "displayPriority": 6,
+ "description": "The Image for the State 'Start'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Run",
+ "displayName": "Run",
+ "category": "General",
+ "displayPriority": 7,
+ "description": "The Image for the State 'Run'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Stop",
+ "displayName": "Stop",
+ "category": "General",
+ "displayPriority": 8,
+ "description": "The Image for the State 'Stop'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "SaveCfg",
+ "displayName": "Save Cfg",
+ "category": "General",
+ "displayPriority": 9,
+ "description": "The Image for the State 'SaveCfg'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "LoadCfg",
+ "displayName": "Load Cfg",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The Image for the State 'LoadCfg'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "PowerFailure",
+ "displayName": "Power Failure",
+ "category": "General",
+ "displayPriority": 11,
+ "description": "The Image for the State 'PowerFailure'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "PowerGood",
+ "displayName": "Power Good",
+ "category": "General",
+ "displayPriority": 12,
+ "description": "The Image for the State 'PowerGood'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Error",
+ "displayName": "Error",
+ "category": "General",
+ "displayPriority": 13,
+ "description": "The Image for the State 'Error'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Shutdown",
+ "displayName": "Shutdown",
+ "category": "General",
+ "displayPriority": 14,
+ "description": "The Image for the State 'Shutdown'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Suspend",
+ "displayName": "Suspend",
+ "category": "General",
+ "displayPriority": 15,
+ "description": "The Image for the State 'Suspend'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Resume",
+ "displayName": "Resume",
+ "category": "General",
+ "displayPriority": 16,
+ "description": "The Image for the State 'Resume'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Config",
+ "displayName": "Config",
+ "category": "General",
+ "displayPriority": 17,
+ "description": "The Image for the State 'Config'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Reconfig",
+ "displayName": "Reconfig",
+ "category": "General",
+ "displayPriority": 18,
+ "description": "The Image for the State 'Reconfig'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Stopping",
+ "displayName": "Stopping",
+ "category": "General",
+ "displayPriority": 19,
+ "description": "The Image for the State 'Stopping'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Incompatible",
+ "displayName": "Incompatible",
+ "category": "General",
+ "displayPriority": 20,
+ "description": "The Image for the State 'Incompatible'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "Exception",
+ "displayName": "Exception",
+ "category": "General",
+ "displayPriority": 21,
+ "description": "The Image for the State 'Exception'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ }
+ ],
+ "properties": {
+ "Fallback": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Invalid": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Idle": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Reset": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Init": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Start": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Run": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Stop": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "SaveCfg": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "LoadCfg": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "PowerFailure": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "PowerGood": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Error": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Shutdown": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Suspend": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Resume": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Config": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Reconfig": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Stopping": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Incompatible": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "Exception": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiAudio": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiAudio",
+ "frameworkControlNamespace": "TcHmi.Controls.Beckhoff"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiAudio.AudioSourceList": {
+ "title": "AudioSourceList",
+ "description": "Audio Source List",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "title": "Audio Source",
+ "engineeringColumns": [
+ "source",
+ "type"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "source",
+ "displayName": "Source",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The source path of the audio source",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "type",
+ "displayName": "Type",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "The type of the audio source.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ }
+ ],
+ "properties": {
+ "source": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "type": {
+ "type": "string",
+ "category": "Common",
+ "enum": [
+ "",
+ "audio/mpeg",
+ "audio/ogg",
+ "audio/wav",
+ "audio/flac",
+ "application/dash+xml",
+ "application/vnd.apple.mpegurl"
+ ],
+ "options": [
+ {
+ "label": "",
+ "value": ""
+ }
+ ],
+ "default": ""
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "source"
+ ]
+ }
+ },
+ "TcHmiAudio": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiAudio"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiButton": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiButton",
+ "frameworkControlNamespace": "TcHmi.Controls.Beckhoff"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiButton.StateSymbol": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/Symbol"
+ },
+ {
+ "frameworkSymbolSubType": {
+ "$ref": "tchmi:general#/definitions/Boolean"
+ }
+ }
+ ]
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiButton.StateChangedEventObject": {
+ "type": "object",
+ "properties": {
+ "control": {
+ "$ref": "tchmi:framework#/definitions/Control"
+ },
+ "state": {
+ "type": "boolean"
+ },
+ "stateOld": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TcHmiButton": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiButton"
+ },
+ "TcHmiButtonStateSymbol": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiButton.StateSymbol"
+ },
+ "TcHmiButtonStateChangedEventObject": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiButton.StateChangedEventObject"
+ },
+ "ChartBarGraphColorList": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiHorizontalBarChart.ChartBarGraphColorList"
+ },
+ "ChartBarGraphDataDefinitionList": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiHorizontalBarChart.ChartBarGraphDataDefinitionList"
+ },
+ "ChartBarGraphPosition": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiHorizontalBarChart.ChartBarGraphPosition"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiBarChart": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiBarChart",
+ "frameworkControlNamespace": "TcHmi.Controls.Beckhoff"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartBarGraphColorList": {
+ "title": "ChartBarGraphColorList",
+ "engineeringDefaultDatatype": 0,
+ "anyOf": [
+ {
+ "type": "array",
+ "items": {
+ "$ref": "tchmi:framework#/definitions/SolidColor"
+ }
+ },
+ {
+ "$ref": "tchmi:framework#/definitions/SolidColor"
+ }
+ ]
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartBarGraphDataDefinitionList": {
+ "title": "ChartBarGraphDataDefinitionList",
+ "engineeringDefaultDatatype": 0,
+ "anyOf": [
+ {
+ "type": "array",
+ "title": "Array>",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ }
+ },
+ {
+ "type": "array",
+ "title": "Array",
+ "items": {
+ "type": "number"
+ }
+ }
+ ]
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartBarGraphPosition": {
+ "title": "ChartBarGraphPosition",
+ "type": "string",
+ "enum": [
+ "Left",
+ "Right"
+ ],
+ "default": "Left"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartBarGraphDescriptionDefinitionList": {
+ "title": "ChartBarGraphDescriptionDefinitionList",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "engineeringColumns": [
+ "legendName"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "barColor",
+ "displayName": "Bar Color",
+ "category": "Colors",
+ "displayPriority": 10,
+ "description": "Color for this bars",
+ "defaultValue": {
+ "color": "#2775be"
+ },
+ "defaultValueInternal": null
+ },
+ {
+ "name": "legendName",
+ "category": "General",
+ "displayName": "Legend Name",
+ "displayPriority": 10,
+ "description": "The name that is displayed in the legend.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "scaleFactor",
+ "category": "General",
+ "displayName": "Scale Factor",
+ "displayPriority": 10,
+ "description": "Scales all values with this scale factor.",
+ "defaultValue": null,
+ "defaultValueInternal": 1
+ },
+ {
+ "name": "colorRanges",
+ "category": "General",
+ "displayName": "Color Ranges",
+ "displayPriority": 10,
+ "description": "An array of colors to be used in different ranges.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "defaultVisibility",
+ "category": "General",
+ "displayName": "Default Visibility",
+ "displayPriority": 10,
+ "description": "Default value for visibility.",
+ "defaultValue": null,
+ "defaultValueInternal": true
+ }
+ ],
+ "properties": {
+ "barColor": {
+ "$ref": "tchmi:framework#/definitions/SolidColor"
+ },
+ "legendName": {
+ "type": "string"
+ },
+ "scaleFactor": {
+ "type": "number"
+ },
+ "colorRanges": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "color": {
+ "$ref": "tchmi:framework#/definitions/SolidColor"
+ },
+ "expression": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartBarColorFilter"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "defaultVisibility": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartBarColorFilter": {
+ "title": "ChartBarColorFilter",
+ "type": "array",
+ "items": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "path": {
+ "type": "string",
+ "enum": [
+ "{value}"
+ ],
+ "default": "{value}"
+ },
+ "comparator": {
+ "type": "string",
+ "enum": [
+ "==",
+ "!=",
+ "<",
+ ">",
+ "<=",
+ ">="
+ ],
+ "default": "=="
+ },
+ "value": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "path",
+ "comparator",
+ "value"
+ ]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "logic": {
+ "enum": [
+ "AND",
+ "OR"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "logic"
+ ],
+ "additionalProperties": false
+ },
+ {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartBarColorFilter"
+ }
+ ]
+ }
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartBarGraphArrangement": {
+ "title": "ChartBarGraphArrangement",
+ "type": "string",
+ "enum": [
+ "Overlapped",
+ "Clustered",
+ "Stacked"
+ ],
+ "default": "Overlapped"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartAxisLabeling": {
+ "title": "ChartAxisLabeling",
+ "type": "string",
+ "enum": [
+ "Number",
+ "Scientific",
+ "Auto"
+ ],
+ "default": "Number"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartReferenceLineDefinition": {
+ "title": "ChartReferenceLineDefinition",
+ "type": "object",
+ "engineeringColumns": [
+ "name",
+ "value",
+ "orientation"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "show",
+ "category": "General",
+ "displayName": "Show",
+ "displayPriority": 10,
+ "description": "Describes whether the reference line is displayed.",
+ "defaultValue": null,
+ "defaultValueInternal": true
+ },
+ {
+ "name": "name",
+ "category": "General",
+ "displayName": "Name",
+ "displayPriority": 10,
+ "description": "Describes the name of the reference line.",
+ "defaultValue": null,
+ "defaultValueInternal": ""
+ },
+ {
+ "name": "orientation",
+ "category": "General",
+ "displayName": "Orientation",
+ "displayPriority": 10,
+ "description": "Describes whether the reference line is vertical or horizontal.",
+ "defaultValue": "Horizontal",
+ "defaultValueInternal": "Horizontal"
+ },
+ {
+ "name": "value",
+ "category": "General",
+ "displayName": "Value",
+ "displayPriority": 10,
+ "description": "Describes the value of the reference line.",
+ "defaultValue": null,
+ "defaultValueInternal": 0
+ },
+ {
+ "name": "valueUnit",
+ "category": "General",
+ "displayName": "Value Unit",
+ "displayPriority": 10,
+ "description": "Describes the unit of the value of the reference line (Value or %).",
+ "defaultValue": "Value",
+ "defaultValueInternal": "Value"
+ },
+ {
+ "name": "color",
+ "category": "Colors",
+ "displayName": "Color",
+ "displayPriority": 10,
+ "description": "Describes the color of the reference line.",
+ "defaultValue": "%tr%Control::TcHmi.Controls.Beckhoff.TcHmiBarChart::ReferenceLineColor%/tr%",
+ "defaultValueInternal": {
+ "color": "#4794da"
+ }
+ },
+ {
+ "name": "lineWidth",
+ "category": "General",
+ "displayName": "Line Width",
+ "displayPriority": 10,
+ "description": "Describes the line thickness of the reference line.",
+ "defaultValue": null,
+ "defaultValueInternal": 1
+ },
+ {
+ "name": "showLabel",
+ "category": "General",
+ "displayName": "Show Label",
+ "displayPriority": 10,
+ "description": "Describes whether the description of the reference line is displayed.",
+ "defaultValue": null,
+ "defaultValueInternal": true
+ },
+ {
+ "name": "labelHorizontalAlignment",
+ "category": "General",
+ "displayName": "Label Horizontal Alignment",
+ "displayPriority": 10,
+ "description": "Describes the horizontal alignment of the reference line description.",
+ "defaultValue": null,
+ "defaultValueInternal": "Right"
+ },
+ {
+ "name": "labelVerticalAlignment",
+ "category": "General",
+ "displayName": "Label Vertical Alignment",
+ "displayPriority": 10,
+ "description": "Describes the vertical alignment of the reference line description.",
+ "defaultValue": null,
+ "defaultValueInternal": "Top"
+ },
+ {
+ "name": "labelFontFamily",
+ "category": "General",
+ "displayName": "Label Font Family",
+ "displayPriority": 10,
+ "description": "Describes the font of the description of the reference line. Comma separated list of family name or keyword: 'serif', 'sans-serif', 'monospace'.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "labelFontSize",
+ "category": "General",
+ "displayName": "Label Font Size",
+ "displayPriority": 10,
+ "description": "Describes the font size of the description of the reference line.",
+ "defaultValue": null,
+ "defaultValueInternal": 12
+ },
+ {
+ "name": "labelFontSizeUnit",
+ "refTo": "labelFontSize",
+ "category": "General",
+ "displayName": "Label Font Size Unit",
+ "displayPriority": 10,
+ "description": "Describes the font size unit of the description of the reference line.",
+ "defaultValue": null,
+ "defaultValueInternal": "px"
+ },
+ {
+ "name": "labelFontWeight",
+ "category": "General",
+ "displayName": "Label Font Weight",
+ "displayPriority": 10,
+ "description": "Describes the font weight of the description of the reference line. 'Normal', 'Bold' (glyphs with more weight) or 'Auto' for inherited.",
+ "defaultValue": null,
+ "defaultValueInternal": "Auto"
+ }
+ ],
+ "properties": {
+ "show": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "orientation": {
+ "type": "string",
+ "enum": [
+ "Horizontal",
+ "Vertical"
+ ]
+ },
+ "value": {
+ "type": "number"
+ },
+ "valueUnit": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.ChartReferenceLineValueUnit"
+ },
+ "color": {
+ "$ref": "tchmi:framework#/definitions/SolidColor"
+ },
+ "lineWidth": {
+ "type": "number"
+ },
+ "showLabel": {
+ "type": "boolean"
+ },
+ "labelHorizontalAlignment": {
+ "$ref": "tchmi:framework#/definitions/HorizontalAlignment"
+ },
+ "labelVerticalAlignment": {
+ "$ref": "tchmi:framework#/definitions/VerticalAlignment"
+ },
+ "labelFontFamily": {
+ "$ref": "tchmi:framework#/definitions/FontFamily"
+ },
+ "labelFontSize": {
+ "$ref": "tchmi:framework#/definitions/MeasurementValue"
+ },
+ "labelFontSizeUnit": {
+ "$ref": "tchmi:framework#/definitions/PixelUnit"
+ },
+ "labelFontWeight": {
+ "$ref": "tchmi:framework#/definitions/FontWeight"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "value",
+ "orientation"
+ ]
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartReferenceLineDefinitionList": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "title": "ChartReferenceLineDefinitionList",
+ "type": "array",
+ "items": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartReferenceLineDefinition"
+ }
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiBarChart.ChartReferenceLinesPosition": {
+ "title": "ChartReferenceLinesPosition",
+ "type": "string",
+ "enum": [
+ "Background",
+ "Foreground"
+ ],
+ "default": "Background"
+ },
+ "TcHmiBarChart": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiBarChart"
+ },
+ "ChartLineStyle": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.ChartLineStyle"
+ },
+ "GaugeKnobDefinition": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.GaugeKnobDefinition"
+ },
+ "GaugeRangeDefinitionList": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.GaugeRangeDefinitionList"
+ },
+ "GaugeTickDefinition": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.GaugeTickDefinition"
+ },
+ "GaugeMarkerDefinitionList": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.GaugeMarkerDefinitionList"
+ },
+ "ChartReferenceLineValueUnit": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.ChartReferenceLineValueUnit"
+ },
+ "TcHmi.Controls.Beckhoff.ChartLineStyle": {
+ "title": "ChartLineStyle",
+ "type": "string",
+ "enum": [
+ "Dashed",
+ "Dotted",
+ "Solid"
+ ],
+ "default": "Dashed"
+ },
+ "TcHmi.Controls.Beckhoff.GaugeKnobDefinition": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "title": "GaugeKnobDefinition",
+ "type": "object",
+ "propertiesMeta": [
+ {
+ "name": "imagePath",
+ "category": "General",
+ "displayName": "Image Path",
+ "displayPriority": 10,
+ "description": "Path to a Pixel or Vector Image.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "width",
+ "category": "General",
+ "displayName": "Width",
+ "displayPriority": 10,
+ "description": "Width of the Knob",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "height",
+ "category": "General",
+ "displayName": "Height",
+ "displayPriority": 10,
+ "description": "Height of the Knob",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "offsetX",
+ "category": "General",
+ "displayName": "Offset X",
+ "displayPriority": 10,
+ "description": "Defines the Offset of the Knob.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "offsetY",
+ "category": "General",
+ "displayName": "Offset Y",
+ "displayPriority": 10,
+ "description": "Defines the Offset of the Knob.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ }
+ ],
+ "properties": {
+ "imagePath": {
+ "$ref": "tchmi:framework#/definitions/Path"
+ },
+ "width": {
+ "type": "number"
+ },
+ "height": {
+ "type": "number"
+ },
+ "offsetX": {
+ "type": "number"
+ },
+ "offsetY": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TcHmi.Controls.Beckhoff.GaugeRangeDefinitionList": {
+ "title": "GaugeRangeDefinitionList",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "title": "Range Definition",
+ "engineeringColumns": [
+ "start",
+ "end",
+ "color"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "color",
+ "displayName": "Color",
+ "category": "Colors",
+ "displayPriority": 10,
+ "description": "Color of this range",
+ "defaultValue": {
+ "color": "rgb(0, 128, 0)"
+ },
+ "defaultValueInternal": null
+ },
+ {
+ "name": "start",
+ "displayName": "Start",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Start of this range",
+ "defaultValue": 0,
+ "defaultValueInternal": 0
+ },
+ {
+ "name": "end",
+ "displayName": "End",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "End of this range",
+ "defaultValue": 0,
+ "defaultValueInternal": 0
+ }
+ ],
+ "properties": {
+ "color": {
+ "$ref": "tchmi:framework#/definitions/SolidColor"
+ },
+ "start": {
+ "type": "number"
+ },
+ "end": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "color",
+ "start",
+ "end"
+ ]
+ }
+ },
+ "TcHmi.Controls.Beckhoff.GaugeTickDefinition": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "title": "GaugeTickDefinition",
+ "type": "object",
+ "properties": {
+ "mainTickRange": {
+ "type": "number",
+ "minimum": 0
+ },
+ "subTickRange": {
+ "type": "number",
+ "minimum": 0
+ }
+ },
+ "required": [
+ "mainTickRange",
+ "subTickRange"
+ ],
+ "additionalProperties": false
+ },
+ "TcHmi.Controls.Beckhoff.ChartReferenceLineValueUnit": {
+ "title": "ChartReferenceLineValueUnit",
+ "type": "string",
+ "enum": [
+ "Value",
+ "%"
+ ],
+ "default": "Value"
+ },
+ "TcHmi.Controls.Beckhoff.GaugeMarkerDefinitionList": {
+ "title": "GaugeMarkerDefinitionList",
+ "type": "array",
+ "items": {
+ "type": "object",
+ "title": "Marker Definition",
+ "engineeringColumns": [
+ "label",
+ "value",
+ "color"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "color",
+ "displayName": "Color",
+ "category": "Colors",
+ "displayPriority": 10,
+ "description": "Color of this marker",
+ "defaultValue": {
+ "color": "rgba(0, 0, 0, 1)"
+ },
+ "defaultValueInternal": null
+ },
+ {
+ "name": "label",
+ "displayName": "Label",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Name of this marker",
+ "defaultValue": "",
+ "defaultValueInternal": null
+ },
+ {
+ "name": "value",
+ "displayName": "Value",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Value of this marker",
+ "defaultValue": 0,
+ "defaultValueInternal": 0
+ }
+ ],
+ "properties": {
+ "color": {
+ "$ref": "tchmi:framework#/definitions/SolidColor"
+ },
+ "label": {
+ "type": "string"
+ },
+ "value": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "color",
+ "label",
+ "value"
+ ]
+ }
+ },
+ "TcHmi.Controls.Beckhoff.InputProcessingPoint": {
+ "type": "string",
+ "enum": [
+ "Change",
+ "InteractionFinished"
+ ],
+ "default": "Change"
+ },
+ "TcHmi.Controls.Beckhoff.ContentTabs.OverflowMode": {
+ "type": "string",
+ "enum": [
+ "Popup",
+ "Scroll"
+ ],
+ "default": "Popup"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiCalculator": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiCalculator",
+ "frameworkControlNamespace": "TcHmi.Controls.Beckhoff"
+ },
+ "TcHmiCalculator": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiCalculator"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiCalculator.LayoutName": {
+ "type": "string",
+ "enum": [
+ "Standard",
+ "Scientific"
+ ],
+ "default": "Standard"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiCheckbox": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiCheckbox",
+ "frameworkControlNamespace": "TcHmi.Controls.Beckhoff"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiCheckbox.StateSymbol": {
+ "allOf": [
+ {
+ "$ref": "tchmi:framework#/definitions/Symbol"
+ },
+ {
+ "frameworkSymbolSubType": {
+ "$ref": "tchmi:general#/definitions/Boolean"
+ }
+ }
+ ]
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiCheckbox.TextPosition": {
+ "type": "string",
+ "enum": [
+ "Left",
+ "Right"
+ ]
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiCheckbox.StateChangedEventObject": {
+ "type": "object",
+ "properties": {
+ "control": {
+ "$ref": "tchmi:framework#/definitions/Control"
+ },
+ "state": {
+ "type": "boolean"
+ },
+ "stateOld": {
+ "type": "boolean"
+ }
+ },
+ "additionalProperties": false
+ },
+ "TcHmiCheckbox": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiCheckbox"
+ },
+ "TcHmiCheckboxStateSymbol": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiCheckbox.StateSymbol"
+ },
+ "TcHmiCheckboxStateChangedEventObject": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiCheckbox.StateChangedEventObject"
+ },
+ "DropDownStyle": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiCombobox.DropDownStyle"
+ },
+ "ListItem": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiCombobox.ListItem"
+ },
+ "ListItemList": {
+ "$ref": "tchmi:framework#/definitions/TcHmi.Controls.Beckhoff.TcHmiCombobox.ListItemList"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiCombobox": {
+ "$schema": "http://json-schema.org/draft-04/schema",
+ "type": "object",
+ "frameworkInstanceOf": "TcHmi.Controls.System.TcHmiControl",
+ "frameworkControlType": "TcHmiCombobox",
+ "frameworkControlNamespace": "TcHmi.Controls.Beckhoff"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiCombobox.DropDownStyle": {
+ "type": "string",
+ "enum": [
+ "Classic",
+ "Mobile"
+ ],
+ "default": "Classic"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiCombobox.ImagePosition": {
+ "type": "string",
+ "enum": [
+ "LeftOfText",
+ "RightOfText"
+ ],
+ "default": "LeftOfText"
+ },
+ "TcHmi.Controls.Beckhoff.TcHmiCombobox.ListItem": {
+ "title": "List Item",
+ "description": "List Item List",
+ "type": "object",
+ "engineeringColumns": [
+ "id",
+ "text",
+ "value",
+ "category"
+ ],
+ "propertiesMeta": [
+ {
+ "name": "id",
+ "displayName": "Id",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Numerical ID for this entry. Can be chosen freely, but must be unique.",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "text",
+ "displayName": "Text",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Text to show for this entry",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "value",
+ "displayName": "Value",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "Value which is associated to this entry",
+ "defaultValue": null,
+ "defaultValueInternal": null
+ },
+ {
+ "name": "category",
+ "displayName": "Category",
+ "category": "General",
+ "displayPriority": 10,
+ "description": "An optional category which will be displayed above the item as a label (like