@babylonjs/gui 5.20.0 → 5.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/2D/adtInstrumentation.js +70 -90
  2. package/2D/adtInstrumentation.js.map +1 -1
  3. package/2D/advancedDynamicTexture.d.ts +14 -0
  4. package/2D/advancedDynamicTexture.js +574 -620
  5. package/2D/advancedDynamicTexture.js.map +1 -1
  6. package/2D/controls/button.js +76 -90
  7. package/2D/controls/button.js.map +1 -1
  8. package/2D/controls/checkbox.js +86 -106
  9. package/2D/controls/checkbox.js.map +1 -1
  10. package/2D/controls/colorpicker.js +395 -415
  11. package/2D/controls/colorpicker.js.map +1 -1
  12. package/2D/controls/container.js +187 -230
  13. package/2D/controls/container.js.map +1 -1
  14. package/2D/controls/control.js +1073 -1353
  15. package/2D/controls/control.js.map +1 -1
  16. package/2D/controls/displayGrid.js +152 -196
  17. package/2D/controls/displayGrid.js.map +1 -1
  18. package/2D/controls/ellipse.js +32 -40
  19. package/2D/controls/ellipse.js.map +1 -1
  20. package/2D/controls/focusableButton.js +30 -35
  21. package/2D/controls/focusableButton.js.map +1 -1
  22. package/2D/controls/grid.js +172 -212
  23. package/2D/controls/grid.js.map +1 -1
  24. package/2D/controls/image.js +489 -592
  25. package/2D/controls/image.js.map +1 -1
  26. package/2D/controls/inputPassword.js +9 -16
  27. package/2D/controls/inputPassword.js.map +1 -1
  28. package/2D/controls/inputText.js +380 -467
  29. package/2D/controls/inputText.js.map +1 -1
  30. package/2D/controls/inputTextArea.js +234 -273
  31. package/2D/controls/inputTextArea.js.map +1 -1
  32. package/2D/controls/line.js +147 -198
  33. package/2D/controls/line.js.map +1 -1
  34. package/2D/controls/multiLine.js +87 -113
  35. package/2D/controls/multiLine.js.map +1 -1
  36. package/2D/controls/radioButton.js +106 -127
  37. package/2D/controls/radioButton.js.map +1 -1
  38. package/2D/controls/rectangle.js +60 -72
  39. package/2D/controls/rectangle.js.map +1 -1
  40. package/2D/controls/scrollViewers/scrollViewer.js +439 -543
  41. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  42. package/2D/controls/scrollViewers/scrollViewerWindow.js +99 -118
  43. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  44. package/2D/controls/selector.js +241 -329
  45. package/2D/controls/selector.js.map +1 -1
  46. package/2D/controls/sliders/baseSlider.js +182 -230
  47. package/2D/controls/sliders/baseSlider.js.map +1 -1
  48. package/2D/controls/sliders/imageBasedSlider.js +86 -109
  49. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  50. package/2D/controls/sliders/imageScrollBar.js +148 -178
  51. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  52. package/2D/controls/sliders/scrollBar.js +64 -80
  53. package/2D/controls/sliders/scrollBar.js.map +1 -1
  54. package/2D/controls/sliders/slider.js +91 -115
  55. package/2D/controls/sliders/slider.js.map +1 -1
  56. package/2D/controls/stackPanel.js +114 -135
  57. package/2D/controls/stackPanel.js.map +1 -1
  58. package/2D/controls/statics.js +5 -5
  59. package/2D/controls/statics.js.map +1 -1
  60. package/2D/controls/textBlock.js +322 -384
  61. package/2D/controls/textBlock.js.map +1 -1
  62. package/2D/controls/textWrapper.js +27 -41
  63. package/2D/controls/textWrapper.js.map +1 -1
  64. package/2D/controls/toggleButton.js +105 -121
  65. package/2D/controls/toggleButton.js.map +1 -1
  66. package/2D/controls/virtualKeyboard.js +101 -123
  67. package/2D/controls/virtualKeyboard.js.map +1 -1
  68. package/2D/math2D.js +62 -70
  69. package/2D/math2D.js.map +1 -1
  70. package/2D/measure.js +30 -32
  71. package/2D/measure.js.map +1 -1
  72. package/2D/multiLinePoint.js +71 -89
  73. package/2D/multiLinePoint.js.map +1 -1
  74. package/2D/style.js +55 -73
  75. package/2D/style.js.map +1 -1
  76. package/2D/valueAndUnit.js +71 -104
  77. package/2D/valueAndUnit.js.map +1 -1
  78. package/2D/xmlLoader.js +70 -84
  79. package/2D/xmlLoader.js.map +1 -1
  80. package/3D/behaviors/defaultBehavior.js +40 -59
  81. package/3D/behaviors/defaultBehavior.js.map +1 -1
  82. package/3D/controls/abstractButton3D.js +8 -12
  83. package/3D/controls/abstractButton3D.js.map +1 -1
  84. package/3D/controls/button3D.js +30 -35
  85. package/3D/controls/button3D.js.map +1 -1
  86. package/3D/controls/container3D.js +57 -71
  87. package/3D/controls/container3D.js.map +1 -1
  88. package/3D/controls/contentDisplay3D.js +47 -60
  89. package/3D/controls/contentDisplay3D.js.map +1 -1
  90. package/3D/controls/control3D.js +123 -158
  91. package/3D/controls/control3D.js.map +1 -1
  92. package/3D/controls/cylinderPanel.js +28 -38
  93. package/3D/controls/cylinderPanel.js.map +1 -1
  94. package/3D/controls/handMenu.js +20 -29
  95. package/3D/controls/handMenu.js.map +1 -1
  96. package/3D/controls/holographicBackplate.js +52 -72
  97. package/3D/controls/holographicBackplate.js.map +1 -1
  98. package/3D/controls/holographicButton.js +160 -200
  99. package/3D/controls/holographicButton.js.map +1 -1
  100. package/3D/controls/holographicSlate.js +176 -206
  101. package/3D/controls/holographicSlate.js.map +1 -1
  102. package/3D/controls/meshButton3D.js +24 -30
  103. package/3D/controls/meshButton3D.js.map +1 -1
  104. package/3D/controls/nearMenu.js +57 -71
  105. package/3D/controls/nearMenu.js.map +1 -1
  106. package/3D/controls/planePanel.js +6 -13
  107. package/3D/controls/planePanel.js.map +1 -1
  108. package/3D/controls/scatterPanel.js +43 -54
  109. package/3D/controls/scatterPanel.js.map +1 -1
  110. package/3D/controls/slider3D.js +168 -222
  111. package/3D/controls/slider3D.js.map +1 -1
  112. package/3D/controls/spherePanel.js +29 -39
  113. package/3D/controls/spherePanel.js.map +1 -1
  114. package/3D/controls/stackPanel3D.js +36 -49
  115. package/3D/controls/stackPanel3D.js.map +1 -1
  116. package/3D/controls/touchButton3D.js +126 -154
  117. package/3D/controls/touchButton3D.js.map +1 -1
  118. package/3D/controls/touchHolographicButton.js +223 -272
  119. package/3D/controls/touchHolographicButton.js.map +1 -1
  120. package/3D/controls/touchHolographicMenu.js +55 -66
  121. package/3D/controls/touchHolographicMenu.js.map +1 -1
  122. package/3D/controls/touchMeshButton3D.js +24 -30
  123. package/3D/controls/touchMeshButton3D.js.map +1 -1
  124. package/3D/controls/volumeBasedPanel.js +85 -107
  125. package/3D/controls/volumeBasedPanel.js.map +1 -1
  126. package/3D/gizmos/gizmoHandle.js +68 -103
  127. package/3D/gizmos/gizmoHandle.js.map +1 -1
  128. package/3D/gizmos/slateGizmo.js +165 -182
  129. package/3D/gizmos/slateGizmo.js.map +1 -1
  130. package/3D/gui3DManager.js +76 -101
  131. package/3D/gui3DManager.js.map +1 -1
  132. package/3D/materials/fluent/fluentMaterial.js +110 -119
  133. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  134. package/3D/materials/fluent/shaders/fluent.fragment.js +20 -3
  135. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -1
  136. package/3D/materials/fluent/shaders/fluent.vertex.js +11 -3
  137. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -1
  138. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +168 -177
  139. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  140. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +9 -3
  141. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -1
  142. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +15 -3
  143. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -1
  144. package/3D/materials/fluentButton/fluentButtonMaterial.js +205 -213
  145. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  146. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +6 -3
  147. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -1
  148. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +6 -3
  149. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -1
  150. package/3D/materials/handle/handleMaterial.js +56 -69
  151. package/3D/materials/handle/handleMaterial.js.map +1 -1
  152. package/3D/materials/handle/shaders/handle.fragment.js +3 -3
  153. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -1
  154. package/3D/materials/handle/shaders/handle.vertex.js +3 -3
  155. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -1
  156. package/3D/materials/mrdl/mrdlBackplateMaterial.js +158 -166
  157. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  158. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +322 -330
  159. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  160. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +322 -330
  161. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  162. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +9 -3
  163. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -1
  164. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +6 -3
  165. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -1
  166. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +24 -3
  167. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -1
  168. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +12 -3
  169. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -1
  170. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +24 -3
  171. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -1
  172. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +12 -3
  173. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -1
  174. package/3D/vector3WithInfo.js +6 -12
  175. package/3D/vector3WithInfo.js.map +1 -1
  176. package/legacy/legacy.js +1 -1
  177. package/legacy/legacy.js.map +1 -1
  178. package/package.json +3 -6
@@ -1,4 +1,3 @@
1
- import { __extends } from "tslib";
2
1
  import { Observable } from "@babylonjs/core/Misc/observable.js";
3
2
  import { StackPanel } from "./stackPanel.js";
4
3
  import { Button } from "./button.js";
@@ -7,54 +6,47 @@ import { InputTextArea } from "./inputTextArea.js";
7
6
  /**
8
7
  * Class used to store key control properties
9
8
  */
10
- var KeyPropertySet = /** @class */ (function () {
11
- function KeyPropertySet() {
12
- }
13
- return KeyPropertySet;
14
- }());
15
- export { KeyPropertySet };
9
+ export class KeyPropertySet {
10
+ }
16
11
  /**
17
12
  * Class used to create virtual keyboard
18
13
  */
19
- var VirtualKeyboard = /** @class */ (function (_super) {
20
- __extends(VirtualKeyboard, _super);
21
- function VirtualKeyboard() {
22
- var _this = _super !== null && _super.apply(this, arguments) || this;
14
+ export class VirtualKeyboard extends StackPanel {
15
+ constructor() {
16
+ super(...arguments);
23
17
  /** Observable raised when a key is pressed */
24
- _this.onKeyPressObservable = new Observable();
18
+ this.onKeyPressObservable = new Observable();
25
19
  /** Gets or sets default key button width */
26
- _this.defaultButtonWidth = "40px";
20
+ this.defaultButtonWidth = "40px";
27
21
  /** Gets or sets default key button height */
28
- _this.defaultButtonHeight = "40px";
22
+ this.defaultButtonHeight = "40px";
29
23
  /** Gets or sets default key button left padding */
30
- _this.defaultButtonPaddingLeft = "2px";
24
+ this.defaultButtonPaddingLeft = "2px";
31
25
  /** Gets or sets default key button right padding */
32
- _this.defaultButtonPaddingRight = "2px";
26
+ this.defaultButtonPaddingRight = "2px";
33
27
  /** Gets or sets default key button top padding */
34
- _this.defaultButtonPaddingTop = "2px";
28
+ this.defaultButtonPaddingTop = "2px";
35
29
  /** Gets or sets default key button bottom padding */
36
- _this.defaultButtonPaddingBottom = "2px";
30
+ this.defaultButtonPaddingBottom = "2px";
37
31
  /** Gets or sets default key button foreground color */
38
- _this.defaultButtonColor = "#DDD";
32
+ this.defaultButtonColor = "#DDD";
39
33
  /** Gets or sets default key button background color */
40
- _this.defaultButtonBackground = "#070707";
34
+ this.defaultButtonBackground = "#070707";
41
35
  /** Gets or sets shift button foreground color */
42
- _this.shiftButtonColor = "#7799FF";
36
+ this.shiftButtonColor = "#7799FF";
43
37
  /** Gets or sets shift button thickness*/
44
- _this.selectedShiftThickness = 1;
38
+ this.selectedShiftThickness = 1;
45
39
  /** Gets shift key state */
46
- _this.shiftState = 0;
47
- _this._currentlyConnectedInputText = null;
48
- _this._connectedInputTexts = [];
49
- _this._onKeyPressObserver = null;
50
- return _this;
40
+ this.shiftState = 0;
41
+ this._currentlyConnectedInputText = null;
42
+ this._connectedInputTexts = [];
43
+ this._onKeyPressObserver = null;
51
44
  }
52
- VirtualKeyboard.prototype._getTypeName = function () {
45
+ _getTypeName() {
53
46
  return "VirtualKeyboard";
54
- };
55
- VirtualKeyboard.prototype._createKey = function (key, propertySet) {
56
- var _this = this;
57
- var button = Button.CreateSimpleButton(key, key);
47
+ }
48
+ _createKey(key, propertySet) {
49
+ const button = Button.CreateSimpleButton(key, key);
58
50
  button.width = propertySet && propertySet.width ? propertySet.width : this.defaultButtonWidth;
59
51
  button.height = propertySet && propertySet.height ? propertySet.height : this.defaultButtonHeight;
60
52
  button.color = propertySet && propertySet.color ? propertySet.color : this.defaultButtonColor;
@@ -69,27 +61,27 @@ var VirtualKeyboard = /** @class */ (function (_super) {
69
61
  button.shadowBlur = this.shadowBlur;
70
62
  button.shadowOffsetX = this.shadowOffsetX;
71
63
  button.shadowOffsetY = this.shadowOffsetY;
72
- button.onPointerUpObservable.add(function () {
73
- _this.onKeyPressObservable.notifyObservers(key);
64
+ button.onPointerUpObservable.add(() => {
65
+ this.onKeyPressObservable.notifyObservers(key);
74
66
  });
75
67
  return button;
76
- };
68
+ }
77
69
  /**
78
70
  * Adds a new row of keys
79
71
  * @param keys defines the list of keys to add
80
72
  * @param propertySets defines the associated property sets
81
73
  */
82
- VirtualKeyboard.prototype.addKeysRow = function (keys, propertySets) {
83
- var panel = new StackPanel();
74
+ addKeysRow(keys, propertySets) {
75
+ const panel = new StackPanel();
84
76
  panel.isVertical = false;
85
77
  panel.isFocusInvisible = true;
86
- var maxKey = null;
87
- for (var i = 0; i < keys.length; i++) {
88
- var properties = null;
78
+ let maxKey = null;
79
+ for (let i = 0; i < keys.length; i++) {
80
+ let properties = null;
89
81
  if (propertySets && propertySets.length === keys.length) {
90
82
  properties = propertySets[i];
91
83
  }
92
- var key = this._createKey(keys[i], properties);
84
+ const key = this._createKey(keys[i], properties);
93
85
  if (!maxKey || key.heightInPixels > maxKey.heightInPixels) {
94
86
  maxKey = key;
95
87
  }
@@ -97,27 +89,27 @@ var VirtualKeyboard = /** @class */ (function (_super) {
97
89
  }
98
90
  panel.height = maxKey ? maxKey.height : this.defaultButtonHeight;
99
91
  this.addControl(panel);
100
- };
92
+ }
101
93
  /**
102
94
  * Set the shift key to a specific state
103
95
  * @param shiftState defines the new shift state
104
96
  */
105
- VirtualKeyboard.prototype.applyShiftState = function (shiftState) {
97
+ applyShiftState(shiftState) {
106
98
  if (!this.children) {
107
99
  return;
108
100
  }
109
- for (var i = 0; i < this.children.length; i++) {
110
- var row = this.children[i];
101
+ for (let i = 0; i < this.children.length; i++) {
102
+ const row = this.children[i];
111
103
  if (!row || !row.children) {
112
104
  continue;
113
105
  }
114
- var rowContainer = row;
115
- for (var j = 0; j < rowContainer.children.length; j++) {
116
- var button = rowContainer.children[j];
106
+ const rowContainer = row;
107
+ for (let j = 0; j < rowContainer.children.length; j++) {
108
+ const button = rowContainer.children[j];
117
109
  if (!button || !button.children[0]) {
118
110
  continue;
119
111
  }
120
- var button_tblock = button.children[0];
112
+ const button_tblock = button.children[0];
121
113
  if (button_tblock.text === "\u21E7") {
122
114
  button.color = shiftState ? this.shiftButtonColor : this.defaultButtonColor;
123
115
  button.thickness = shiftState > 1 ? this.selectedShiftThickness : 0;
@@ -125,66 +117,61 @@ var VirtualKeyboard = /** @class */ (function (_super) {
125
117
  button_tblock.text = shiftState > 0 ? button_tblock.text.toUpperCase() : button_tblock.text.toLowerCase();
126
118
  }
127
119
  }
128
- };
129
- Object.defineProperty(VirtualKeyboard.prototype, "connectedInputText", {
130
- /** Gets the input text control currently attached to the keyboard */
131
- get: function () {
132
- return this._currentlyConnectedInputText;
133
- },
134
- enumerable: false,
135
- configurable: true
136
- });
120
+ }
121
+ /** Gets the input text control currently attached to the keyboard */
122
+ get connectedInputText() {
123
+ return this._currentlyConnectedInputText;
124
+ }
137
125
  /**
138
126
  * Connects the keyboard with an input text control
139
127
  *
140
128
  * @param input defines the target control
141
129
  */
142
- VirtualKeyboard.prototype.connect = function (input) {
143
- var _this = this;
144
- var inputTextAlreadyConnected = this._connectedInputTexts.some(function (a) { return a.input === input; });
130
+ connect(input) {
131
+ const inputTextAlreadyConnected = this._connectedInputTexts.some((a) => a.input === input);
145
132
  if (inputTextAlreadyConnected) {
146
133
  return;
147
134
  }
148
135
  if (this._onKeyPressObserver === null) {
149
- this._onKeyPressObserver = this.onKeyPressObservable.add(function (key) {
150
- if (!_this._currentlyConnectedInputText) {
136
+ this._onKeyPressObserver = this.onKeyPressObservable.add((key) => {
137
+ if (!this._currentlyConnectedInputText) {
151
138
  return;
152
139
  }
153
- _this._currentlyConnectedInputText._host.focusedControl = _this._currentlyConnectedInputText;
140
+ this._currentlyConnectedInputText._host.focusedControl = this._currentlyConnectedInputText;
154
141
  switch (key) {
155
142
  case "\u21E7":
156
- _this.shiftState++;
157
- if (_this.shiftState > 2) {
158
- _this.shiftState = 0;
143
+ this.shiftState++;
144
+ if (this.shiftState > 2) {
145
+ this.shiftState = 0;
159
146
  }
160
- _this.applyShiftState(_this.shiftState);
147
+ this.applyShiftState(this.shiftState);
161
148
  return;
162
149
  case "\u2190":
163
- if (_this._currentlyConnectedInputText instanceof InputTextArea) {
164
- _this._currentlyConnectedInputText.alternativeProcessKey("Backspace");
150
+ if (this._currentlyConnectedInputText instanceof InputTextArea) {
151
+ this._currentlyConnectedInputText.alternativeProcessKey("Backspace");
165
152
  }
166
153
  else {
167
- _this._currentlyConnectedInputText.processKey(8);
154
+ this._currentlyConnectedInputText.processKey(8);
168
155
  }
169
156
  return;
170
157
  case "\u21B5":
171
- if (_this._currentlyConnectedInputText instanceof InputTextArea) {
172
- _this._currentlyConnectedInputText.alternativeProcessKey("Enter");
158
+ if (this._currentlyConnectedInputText instanceof InputTextArea) {
159
+ this._currentlyConnectedInputText.alternativeProcessKey("Enter");
173
160
  }
174
161
  else {
175
- _this._currentlyConnectedInputText.processKey(13);
162
+ this._currentlyConnectedInputText.processKey(13);
176
163
  }
177
164
  return;
178
165
  }
179
- if (_this._currentlyConnectedInputText instanceof InputTextArea) {
180
- _this._currentlyConnectedInputText.alternativeProcessKey("", _this.shiftState ? key.toUpperCase() : key);
166
+ if (this._currentlyConnectedInputText instanceof InputTextArea) {
167
+ this._currentlyConnectedInputText.alternativeProcessKey("", this.shiftState ? key.toUpperCase() : key);
181
168
  }
182
169
  else {
183
- _this._currentlyConnectedInputText.processKey(-1, _this.shiftState ? key.toUpperCase() : key);
170
+ this._currentlyConnectedInputText.processKey(-1, this.shiftState ? key.toUpperCase() : key);
184
171
  }
185
- if (_this.shiftState === 1) {
186
- _this.shiftState = 0;
187
- _this.applyShiftState(_this.shiftState);
172
+ if (this.shiftState === 1) {
173
+ this.shiftState = 0;
174
+ this.applyShiftState(this.shiftState);
188
175
  }
189
176
  });
190
177
  }
@@ -192,43 +179,42 @@ var VirtualKeyboard = /** @class */ (function (_super) {
192
179
  this._currentlyConnectedInputText = input;
193
180
  input._connectedVirtualKeyboard = this;
194
181
  // Events hooking
195
- var onFocusObserver = input.onFocusObservable.add(function () {
196
- _this._currentlyConnectedInputText = input;
197
- input._connectedVirtualKeyboard = _this;
198
- _this.isVisible = true;
182
+ const onFocusObserver = input.onFocusObservable.add(() => {
183
+ this._currentlyConnectedInputText = input;
184
+ input._connectedVirtualKeyboard = this;
185
+ this.isVisible = true;
199
186
  });
200
- var onBlurObserver = input.onBlurObservable.add(function () {
187
+ const onBlurObserver = input.onBlurObservable.add(() => {
201
188
  input._connectedVirtualKeyboard = null;
202
- _this._currentlyConnectedInputText = null;
203
- _this.isVisible = false;
189
+ this._currentlyConnectedInputText = null;
190
+ this.isVisible = false;
204
191
  });
205
192
  this._connectedInputTexts.push({
206
- input: input,
207
- onBlurObserver: onBlurObserver,
208
- onFocusObserver: onFocusObserver,
193
+ input,
194
+ onBlurObserver,
195
+ onFocusObserver,
209
196
  });
210
- };
197
+ }
211
198
  /**
212
199
  * Disconnects the keyboard from connected InputText controls
213
200
  *
214
201
  * @param input optionally defines a target control, otherwise all are disconnected
215
202
  */
216
- VirtualKeyboard.prototype.disconnect = function (input) {
217
- var _this = this;
203
+ disconnect(input) {
218
204
  if (input) {
219
205
  // .find not available on IE
220
- var filtered = this._connectedInputTexts.filter(function (a) { return a.input === input; });
206
+ const filtered = this._connectedInputTexts.filter((a) => a.input === input);
221
207
  if (filtered.length === 1) {
222
208
  this._removeConnectedInputObservables(filtered[0]);
223
- this._connectedInputTexts = this._connectedInputTexts.filter(function (a) { return a.input !== input; });
209
+ this._connectedInputTexts = this._connectedInputTexts.filter((a) => a.input !== input);
224
210
  if (this._currentlyConnectedInputText === input) {
225
211
  this._currentlyConnectedInputText = null;
226
212
  }
227
213
  }
228
214
  }
229
215
  else {
230
- this._connectedInputTexts.forEach(function (connectedInputText) {
231
- _this._removeConnectedInputObservables(connectedInputText);
216
+ this._connectedInputTexts.forEach((connectedInputText) => {
217
+ this._removeConnectedInputObservables(connectedInputText);
232
218
  });
233
219
  this._connectedInputTexts.length = 0;
234
220
  }
@@ -237,19 +223,19 @@ var VirtualKeyboard = /** @class */ (function (_super) {
237
223
  this.onKeyPressObservable.remove(this._onKeyPressObserver);
238
224
  this._onKeyPressObserver = null;
239
225
  }
240
- };
241
- VirtualKeyboard.prototype._removeConnectedInputObservables = function (connectedInputText) {
226
+ }
227
+ _removeConnectedInputObservables(connectedInputText) {
242
228
  connectedInputText.input._connectedVirtualKeyboard = null;
243
229
  connectedInputText.input.onFocusObservable.remove(connectedInputText.onFocusObserver);
244
230
  connectedInputText.input.onBlurObservable.remove(connectedInputText.onBlurObserver);
245
- };
231
+ }
246
232
  /**
247
233
  * Release all resources
248
234
  */
249
- VirtualKeyboard.prototype.dispose = function () {
250
- _super.prototype.dispose.call(this);
235
+ dispose() {
236
+ super.dispose();
251
237
  this.disconnect();
252
- };
238
+ }
253
239
  // Statics
254
240
  /**
255
241
  * Creates a new keyboard using a default layout
@@ -257,43 +243,35 @@ var VirtualKeyboard = /** @class */ (function (_super) {
257
243
  * @param name defines control name
258
244
  * @returns a new VirtualKeyboard
259
245
  */
260
- VirtualKeyboard.CreateDefaultLayout = function (name) {
261
- var returnValue = new VirtualKeyboard(name);
246
+ static CreateDefaultLayout(name) {
247
+ const returnValue = new VirtualKeyboard(name);
262
248
  returnValue.addKeysRow(["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "\u2190"]);
263
249
  returnValue.addKeysRow(["q", "w", "e", "r", "t", "y", "u", "i", "o", "p"]);
264
250
  returnValue.addKeysRow(["a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "\u21B5"]);
265
251
  returnValue.addKeysRow(["\u21E7", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/"]);
266
252
  returnValue.addKeysRow([" "], [{ width: "200px" }]);
267
253
  return returnValue;
268
- };
254
+ }
269
255
  /**
270
256
  * @param serializedObject
271
257
  * @param host
272
258
  * @hidden
273
259
  */
274
- VirtualKeyboard.prototype._parseFromContent = function (serializedObject, host) {
275
- var _this = this;
276
- _super.prototype._parseFromContent.call(this, serializedObject, host);
277
- for (var _i = 0, _a = this.children; _i < _a.length; _i++) {
278
- var row = _a[_i];
260
+ _parseFromContent(serializedObject, host) {
261
+ super._parseFromContent(serializedObject, host);
262
+ for (const row of this.children) {
279
263
  if (row.getClassName() === "StackPanel") {
280
- var stackPanel = row;
281
- var _loop_1 = function (key) {
264
+ const stackPanel = row;
265
+ for (const key of stackPanel.children) {
282
266
  if (key.getClassName() === "Button" && key.name) {
283
- key.onPointerUpObservable.add(function () {
284
- _this.onKeyPressObservable.notifyObservers(key.name);
267
+ key.onPointerUpObservable.add(() => {
268
+ this.onKeyPressObservable.notifyObservers(key.name);
285
269
  });
286
270
  }
287
- };
288
- for (var _b = 0, _c = stackPanel.children; _b < _c.length; _b++) {
289
- var key = _c[_b];
290
- _loop_1(key);
291
271
  }
292
272
  }
293
273
  }
294
- };
295
- return VirtualKeyboard;
296
- }(StackPanel));
297
- export { VirtualKeyboard };
274
+ }
275
+ }
298
276
  RegisterClass("BABYLON.GUI.VirtualKeyboard", VirtualKeyboard);
299
277
  //# sourceMappingURL=virtualKeyboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtualKeyboard.js","sourceRoot":"","sources":["../../../../../../lts/gui/generated/2D/controls/virtualKeyboard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { Observable } from \"core/Misc/observable\";\r\n\r\nimport { StackPanel } from \"./stackPanel\";\r\nimport { Button } from \"./button\";\r\nimport type { Container } from \"./container\";\r\nimport type { TextBlock } from \"./textBlock\";\r\nimport type { InputText } from \"./inputText\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport type { AdvancedDynamicTexture } from \"../advancedDynamicTexture\";\r\nimport { InputTextArea } from \"./inputTextArea\";\r\n\r\n/**\r\n * Class used to store key control properties\r\n */\r\nexport class KeyPropertySet {\r\n /** Width */\r\n width?: string;\r\n /** Height */\r\n height?: string;\r\n /** Left padding */\r\n paddingLeft?: string;\r\n /** Right padding */\r\n paddingRight?: string;\r\n /** Top padding */\r\n paddingTop?: string;\r\n /** Bottom padding */\r\n paddingBottom?: string;\r\n /** Foreground color */\r\n color?: string;\r\n /** Background color */\r\n background?: string;\r\n}\r\n\r\ntype ConnectedInputText = {\r\n input: InputText;\r\n onFocusObserver: Nullable<Observer<InputText>>;\r\n onBlurObserver: Nullable<Observer<InputText>>;\r\n};\r\n\r\n/**\r\n * Class used to create virtual keyboard\r\n */\r\nexport class VirtualKeyboard extends StackPanel {\r\n /** Observable raised when a key is pressed */\r\n public onKeyPressObservable = new Observable<string>();\r\n\r\n /** Gets or sets default key button width */\r\n public defaultButtonWidth = \"40px\";\r\n /** Gets or sets default key button height */\r\n public defaultButtonHeight = \"40px\";\r\n\r\n /** Gets or sets default key button left padding */\r\n public defaultButtonPaddingLeft = \"2px\";\r\n /** Gets or sets default key button right padding */\r\n public defaultButtonPaddingRight = \"2px\";\r\n /** Gets or sets default key button top padding */\r\n public defaultButtonPaddingTop = \"2px\";\r\n /** Gets or sets default key button bottom padding */\r\n public defaultButtonPaddingBottom = \"2px\";\r\n\r\n /** Gets or sets default key button foreground color */\r\n public defaultButtonColor = \"#DDD\";\r\n /** Gets or sets default key button background color */\r\n public defaultButtonBackground = \"#070707\";\r\n\r\n /** Gets or sets shift button foreground color */\r\n public shiftButtonColor = \"#7799FF\";\r\n /** Gets or sets shift button thickness*/\r\n public selectedShiftThickness = 1;\r\n\r\n /** Gets shift key state */\r\n public shiftState = 0;\r\n\r\n protected _getTypeName(): string {\r\n return \"VirtualKeyboard\";\r\n }\r\n\r\n private _createKey(key: string, propertySet: Nullable<KeyPropertySet>) {\r\n const button = Button.CreateSimpleButton(key, key);\r\n\r\n button.width = propertySet && propertySet.width ? propertySet.width : this.defaultButtonWidth;\r\n button.height = propertySet && propertySet.height ? propertySet.height : this.defaultButtonHeight;\r\n button.color = propertySet && propertySet.color ? propertySet.color : this.defaultButtonColor;\r\n button.background = propertySet && propertySet.background ? propertySet.background : this.defaultButtonBackground;\r\n button.paddingLeft = propertySet && propertySet.paddingLeft ? propertySet.paddingLeft : this.defaultButtonPaddingLeft;\r\n button.paddingRight = propertySet && propertySet.paddingRight ? propertySet.paddingRight : this.defaultButtonPaddingRight;\r\n button.paddingTop = propertySet && propertySet.paddingTop ? propertySet.paddingTop : this.defaultButtonPaddingTop;\r\n button.paddingBottom = propertySet && propertySet.paddingBottom ? propertySet.paddingBottom : this.defaultButtonPaddingBottom;\r\n\r\n button.thickness = 0;\r\n button.isFocusInvisible = true;\r\n\r\n button.shadowColor = this.shadowColor;\r\n button.shadowBlur = this.shadowBlur;\r\n button.shadowOffsetX = this.shadowOffsetX;\r\n button.shadowOffsetY = this.shadowOffsetY;\r\n\r\n button.onPointerUpObservable.add(() => {\r\n this.onKeyPressObservable.notifyObservers(key);\r\n });\r\n\r\n return button;\r\n }\r\n\r\n /**\r\n * Adds a new row of keys\r\n * @param keys defines the list of keys to add\r\n * @param propertySets defines the associated property sets\r\n */\r\n public addKeysRow(keys: Array<string>, propertySets?: Array<KeyPropertySet>): void {\r\n const panel = new StackPanel();\r\n panel.isVertical = false;\r\n panel.isFocusInvisible = true;\r\n\r\n let maxKey: Nullable<Button> = null;\r\n for (let i = 0; i < keys.length; i++) {\r\n let properties = null;\r\n\r\n if (propertySets && propertySets.length === keys.length) {\r\n properties = propertySets[i];\r\n }\r\n\r\n const key = this._createKey(keys[i], properties);\r\n if (!maxKey || key.heightInPixels > maxKey.heightInPixels) {\r\n maxKey = key;\r\n }\r\n\r\n panel.addControl(key);\r\n }\r\n\r\n panel.height = maxKey ? maxKey.height : this.defaultButtonHeight;\r\n\r\n this.addControl(panel);\r\n }\r\n\r\n /**\r\n * Set the shift key to a specific state\r\n * @param shiftState defines the new shift state\r\n */\r\n public applyShiftState(shiftState: number): void {\r\n if (!this.children) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < this.children.length; i++) {\r\n const row = this.children[i];\r\n if (!row || !(<Container>row).children) {\r\n continue;\r\n }\r\n\r\n const rowContainer = <Container>row;\r\n for (let j = 0; j < rowContainer.children.length; j++) {\r\n const button = rowContainer.children[j] as Button;\r\n\r\n if (!button || !button.children[0]) {\r\n continue;\r\n }\r\n\r\n const button_tblock = button.children[0] as TextBlock;\r\n\r\n if (button_tblock.text === \"\\u21E7\") {\r\n button.color = shiftState ? this.shiftButtonColor : this.defaultButtonColor;\r\n button.thickness = shiftState > 1 ? this.selectedShiftThickness : 0;\r\n }\r\n\r\n button_tblock.text = shiftState > 0 ? button_tblock.text.toUpperCase() : button_tblock.text.toLowerCase();\r\n }\r\n }\r\n }\r\n\r\n private _currentlyConnectedInputText: Nullable<InputText | InputTextArea> = null;\r\n private _connectedInputTexts: ConnectedInputText[] = [];\r\n private _onKeyPressObserver: Nullable<Observer<string>> = null;\r\n\r\n /** Gets the input text control currently attached to the keyboard */\r\n public get connectedInputText(): Nullable<InputText | InputTextArea> {\r\n return this._currentlyConnectedInputText;\r\n }\r\n\r\n /**\r\n * Connects the keyboard with an input text control\r\n *\r\n * @param input defines the target control\r\n */\r\n public connect(input: InputText): void {\r\n const inputTextAlreadyConnected = this._connectedInputTexts.some((a) => a.input === input);\r\n if (inputTextAlreadyConnected) {\r\n return;\r\n }\r\n\r\n if (this._onKeyPressObserver === null) {\r\n this._onKeyPressObserver = this.onKeyPressObservable.add((key) => {\r\n if (!this._currentlyConnectedInputText) {\r\n return;\r\n }\r\n\r\n this._currentlyConnectedInputText._host.focusedControl = this._currentlyConnectedInputText;\r\n\r\n switch (key) {\r\n case \"\\u21E7\":\r\n this.shiftState++;\r\n if (this.shiftState > 2) {\r\n this.shiftState = 0;\r\n }\r\n this.applyShiftState(this.shiftState);\r\n return;\r\n case \"\\u2190\":\r\n if (this._currentlyConnectedInputText instanceof InputTextArea) {\r\n this._currentlyConnectedInputText.alternativeProcessKey(\"Backspace\");\r\n } else {\r\n this._currentlyConnectedInputText.processKey(8);\r\n }\r\n return;\r\n case \"\\u21B5\":\r\n if (this._currentlyConnectedInputText instanceof InputTextArea) {\r\n this._currentlyConnectedInputText.alternativeProcessKey(\"Enter\");\r\n } else {\r\n this._currentlyConnectedInputText.processKey(13);\r\n }\r\n return;\r\n }\r\n if (this._currentlyConnectedInputText instanceof InputTextArea) {\r\n this._currentlyConnectedInputText.alternativeProcessKey(\"\", this.shiftState ? key.toUpperCase() : key);\r\n } else {\r\n this._currentlyConnectedInputText.processKey(-1, this.shiftState ? key.toUpperCase() : key);\r\n }\r\n\r\n if (this.shiftState === 1) {\r\n this.shiftState = 0;\r\n this.applyShiftState(this.shiftState);\r\n }\r\n });\r\n }\r\n\r\n this.isVisible = false;\r\n this._currentlyConnectedInputText = input;\r\n input._connectedVirtualKeyboard = this;\r\n\r\n // Events hooking\r\n const onFocusObserver: Nullable<Observer<InputText>> = input.onFocusObservable.add(() => {\r\n this._currentlyConnectedInputText = input;\r\n input._connectedVirtualKeyboard = this;\r\n this.isVisible = true;\r\n });\r\n\r\n const onBlurObserver: Nullable<Observer<InputText>> = input.onBlurObservable.add(() => {\r\n input._connectedVirtualKeyboard = null;\r\n this._currentlyConnectedInputText = null;\r\n this.isVisible = false;\r\n });\r\n\r\n this._connectedInputTexts.push({\r\n input,\r\n onBlurObserver,\r\n onFocusObserver,\r\n });\r\n }\r\n\r\n /**\r\n * Disconnects the keyboard from connected InputText controls\r\n *\r\n * @param input optionally defines a target control, otherwise all are disconnected\r\n */\r\n public disconnect(input?: InputText): void {\r\n if (input) {\r\n // .find not available on IE\r\n const filtered = this._connectedInputTexts.filter((a) => a.input === input);\r\n if (filtered.length === 1) {\r\n this._removeConnectedInputObservables(filtered[0]);\r\n\r\n this._connectedInputTexts = this._connectedInputTexts.filter((a) => a.input !== input);\r\n if (this._currentlyConnectedInputText === input) {\r\n this._currentlyConnectedInputText = null;\r\n }\r\n }\r\n } else {\r\n this._connectedInputTexts.forEach((connectedInputText: ConnectedInputText) => {\r\n this._removeConnectedInputObservables(connectedInputText);\r\n });\r\n this._connectedInputTexts.length = 0;\r\n }\r\n\r\n if (this._connectedInputTexts.length === 0) {\r\n this._currentlyConnectedInputText = null;\r\n this.onKeyPressObservable.remove(this._onKeyPressObserver);\r\n this._onKeyPressObserver = null;\r\n }\r\n }\r\n\r\n private _removeConnectedInputObservables(connectedInputText: ConnectedInputText): void {\r\n connectedInputText.input._connectedVirtualKeyboard = null;\r\n connectedInputText.input.onFocusObservable.remove(connectedInputText.onFocusObserver);\r\n connectedInputText.input.onBlurObservable.remove(connectedInputText.onBlurObserver);\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose(): void {\r\n super.dispose();\r\n\r\n this.disconnect();\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Creates a new keyboard using a default layout\r\n *\r\n * @param name defines control name\r\n * @returns a new VirtualKeyboard\r\n */\r\n public static CreateDefaultLayout(name?: string): VirtualKeyboard {\r\n const returnValue = new VirtualKeyboard(name);\r\n\r\n returnValue.addKeysRow([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"0\", \"\\u2190\"]);\r\n returnValue.addKeysRow([\"q\", \"w\", \"e\", \"r\", \"t\", \"y\", \"u\", \"i\", \"o\", \"p\"]);\r\n returnValue.addKeysRow([\"a\", \"s\", \"d\", \"f\", \"g\", \"h\", \"j\", \"k\", \"l\", \";\", \"'\", \"\\u21B5\"]);\r\n returnValue.addKeysRow([\"\\u21E7\", \"z\", \"x\", \"c\", \"v\", \"b\", \"n\", \"m\", \",\", \".\", \"/\"]);\r\n returnValue.addKeysRow([\" \"], [{ width: \"200px\" }]);\r\n\r\n return returnValue;\r\n }\r\n\r\n /**\r\n * @param serializedObject\r\n * @param host\r\n * @hidden\r\n */\r\n public _parseFromContent(serializedObject: any, host: AdvancedDynamicTexture) {\r\n super._parseFromContent(serializedObject, host);\r\n for (const row of this.children) {\r\n if (row.getClassName() === \"StackPanel\") {\r\n const stackPanel = row as StackPanel;\r\n for (const key of stackPanel.children) {\r\n if (key.getClassName() === \"Button\" && key.name) {\r\n key.onPointerUpObservable.add(() => {\r\n this.onKeyPressObservable.notifyObservers(key.name as string);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GUI.VirtualKeyboard\", VirtualKeyboard);\r\n"]}
1
+ {"version":3,"file":"virtualKeyboard.js","sourceRoot":"","sources":["../../../../../../lts/gui/generated/2D/controls/virtualKeyboard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { Observable } from \"core/Misc/observable\";\r\n\r\nimport { StackPanel } from \"./stackPanel\";\r\nimport { Button } from \"./button\";\r\nimport type { Container } from \"./container\";\r\nimport type { TextBlock } from \"./textBlock\";\r\nimport type { InputText } from \"./inputText\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport type { AdvancedDynamicTexture } from \"../advancedDynamicTexture\";\r\nimport { InputTextArea } from \"./inputTextArea\";\r\n\r\n/**\r\n * Class used to store key control properties\r\n */\r\nexport class KeyPropertySet {\r\n /** Width */\r\n width?: string;\r\n /** Height */\r\n height?: string;\r\n /** Left padding */\r\n paddingLeft?: string;\r\n /** Right padding */\r\n paddingRight?: string;\r\n /** Top padding */\r\n paddingTop?: string;\r\n /** Bottom padding */\r\n paddingBottom?: string;\r\n /** Foreground color */\r\n color?: string;\r\n /** Background color */\r\n background?: string;\r\n}\r\n\r\ntype ConnectedInputText = {\r\n input: InputText;\r\n onFocusObserver: Nullable<Observer<InputText>>;\r\n onBlurObserver: Nullable<Observer<InputText>>;\r\n};\r\n\r\n/**\r\n * Class used to create virtual keyboard\r\n */\r\nexport class VirtualKeyboard extends StackPanel {\r\n /** Observable raised when a key is pressed */\r\n public onKeyPressObservable = new Observable<string>();\r\n\r\n /** Gets or sets default key button width */\r\n public defaultButtonWidth = \"40px\";\r\n /** Gets or sets default key button height */\r\n public defaultButtonHeight = \"40px\";\r\n\r\n /** Gets or sets default key button left padding */\r\n public defaultButtonPaddingLeft = \"2px\";\r\n /** Gets or sets default key button right padding */\r\n public defaultButtonPaddingRight = \"2px\";\r\n /** Gets or sets default key button top padding */\r\n public defaultButtonPaddingTop = \"2px\";\r\n /** Gets or sets default key button bottom padding */\r\n public defaultButtonPaddingBottom = \"2px\";\r\n\r\n /** Gets or sets default key button foreground color */\r\n public defaultButtonColor = \"#DDD\";\r\n /** Gets or sets default key button background color */\r\n public defaultButtonBackground = \"#070707\";\r\n\r\n /** Gets or sets shift button foreground color */\r\n public shiftButtonColor = \"#7799FF\";\r\n /** Gets or sets shift button thickness*/\r\n public selectedShiftThickness = 1;\r\n\r\n /** Gets shift key state */\r\n public shiftState = 0;\r\n\r\n protected _getTypeName(): string {\r\n return \"VirtualKeyboard\";\r\n }\r\n\r\n private _createKey(key: string, propertySet: Nullable<KeyPropertySet>) {\r\n const button = Button.CreateSimpleButton(key, key);\r\n\r\n button.width = propertySet && propertySet.width ? propertySet.width : this.defaultButtonWidth;\r\n button.height = propertySet && propertySet.height ? propertySet.height : this.defaultButtonHeight;\r\n button.color = propertySet && propertySet.color ? propertySet.color : this.defaultButtonColor;\r\n button.background = propertySet && propertySet.background ? propertySet.background : this.defaultButtonBackground;\r\n button.paddingLeft = propertySet && propertySet.paddingLeft ? propertySet.paddingLeft : this.defaultButtonPaddingLeft;\r\n button.paddingRight = propertySet && propertySet.paddingRight ? propertySet.paddingRight : this.defaultButtonPaddingRight;\r\n button.paddingTop = propertySet && propertySet.paddingTop ? propertySet.paddingTop : this.defaultButtonPaddingTop;\r\n button.paddingBottom = propertySet && propertySet.paddingBottom ? propertySet.paddingBottom : this.defaultButtonPaddingBottom;\r\n\r\n button.thickness = 0;\r\n button.isFocusInvisible = true;\r\n\r\n button.shadowColor = this.shadowColor;\r\n button.shadowBlur = this.shadowBlur;\r\n button.shadowOffsetX = this.shadowOffsetX;\r\n button.shadowOffsetY = this.shadowOffsetY;\r\n\r\n button.onPointerUpObservable.add(() => {\r\n this.onKeyPressObservable.notifyObservers(key);\r\n });\r\n\r\n return button;\r\n }\r\n\r\n /**\r\n * Adds a new row of keys\r\n * @param keys defines the list of keys to add\r\n * @param propertySets defines the associated property sets\r\n */\r\n public addKeysRow(keys: Array<string>, propertySets?: Array<KeyPropertySet>): void {\r\n const panel = new StackPanel();\r\n panel.isVertical = false;\r\n panel.isFocusInvisible = true;\r\n\r\n let maxKey: Nullable<Button> = null;\r\n for (let i = 0; i < keys.length; i++) {\r\n let properties = null;\r\n\r\n if (propertySets && propertySets.length === keys.length) {\r\n properties = propertySets[i];\r\n }\r\n\r\n const key = this._createKey(keys[i], properties);\r\n if (!maxKey || key.heightInPixels > maxKey.heightInPixels) {\r\n maxKey = key;\r\n }\r\n\r\n panel.addControl(key);\r\n }\r\n\r\n panel.height = maxKey ? maxKey.height : this.defaultButtonHeight;\r\n\r\n this.addControl(panel);\r\n }\r\n\r\n /**\r\n * Set the shift key to a specific state\r\n * @param shiftState defines the new shift state\r\n */\r\n public applyShiftState(shiftState: number): void {\r\n if (!this.children) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < this.children.length; i++) {\r\n const row = this.children[i];\r\n if (!row || !(<Container>row).children) {\r\n continue;\r\n }\r\n\r\n const rowContainer = <Container>row;\r\n for (let j = 0; j < rowContainer.children.length; j++) {\r\n const button = rowContainer.children[j] as Button;\r\n\r\n if (!button || !button.children[0]) {\r\n continue;\r\n }\r\n\r\n const button_tblock = button.children[0] as TextBlock;\r\n\r\n if (button_tblock.text === \"\\u21E7\") {\r\n button.color = shiftState ? this.shiftButtonColor : this.defaultButtonColor;\r\n button.thickness = shiftState > 1 ? this.selectedShiftThickness : 0;\r\n }\r\n\r\n button_tblock.text = shiftState > 0 ? button_tblock.text.toUpperCase() : button_tblock.text.toLowerCase();\r\n }\r\n }\r\n }\r\n\r\n private _currentlyConnectedInputText: Nullable<InputText | InputTextArea> = null;\r\n private _connectedInputTexts: ConnectedInputText[] = [];\r\n private _onKeyPressObserver: Nullable<Observer<string>> = null;\r\n\r\n /** Gets the input text control currently attached to the keyboard */\r\n public get connectedInputText(): Nullable<InputText | InputTextArea> {\r\n return this._currentlyConnectedInputText;\r\n }\r\n\r\n /**\r\n * Connects the keyboard with an input text control\r\n *\r\n * @param input defines the target control\r\n */\r\n public connect(input: InputText): void {\r\n const inputTextAlreadyConnected = this._connectedInputTexts.some((a) => a.input === input);\r\n if (inputTextAlreadyConnected) {\r\n return;\r\n }\r\n\r\n if (this._onKeyPressObserver === null) {\r\n this._onKeyPressObserver = this.onKeyPressObservable.add((key) => {\r\n if (!this._currentlyConnectedInputText) {\r\n return;\r\n }\r\n\r\n this._currentlyConnectedInputText._host.focusedControl = this._currentlyConnectedInputText;\r\n\r\n switch (key) {\r\n case \"\\u21E7\":\r\n this.shiftState++;\r\n if (this.shiftState > 2) {\r\n this.shiftState = 0;\r\n }\r\n this.applyShiftState(this.shiftState);\r\n return;\r\n case \"\\u2190\":\r\n if (this._currentlyConnectedInputText instanceof InputTextArea) {\r\n this._currentlyConnectedInputText.alternativeProcessKey(\"Backspace\");\r\n } else {\r\n this._currentlyConnectedInputText.processKey(8);\r\n }\r\n return;\r\n case \"\\u21B5\":\r\n if (this._currentlyConnectedInputText instanceof InputTextArea) {\r\n this._currentlyConnectedInputText.alternativeProcessKey(\"Enter\");\r\n } else {\r\n this._currentlyConnectedInputText.processKey(13);\r\n }\r\n return;\r\n }\r\n if (this._currentlyConnectedInputText instanceof InputTextArea) {\r\n this._currentlyConnectedInputText.alternativeProcessKey(\"\", this.shiftState ? key.toUpperCase() : key);\r\n } else {\r\n this._currentlyConnectedInputText.processKey(-1, this.shiftState ? key.toUpperCase() : key);\r\n }\r\n\r\n if (this.shiftState === 1) {\r\n this.shiftState = 0;\r\n this.applyShiftState(this.shiftState);\r\n }\r\n });\r\n }\r\n\r\n this.isVisible = false;\r\n this._currentlyConnectedInputText = input;\r\n input._connectedVirtualKeyboard = this;\r\n\r\n // Events hooking\r\n const onFocusObserver: Nullable<Observer<InputText>> = input.onFocusObservable.add(() => {\r\n this._currentlyConnectedInputText = input;\r\n input._connectedVirtualKeyboard = this;\r\n this.isVisible = true;\r\n });\r\n\r\n const onBlurObserver: Nullable<Observer<InputText>> = input.onBlurObservable.add(() => {\r\n input._connectedVirtualKeyboard = null;\r\n this._currentlyConnectedInputText = null;\r\n this.isVisible = false;\r\n });\r\n\r\n this._connectedInputTexts.push({\r\n input,\r\n onBlurObserver,\r\n onFocusObserver,\r\n });\r\n }\r\n\r\n /**\r\n * Disconnects the keyboard from connected InputText controls\r\n *\r\n * @param input optionally defines a target control, otherwise all are disconnected\r\n */\r\n public disconnect(input?: InputText): void {\r\n if (input) {\r\n // .find not available on IE\r\n const filtered = this._connectedInputTexts.filter((a) => a.input === input);\r\n if (filtered.length === 1) {\r\n this._removeConnectedInputObservables(filtered[0]);\r\n\r\n this._connectedInputTexts = this._connectedInputTexts.filter((a) => a.input !== input);\r\n if (this._currentlyConnectedInputText === input) {\r\n this._currentlyConnectedInputText = null;\r\n }\r\n }\r\n } else {\r\n this._connectedInputTexts.forEach((connectedInputText: ConnectedInputText) => {\r\n this._removeConnectedInputObservables(connectedInputText);\r\n });\r\n this._connectedInputTexts.length = 0;\r\n }\r\n\r\n if (this._connectedInputTexts.length === 0) {\r\n this._currentlyConnectedInputText = null;\r\n this.onKeyPressObservable.remove(this._onKeyPressObserver);\r\n this._onKeyPressObserver = null;\r\n }\r\n }\r\n\r\n private _removeConnectedInputObservables(connectedInputText: ConnectedInputText): void {\r\n connectedInputText.input._connectedVirtualKeyboard = null;\r\n connectedInputText.input.onFocusObservable.remove(connectedInputText.onFocusObserver);\r\n connectedInputText.input.onBlurObservable.remove(connectedInputText.onBlurObserver);\r\n }\r\n\r\n /**\r\n * Release all resources\r\n */\r\n public dispose(): void {\r\n super.dispose();\r\n\r\n this.disconnect();\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * Creates a new keyboard using a default layout\r\n *\r\n * @param name defines control name\r\n * @returns a new VirtualKeyboard\r\n */\r\n public static CreateDefaultLayout(name?: string): VirtualKeyboard {\r\n const returnValue = new VirtualKeyboard(name);\r\n\r\n returnValue.addKeysRow([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"0\", \"\\u2190\"]);\r\n returnValue.addKeysRow([\"q\", \"w\", \"e\", \"r\", \"t\", \"y\", \"u\", \"i\", \"o\", \"p\"]);\r\n returnValue.addKeysRow([\"a\", \"s\", \"d\", \"f\", \"g\", \"h\", \"j\", \"k\", \"l\", \";\", \"'\", \"\\u21B5\"]);\r\n returnValue.addKeysRow([\"\\u21E7\", \"z\", \"x\", \"c\", \"v\", \"b\", \"n\", \"m\", \",\", \".\", \"/\"]);\r\n returnValue.addKeysRow([\" \"], [{ width: \"200px\" }]);\r\n\r\n return returnValue;\r\n }\r\n\r\n /**\r\n * @param serializedObject\r\n * @param host\r\n * @hidden\r\n */\r\n public _parseFromContent(serializedObject: any, host: AdvancedDynamicTexture) {\r\n super._parseFromContent(serializedObject, host);\r\n for (const row of this.children) {\r\n if (row.getClassName() === \"StackPanel\") {\r\n const stackPanel = row as StackPanel;\r\n for (const key of stackPanel.children) {\r\n if (key.getClassName() === \"Button\" && key.name) {\r\n key.onPointerUpObservable.add(() => {\r\n this.onKeyPressObservable.notifyObservers(key.name as string);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GUI.VirtualKeyboard\", VirtualKeyboard);\r\n"]}