@babylonjs/gui 9.12.1 → 9.14.0

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 (283) hide show
  1. package/2D/FrameGraph/pure.d.ts +2 -0
  2. package/2D/FrameGraph/pure.js +3 -0
  3. package/2D/FrameGraph/pure.js.map +1 -0
  4. package/2D/FrameGraph/renderGraphGUIBlock.d.ts +3 -41
  5. package/2D/FrameGraph/renderGraphGUIBlock.js +5 -64
  6. package/2D/FrameGraph/renderGraphGUIBlock.js.map +1 -1
  7. package/2D/FrameGraph/renderGraphGUIBlock.pure.d.ts +48 -0
  8. package/2D/FrameGraph/renderGraphGUIBlock.pure.js +78 -0
  9. package/2D/FrameGraph/renderGraphGUIBlock.pure.js.map +1 -0
  10. package/2D/controls/button.d.ts +3 -107
  11. package/2D/controls/button.js +5 -243
  12. package/2D/controls/button.js.map +1 -1
  13. package/2D/controls/button.pure.d.ts +114 -0
  14. package/2D/controls/button.pure.js +257 -0
  15. package/2D/controls/button.pure.js.map +1 -0
  16. package/2D/controls/checkbox.d.ts +3 -51
  17. package/2D/controls/checkbox.js +5 -161
  18. package/2D/controls/checkbox.js.map +1 -1
  19. package/2D/controls/checkbox.pure.d.ts +58 -0
  20. package/2D/controls/checkbox.pure.js +175 -0
  21. package/2D/controls/checkbox.pure.js.map +1 -0
  22. package/2D/controls/colorpicker.d.ts +5 -101
  23. package/2D/controls/colorpicker.js +7 -1394
  24. package/2D/controls/colorpicker.js.map +1 -1
  25. package/2D/controls/colorpicker.pure.d.ts +106 -0
  26. package/2D/controls/colorpicker.pure.js +1406 -0
  27. package/2D/controls/colorpicker.pure.js.map +1 -0
  28. package/2D/controls/container.d.ts +3 -177
  29. package/2D/controls/container.js +5 -615
  30. package/2D/controls/container.js.map +1 -1
  31. package/2D/controls/container.pure.d.ts +184 -0
  32. package/2D/controls/container.pure.js +629 -0
  33. package/2D/controls/container.pure.js.map +1 -0
  34. package/2D/controls/control.d.ts +3 -944
  35. package/2D/controls/control.js +5 -2457
  36. package/2D/controls/control.js.map +1 -1
  37. package/2D/controls/control.pure.d.ts +951 -0
  38. package/2D/controls/control.pure.js +2471 -0
  39. package/2D/controls/control.pure.js.map +1 -0
  40. package/2D/controls/displayGrid.d.ts +5 -53
  41. package/2D/controls/displayGrid.js +7 -201
  42. package/2D/controls/displayGrid.js.map +1 -1
  43. package/2D/controls/displayGrid.pure.d.ts +58 -0
  44. package/2D/controls/displayGrid.pure.js +213 -0
  45. package/2D/controls/displayGrid.pure.js.map +1 -0
  46. package/2D/controls/ellipse.d.ts +5 -25
  47. package/2D/controls/ellipse.js +7 -92
  48. package/2D/controls/ellipse.js.map +1 -1
  49. package/2D/controls/ellipse.pure.d.ts +30 -0
  50. package/2D/controls/ellipse.pure.js +104 -0
  51. package/2D/controls/ellipse.pure.js.map +1 -0
  52. package/2D/controls/focusableButton.d.ts +3 -15
  53. package/2D/controls/focusableButton.js +5 -22
  54. package/2D/controls/focusableButton.js.map +1 -1
  55. package/2D/controls/focusableButton.pure.d.ts +22 -0
  56. package/2D/controls/focusableButton.pure.js +36 -0
  57. package/2D/controls/focusableButton.pure.js.map +1 -0
  58. package/2D/controls/gradient/LinearGradient.d.ts +3 -43
  59. package/2D/controls/gradient/LinearGradient.js +5 -70
  60. package/2D/controls/gradient/LinearGradient.js.map +1 -1
  61. package/2D/controls/gradient/LinearGradient.pure.d.ts +50 -0
  62. package/2D/controls/gradient/LinearGradient.pure.js +84 -0
  63. package/2D/controls/gradient/LinearGradient.pure.js.map +1 -0
  64. package/2D/controls/gradient/RadialGradient.d.ts +3 -51
  65. package/2D/controls/gradient/RadialGradient.js +5 -86
  66. package/2D/controls/gradient/RadialGradient.js.map +1 -1
  67. package/2D/controls/gradient/RadialGradient.pure.d.ts +58 -0
  68. package/2D/controls/gradient/RadialGradient.pure.js +100 -0
  69. package/2D/controls/gradient/RadialGradient.pure.js.map +1 -0
  70. package/2D/controls/gradient/pure.d.ts +3 -0
  71. package/2D/controls/gradient/pure.js +4 -0
  72. package/2D/controls/gradient/pure.js.map +1 -0
  73. package/2D/controls/grid.d.ts +3 -149
  74. package/2D/controls/grid.js +5 -525
  75. package/2D/controls/grid.js.map +1 -1
  76. package/2D/controls/grid.pure.d.ts +156 -0
  77. package/2D/controls/grid.pure.js +539 -0
  78. package/2D/controls/grid.pure.js.map +1 -0
  79. package/2D/controls/image.d.ts +3 -226
  80. package/2D/controls/image.js +5 -913
  81. package/2D/controls/image.js.map +1 -1
  82. package/2D/controls/image.pure.d.ts +233 -0
  83. package/2D/controls/image.pure.js +927 -0
  84. package/2D/controls/image.pure.js.map +1 -0
  85. package/2D/controls/inputPassword.d.ts +3 -7
  86. package/2D/controls/inputPassword.js +5 -19
  87. package/2D/controls/inputPassword.js.map +1 -1
  88. package/2D/controls/inputPassword.pure.d.ts +14 -0
  89. package/2D/controls/inputPassword.pure.js +33 -0
  90. package/2D/controls/inputPassword.pure.js.map +1 -0
  91. package/2D/controls/inputText.d.ts +3 -202
  92. package/2D/controls/inputText.js +5 -1050
  93. package/2D/controls/inputText.js.map +1 -1
  94. package/2D/controls/inputText.pure.d.ts +209 -0
  95. package/2D/controls/inputText.pure.js +1064 -0
  96. package/2D/controls/inputText.pure.js.map +1 -0
  97. package/2D/controls/inputTextArea.d.ts +3 -140
  98. package/2D/controls/inputTextArea.js +5 -1023
  99. package/2D/controls/inputTextArea.js.map +1 -1
  100. package/2D/controls/inputTextArea.pure.d.ts +147 -0
  101. package/2D/controls/inputTextArea.pure.js +1037 -0
  102. package/2D/controls/inputTextArea.pure.js.map +1 -0
  103. package/2D/controls/line.d.ts +5 -74
  104. package/2D/controls/line.js +7 -234
  105. package/2D/controls/line.js.map +1 -1
  106. package/2D/controls/line.pure.d.ts +79 -0
  107. package/2D/controls/line.pure.js +246 -0
  108. package/2D/controls/line.pure.js.map +1 -0
  109. package/2D/controls/multiLine.d.ts +3 -73
  110. package/2D/controls/multiLine.js +5 -234
  111. package/2D/controls/multiLine.js.map +1 -1
  112. package/2D/controls/multiLine.pure.d.ts +80 -0
  113. package/2D/controls/multiLine.pure.js +248 -0
  114. package/2D/controls/multiLine.pure.js.map +1 -0
  115. package/2D/controls/pure.d.ts +38 -0
  116. package/2D/controls/pure.js +39 -0
  117. package/2D/controls/pure.js.map +1 -0
  118. package/2D/controls/radioButton.d.ts +3 -47
  119. package/2D/controls/radioButton.js +5 -182
  120. package/2D/controls/radioButton.js.map +1 -1
  121. package/2D/controls/radioButton.pure.d.ts +54 -0
  122. package/2D/controls/radioButton.pure.js +196 -0
  123. package/2D/controls/radioButton.pure.js.map +1 -0
  124. package/2D/controls/rectangle.d.ts +5 -43
  125. package/2D/controls/rectangle.js +7 -205
  126. package/2D/controls/rectangle.js.map +1 -1
  127. package/2D/controls/rectangle.pure.d.ts +48 -0
  128. package/2D/controls/rectangle.pure.js +217 -0
  129. package/2D/controls/rectangle.pure.js.map +1 -0
  130. package/2D/controls/scrollViewers/pure.d.ts +2 -0
  131. package/2D/controls/scrollViewers/pure.js +3 -0
  132. package/2D/controls/scrollViewers/pure.js.map +1 -0
  133. package/2D/controls/scrollViewers/scrollViewer.d.ts +3 -176
  134. package/2D/controls/scrollViewers/scrollViewer.js +5 -584
  135. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  136. package/2D/controls/scrollViewers/scrollViewer.pure.d.ts +183 -0
  137. package/2D/controls/scrollViewers/scrollViewer.pure.js +598 -0
  138. package/2D/controls/scrollViewers/scrollViewer.pure.js.map +1 -0
  139. package/2D/controls/sliders/imageBasedSlider.d.ts +3 -45
  140. package/2D/controls/sliders/imageBasedSlider.js +5 -165
  141. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  142. package/2D/controls/sliders/imageBasedSlider.pure.d.ts +52 -0
  143. package/2D/controls/sliders/imageBasedSlider.pure.js +179 -0
  144. package/2D/controls/sliders/imageBasedSlider.pure.js.map +1 -0
  145. package/2D/controls/sliders/pure.d.ts +4 -0
  146. package/2D/controls/sliders/pure.js +5 -0
  147. package/2D/controls/sliders/pure.js.map +1 -0
  148. package/2D/controls/sliders/scrollBar.d.ts +3 -48
  149. package/2D/controls/sliders/scrollBar.js +5 -170
  150. package/2D/controls/sliders/scrollBar.js.map +1 -1
  151. package/2D/controls/sliders/scrollBar.pure.d.ts +55 -0
  152. package/2D/controls/sliders/scrollBar.pure.js +184 -0
  153. package/2D/controls/sliders/scrollBar.pure.js.map +1 -0
  154. package/2D/controls/sliders/slider.d.ts +3 -44
  155. package/2D/controls/sliders/slider.js +5 -278
  156. package/2D/controls/sliders/slider.js.map +1 -1
  157. package/2D/controls/sliders/slider.pure.d.ts +51 -0
  158. package/2D/controls/sliders/slider.pure.js +292 -0
  159. package/2D/controls/sliders/slider.pure.js.map +1 -0
  160. package/2D/controls/stackPanel.d.ts +3 -62
  161. package/2D/controls/stackPanel.js +5 -243
  162. package/2D/controls/stackPanel.js.map +1 -1
  163. package/2D/controls/stackPanel.pure.d.ts +69 -0
  164. package/2D/controls/stackPanel.pure.js +257 -0
  165. package/2D/controls/stackPanel.pure.js.map +1 -0
  166. package/2D/controls/statics.d.ts +3 -4
  167. package/2D/controls/statics.js +5 -47
  168. package/2D/controls/statics.js.map +1 -1
  169. package/2D/controls/statics.pure.d.ts +11 -0
  170. package/2D/controls/statics.pure.js +61 -0
  171. package/2D/controls/statics.pure.js.map +1 -0
  172. package/2D/controls/textBlock.d.ts +3 -217
  173. package/2D/controls/textBlock.js +5 -676
  174. package/2D/controls/textBlock.js.map +1 -1
  175. package/2D/controls/textBlock.pure.d.ts +224 -0
  176. package/2D/controls/textBlock.pure.js +690 -0
  177. package/2D/controls/textBlock.pure.js.map +1 -0
  178. package/2D/controls/toggleButton.d.ts +3 -91
  179. package/2D/controls/toggleButton.js +5 -226
  180. package/2D/controls/toggleButton.js.map +1 -1
  181. package/2D/controls/toggleButton.pure.d.ts +98 -0
  182. package/2D/controls/toggleButton.pure.js +240 -0
  183. package/2D/controls/toggleButton.pure.js.map +1 -0
  184. package/2D/controls/virtualKeyboard.d.ts +3 -100
  185. package/2D/controls/virtualKeyboard.js +5 -272
  186. package/2D/controls/virtualKeyboard.js.map +1 -1
  187. package/2D/controls/virtualKeyboard.pure.d.ts +107 -0
  188. package/2D/controls/virtualKeyboard.pure.js +286 -0
  189. package/2D/controls/virtualKeyboard.pure.js.map +1 -0
  190. package/2D/pure.d.ts +13 -0
  191. package/2D/pure.js +15 -0
  192. package/2D/pure.js.map +1 -0
  193. package/3D/controls/pure.d.ts +23 -0
  194. package/3D/controls/pure.js +24 -0
  195. package/3D/controls/pure.js.map +1 -0
  196. package/3D/gizmos/pure.d.ts +3 -0
  197. package/3D/gizmos/pure.js +4 -0
  198. package/3D/gizmos/pure.js.map +1 -0
  199. package/3D/materials/fluent/fluentMaterial.d.ts +5 -100
  200. package/3D/materials/fluent/fluentMaterial.js +7 -305
  201. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  202. package/3D/materials/fluent/fluentMaterial.pure.d.ts +105 -0
  203. package/3D/materials/fluent/fluentMaterial.pure.js +317 -0
  204. package/3D/materials/fluent/fluentMaterial.pure.js.map +1 -0
  205. package/3D/materials/fluent/pure.d.ts +2 -0
  206. package/3D/materials/fluent/pure.js +3 -0
  207. package/3D/materials/fluent/pure.js.map +1 -0
  208. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +5 -164
  209. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +7 -488
  210. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  211. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.d.ts +169 -0
  212. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js +500 -0
  213. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js.map +1 -0
  214. package/3D/materials/fluentBackplate/pure.d.ts +2 -0
  215. package/3D/materials/fluentBackplate/pure.js +3 -0
  216. package/3D/materials/fluentBackplate/pure.js.map +1 -0
  217. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +5 -200
  218. package/3D/materials/fluentButton/fluentButtonMaterial.js +7 -563
  219. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  220. package/3D/materials/fluentButton/fluentButtonMaterial.pure.d.ts +205 -0
  221. package/3D/materials/fluentButton/fluentButtonMaterial.pure.js +575 -0
  222. package/3D/materials/fluentButton/fluentButtonMaterial.pure.js.map +1 -0
  223. package/3D/materials/fluentButton/pure.d.ts +2 -0
  224. package/3D/materials/fluentButton/pure.js +3 -0
  225. package/3D/materials/fluentButton/pure.js.map +1 -0
  226. package/3D/materials/handle/handleMaterial.d.ts +5 -66
  227. package/3D/materials/handle/handleMaterial.js +5 -118
  228. package/3D/materials/handle/handleMaterial.js.map +1 -1
  229. package/3D/materials/handle/handleMaterial.pure.d.ts +66 -0
  230. package/3D/materials/handle/handleMaterial.pure.js +119 -0
  231. package/3D/materials/handle/handleMaterial.pure.js.map +1 -0
  232. package/3D/materials/handle/pure.d.ts +2 -0
  233. package/3D/materials/handle/pure.js +3 -0
  234. package/3D/materials/handle/pure.js.map +1 -0
  235. package/3D/materials/mrdl/mrdlBackglowMaterial.d.ts +5 -85
  236. package/3D/materials/mrdl/mrdlBackglowMaterial.js +7 -299
  237. package/3D/materials/mrdl/mrdlBackglowMaterial.js.map +1 -1
  238. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.d.ts +90 -0
  239. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js +311 -0
  240. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js.map +1 -0
  241. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +5 -145
  242. package/3D/materials/mrdl/mrdlBackplateMaterial.js +7 -433
  243. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  244. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.d.ts +157 -0
  245. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js +452 -0
  246. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js.map +1 -0
  247. package/3D/materials/mrdl/mrdlFrontplateMaterial.d.ts +5 -183
  248. package/3D/materials/mrdl/mrdlFrontplateMaterial.js +7 -532
  249. package/3D/materials/mrdl/mrdlFrontplateMaterial.js.map +1 -1
  250. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.d.ts +188 -0
  251. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js +544 -0
  252. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js.map +1 -0
  253. package/3D/materials/mrdl/mrdlInnerquadMaterial.d.ts +5 -54
  254. package/3D/materials/mrdl/mrdlInnerquadMaterial.js +7 -227
  255. package/3D/materials/mrdl/mrdlInnerquadMaterial.js.map +1 -1
  256. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.d.ts +59 -0
  257. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js +239 -0
  258. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js.map +1 -0
  259. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +5 -334
  260. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +7 -855
  261. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  262. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.d.ts +346 -0
  263. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js +874 -0
  264. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js.map +1 -0
  265. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +5 -334
  266. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +7 -855
  267. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  268. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.d.ts +346 -0
  269. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js +874 -0
  270. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js.map +1 -0
  271. package/3D/materials/mrdl/pure.d.ts +7 -0
  272. package/3D/materials/mrdl/pure.js +8 -0
  273. package/3D/materials/mrdl/pure.js.map +1 -0
  274. package/3D/materials/pure.d.ts +6 -0
  275. package/3D/materials/pure.js +8 -0
  276. package/3D/materials/pure.js.map +1 -0
  277. package/3D/pure.d.ts +6 -0
  278. package/3D/pure.js +8 -0
  279. package/3D/pure.js.map +1 -0
  280. package/package.json +50 -3
  281. package/pure.d.ts +3 -0
  282. package/pure.js +5 -0
  283. package/pure.js.map +1 -0
@@ -0,0 +1,240 @@
1
+ import { Observable } from "@babylonjs/core/Misc/observable.js";
2
+ import { Rectangle } from "./rectangle.pure.js";
3
+ import { RegisterClass } from "@babylonjs/core/Misc/typeStore.js";
4
+ /**
5
+ * Class used to create toggle buttons
6
+ * @since 5.0.0
7
+ */
8
+ export class ToggleButton extends Rectangle {
9
+ /** Gets or sets group name this toggle button belongs to */
10
+ get group() {
11
+ return this._group;
12
+ }
13
+ set group(value) {
14
+ if (this._group === value) {
15
+ return;
16
+ }
17
+ this._group = value;
18
+ }
19
+ /** Gets or sets a boolean indicating if the toggle button is active or not */
20
+ get isActive() {
21
+ return this._isActive;
22
+ }
23
+ set isActive(value) {
24
+ // Function modeled after radioButton.ts
25
+ if (this._isActive === value) {
26
+ return;
27
+ }
28
+ this._isActive = value;
29
+ // Update the visual state based on the new value
30
+ if (this._isActive) {
31
+ this.toActiveAnimation?.();
32
+ }
33
+ else {
34
+ this.toInactiveAnimation?.();
35
+ }
36
+ this._markAsDirty();
37
+ this.onIsActiveChangedObservable.notifyObservers(value);
38
+ if (this._isActive && this._host && this._group) {
39
+ // A toggle button in a group can only have 1 active element at a given time.
40
+ // If this toggle button has a group, set other toggle buttons in the group to inactive.
41
+ this._host.executeOnAllControls((control) => {
42
+ // Check for control type ToggleButton
43
+ if (control.typeName === "ToggleButton") {
44
+ // Don't do anything to this toggle button
45
+ if (control === this) {
46
+ return;
47
+ }
48
+ const childToggle = control;
49
+ // If toggle button is in same group, set isActive to false
50
+ if (childToggle.group === this.group) {
51
+ childToggle.isActive = false;
52
+ }
53
+ }
54
+ });
55
+ }
56
+ }
57
+ /**
58
+ * Creates a new ToggleButton
59
+ * @param name defines the control name
60
+ * @param group defines the toggle group this toggle belongs to
61
+ */
62
+ constructor(name, group) {
63
+ super(name);
64
+ this.name = name;
65
+ /** Observable raised when isActive is changed */
66
+ this.onIsActiveChangedObservable = new Observable();
67
+ /**
68
+ * Gets or sets a boolean indicating that the toggle button will let internal controls handle picking instead of doing it directly using its bounding info
69
+ */
70
+ this.delegatePickingToChildren = false;
71
+ this._isActive = false;
72
+ this.group = group ?? "";
73
+ this.thickness = 0;
74
+ this.isPointerBlocker = true;
75
+ let alphaStore = null;
76
+ this.toActiveAnimation = () => {
77
+ this.thickness = 1;
78
+ };
79
+ this.toInactiveAnimation = () => {
80
+ this.thickness = 0;
81
+ };
82
+ this.pointerEnterActiveAnimation = () => {
83
+ alphaStore = this.alpha;
84
+ this.alpha -= 0.1;
85
+ };
86
+ this.pointerOutActiveAnimation = () => {
87
+ if (alphaStore !== null) {
88
+ this.alpha = alphaStore;
89
+ }
90
+ };
91
+ this.pointerDownActiveAnimation = () => {
92
+ this.scaleX -= 0.05;
93
+ this.scaleY -= 0.05;
94
+ };
95
+ this.pointerUpActiveAnimation = () => {
96
+ this.scaleX += 0.05;
97
+ this.scaleY += 0.05;
98
+ };
99
+ this.pointerEnterInactiveAnimation = () => {
100
+ alphaStore = this.alpha;
101
+ this.alpha -= 0.1;
102
+ };
103
+ this.pointerOutInactiveAnimation = () => {
104
+ if (alphaStore !== null) {
105
+ this.alpha = alphaStore;
106
+ }
107
+ };
108
+ this.pointerDownInactiveAnimation = () => {
109
+ this.scaleX -= 0.05;
110
+ this.scaleY -= 0.05;
111
+ };
112
+ this.pointerUpInactiveAnimation = () => {
113
+ this.scaleX += 0.05;
114
+ this.scaleY += 0.05;
115
+ };
116
+ }
117
+ _getTypeName() {
118
+ return "ToggleButton";
119
+ }
120
+ // While being a container, the toggle button behaves like a control.
121
+ /**
122
+ * @internal
123
+ */
124
+ _processPicking(x, y, pi, type, pointerId, buttonIndex, deltaX, deltaY) {
125
+ if (!this._isEnabled || !this.isHitTestVisible || !this.isVisible || this.notRenderable) {
126
+ return false;
127
+ }
128
+ if (!super.contains(x, y)) {
129
+ return false;
130
+ }
131
+ if (this.delegatePickingToChildren) {
132
+ let contains = false;
133
+ for (let index = this._children.length - 1; index >= 0; index--) {
134
+ const child = this._children[index];
135
+ if (child.isEnabled && child.isHitTestVisible && child.isVisible && !child.notRenderable && child.contains(x, y)) {
136
+ contains = true;
137
+ break;
138
+ }
139
+ }
140
+ if (!contains) {
141
+ return false;
142
+ }
143
+ }
144
+ this._processObservables(type, x, y, pi, pointerId, buttonIndex, deltaX, deltaY);
145
+ return true;
146
+ }
147
+ /**
148
+ * @internal
149
+ */
150
+ _onPointerEnter(target, pi) {
151
+ if (!super._onPointerEnter(target, pi)) {
152
+ return false;
153
+ }
154
+ if (this.isReadOnly) {
155
+ return true;
156
+ }
157
+ if (this._isActive) {
158
+ if (this.pointerEnterActiveAnimation) {
159
+ this.pointerEnterActiveAnimation();
160
+ }
161
+ }
162
+ else {
163
+ if (this.pointerEnterInactiveAnimation) {
164
+ this.pointerEnterInactiveAnimation();
165
+ }
166
+ }
167
+ return true;
168
+ }
169
+ /**
170
+ * @internal
171
+ */
172
+ _onPointerOut(target, pi, force = false) {
173
+ if (!this.isReadOnly) {
174
+ if (this._isActive) {
175
+ if (this.pointerOutActiveAnimation) {
176
+ this.pointerOutActiveAnimation();
177
+ }
178
+ }
179
+ else {
180
+ if (this.pointerOutInactiveAnimation) {
181
+ this.pointerOutInactiveAnimation();
182
+ }
183
+ }
184
+ }
185
+ super._onPointerOut(target, pi, force);
186
+ }
187
+ /**
188
+ * @internal
189
+ */
190
+ _onPointerDown(target, coordinates, pointerId, buttonIndex, pi) {
191
+ if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {
192
+ return false;
193
+ }
194
+ if (this.isReadOnly) {
195
+ return true;
196
+ }
197
+ if (this._isActive) {
198
+ if (this.pointerDownActiveAnimation) {
199
+ this.pointerDownActiveAnimation();
200
+ }
201
+ }
202
+ else {
203
+ if (this.pointerDownInactiveAnimation) {
204
+ this.pointerDownInactiveAnimation();
205
+ }
206
+ }
207
+ return true;
208
+ }
209
+ /**
210
+ * @internal
211
+ */
212
+ _onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick, pi) {
213
+ if (!this.isReadOnly) {
214
+ if (this._isActive) {
215
+ if (this.pointerUpActiveAnimation) {
216
+ this.pointerUpActiveAnimation();
217
+ }
218
+ }
219
+ else {
220
+ if (this.pointerUpInactiveAnimation) {
221
+ this.pointerUpInactiveAnimation();
222
+ }
223
+ }
224
+ }
225
+ super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick, pi);
226
+ }
227
+ }
228
+ let _Registered = false;
229
+ /**
230
+ * Registers the ToggleButton class with the type store for serialization support.
231
+ * Safe to call multiple times; only the first call has an effect.
232
+ */
233
+ export function RegisterToggleButton() {
234
+ if (_Registered) {
235
+ return;
236
+ }
237
+ _Registered = true;
238
+ RegisterClass("BABYLON.GUI.ToggleButton", ToggleButton);
239
+ }
240
+ //# sourceMappingURL=toggleButton.pure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggleButton.pure.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/toggleButton.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { type Vector2 } from \"core/Maths/math.vector.pure\";\r\n\r\nimport { Rectangle } from \"./rectangle.pure\";\r\nimport { type Control } from \"./control.pure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { type PointerInfoBase } from \"core/Events/pointerEvents\";\r\n\r\n/**\r\n * Class used to create toggle buttons\r\n * @since 5.0.0\r\n */\r\nexport class ToggleButton extends Rectangle {\r\n /**\r\n * Function called to generate the toActive animation\r\n */\r\n public toActiveAnimation: () => void;\r\n\r\n /**\r\n * Function called to generate the toInactive animation\r\n */\r\n public toInactiveAnimation: () => void;\r\n\r\n /**\r\n * Function called to generate a pointer enter animation when the toggle button is active.\r\n */\r\n public pointerEnterActiveAnimation: () => void;\r\n /**\r\n * Function called to generate a pointer out animation when the toggle button is active.\r\n */\r\n public pointerOutActiveAnimation: () => void;\r\n /**\r\n * Function called to generate a pointer down animation when the toggle button is active.\r\n */\r\n public pointerDownActiveAnimation: () => void;\r\n /**\r\n * Function called to generate a pointer up animation when the toggle button is active.\r\n */\r\n public pointerUpActiveAnimation: () => void;\r\n\r\n /**\r\n * Function called to generate a pointer enter animation when the toggle button is inactive.\r\n */\r\n public pointerEnterInactiveAnimation: () => void;\r\n /**\r\n * Function called to generate a pointer out animation when the toggle button is inactive.\r\n */\r\n public pointerOutInactiveAnimation: () => void;\r\n /**\r\n * Function called to generate a pointer down animation when the toggle button is inactive.\r\n */\r\n public pointerDownInactiveAnimation: () => void;\r\n /**\r\n * Function called to generate a pointer up animation when the toggle button is inactive.\r\n */\r\n public pointerUpInactiveAnimation: () => void;\r\n\r\n /** Observable raised when isActive is changed */\r\n public onIsActiveChangedObservable = new Observable<boolean>();\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the toggle button will let internal controls handle picking instead of doing it directly using its bounding info\r\n */\r\n public override delegatePickingToChildren = false;\r\n\r\n private _group: string;\r\n /** Gets or sets group name this toggle button belongs to */\r\n public get group(): string {\r\n return this._group;\r\n }\r\n public set group(value: string) {\r\n if (this._group === value) {\r\n return;\r\n }\r\n\r\n this._group = value;\r\n }\r\n\r\n private _isActive = false;\r\n /** Gets or sets a boolean indicating if the toggle button is active or not */\r\n public get isActive(): boolean {\r\n return this._isActive;\r\n }\r\n public set isActive(value: boolean) {\r\n // Function modeled after radioButton.ts\r\n if (this._isActive === value) {\r\n return;\r\n }\r\n\r\n this._isActive = value;\r\n\r\n // Update the visual state based on the new value\r\n if (this._isActive) {\r\n this.toActiveAnimation?.();\r\n } else {\r\n this.toInactiveAnimation?.();\r\n }\r\n\r\n this._markAsDirty();\r\n\r\n this.onIsActiveChangedObservable.notifyObservers(value);\r\n\r\n if (this._isActive && this._host && this._group) {\r\n // A toggle button in a group can only have 1 active element at a given time.\r\n // If this toggle button has a group, set other toggle buttons in the group to inactive.\r\n this._host.executeOnAllControls((control) => {\r\n // Check for control type ToggleButton\r\n if (control.typeName === \"ToggleButton\") {\r\n // Don't do anything to this toggle button\r\n if (control === this) {\r\n return;\r\n }\r\n\r\n const childToggle = <ToggleButton>control;\r\n // If toggle button is in same group, set isActive to false\r\n if (childToggle.group === this.group) {\r\n childToggle.isActive = false;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new ToggleButton\r\n * @param name defines the control name\r\n * @param group defines the toggle group this toggle belongs to\r\n */\r\n constructor(\r\n public override name?: string,\r\n group?: string\r\n ) {\r\n super(name);\r\n this.group = group ?? \"\";\r\n\r\n this.thickness = 0;\r\n this.isPointerBlocker = true;\r\n\r\n let alphaStore: Nullable<number> = null;\r\n\r\n this.toActiveAnimation = () => {\r\n this.thickness = 1;\r\n };\r\n this.toInactiveAnimation = () => {\r\n this.thickness = 0;\r\n };\r\n\r\n this.pointerEnterActiveAnimation = () => {\r\n alphaStore = this.alpha;\r\n this.alpha -= 0.1;\r\n };\r\n\r\n this.pointerOutActiveAnimation = () => {\r\n if (alphaStore !== null) {\r\n this.alpha = alphaStore;\r\n }\r\n };\r\n\r\n this.pointerDownActiveAnimation = () => {\r\n this.scaleX -= 0.05;\r\n this.scaleY -= 0.05;\r\n };\r\n\r\n this.pointerUpActiveAnimation = () => {\r\n this.scaleX += 0.05;\r\n this.scaleY += 0.05;\r\n };\r\n\r\n this.pointerEnterInactiveAnimation = () => {\r\n alphaStore = this.alpha;\r\n this.alpha -= 0.1;\r\n };\r\n\r\n this.pointerOutInactiveAnimation = () => {\r\n if (alphaStore !== null) {\r\n this.alpha = alphaStore;\r\n }\r\n };\r\n\r\n this.pointerDownInactiveAnimation = () => {\r\n this.scaleX -= 0.05;\r\n this.scaleY -= 0.05;\r\n };\r\n\r\n this.pointerUpInactiveAnimation = () => {\r\n this.scaleX += 0.05;\r\n this.scaleY += 0.05;\r\n };\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"ToggleButton\";\r\n }\r\n\r\n // While being a container, the toggle button behaves like a control.\r\n /**\r\n * @internal\r\n */\r\n public override _processPicking(x: number, y: number, pi: PointerInfoBase, type: number, pointerId: number, buttonIndex: number, deltaX?: number, deltaY?: number): boolean {\r\n if (!this._isEnabled || !this.isHitTestVisible || !this.isVisible || this.notRenderable) {\r\n return false;\r\n }\r\n\r\n if (!super.contains(x, y)) {\r\n return false;\r\n }\r\n\r\n if (this.delegatePickingToChildren) {\r\n let contains = false;\r\n for (let index = this._children.length - 1; index >= 0; index--) {\r\n const child = this._children[index];\r\n if (child.isEnabled && child.isHitTestVisible && child.isVisible && !child.notRenderable && child.contains(x, y)) {\r\n contains = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!contains) {\r\n return false;\r\n }\r\n }\r\n\r\n this._processObservables(type, x, y, pi, pointerId, buttonIndex, deltaX, deltaY);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _onPointerEnter(target: Control, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerEnter(target, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n if (this._isActive) {\r\n if (this.pointerEnterActiveAnimation) {\r\n this.pointerEnterActiveAnimation();\r\n }\r\n } else {\r\n if (this.pointerEnterInactiveAnimation) {\r\n this.pointerEnterInactiveAnimation();\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _onPointerOut(target: Control, pi: PointerInfoBase, force = false): void {\r\n if (!this.isReadOnly) {\r\n if (this._isActive) {\r\n if (this.pointerOutActiveAnimation) {\r\n this.pointerOutActiveAnimation();\r\n }\r\n } else {\r\n if (this.pointerOutInactiveAnimation) {\r\n this.pointerOutInactiveAnimation();\r\n }\r\n }\r\n }\r\n\r\n super._onPointerOut(target, pi, force);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n if (this._isActive) {\r\n if (this.pointerDownActiveAnimation) {\r\n this.pointerDownActiveAnimation();\r\n }\r\n } else {\r\n if (this.pointerDownInactiveAnimation) {\r\n this.pointerDownInactiveAnimation();\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean, pi: PointerInfoBase): void {\r\n if (!this.isReadOnly) {\r\n if (this._isActive) {\r\n if (this.pointerUpActiveAnimation) {\r\n this.pointerUpActiveAnimation();\r\n }\r\n } else {\r\n if (this.pointerUpInactiveAnimation) {\r\n this.pointerUpInactiveAnimation();\r\n }\r\n }\r\n }\r\n\r\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick, pi);\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the ToggleButton class with the type store for serialization support.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterToggleButton(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GUI.ToggleButton\", ToggleButton);\r\n}\r\n"]}
@@ -1,102 +1,5 @@
1
- import { type Nullable } from "@babylonjs/core/types.js";
2
- import { Observable } from "@babylonjs/core/Misc/observable.js";
3
- import { StackPanel } from "./stackPanel.js";
4
- import { type InputText } from "./inputText.js";
5
- import { type AdvancedDynamicTexture } from "../advancedDynamicTexture.js";
6
- import { InputTextArea } from "./inputTextArea.js";
7
1
  /**
8
- * Class used to store key control properties
2
+ * Re-exports the pure implementation and applies the runtime registration side effect.
3
+ * Import "./virtualKeyboard.pure" for tree-shakeable, side-effect-free usage.
9
4
  */
10
- export declare class KeyPropertySet {
11
- /** Width */
12
- width?: string;
13
- /** Height */
14
- height?: string;
15
- /** Left padding */
16
- paddingLeft?: string;
17
- /** Right padding */
18
- paddingRight?: string;
19
- /** Top padding */
20
- paddingTop?: string;
21
- /** Bottom padding */
22
- paddingBottom?: string;
23
- /** Foreground color */
24
- color?: string;
25
- /** Background color */
26
- background?: string;
27
- }
28
- /**
29
- * Class used to create virtual keyboard
30
- */
31
- export declare class VirtualKeyboard extends StackPanel {
32
- /** Observable raised when a key is pressed */
33
- onKeyPressObservable: Observable<string>;
34
- /** Gets or sets default key button width */
35
- defaultButtonWidth: string;
36
- /** Gets or sets default key button height */
37
- defaultButtonHeight: string;
38
- /** Gets or sets default key button left padding */
39
- defaultButtonPaddingLeft: string;
40
- /** Gets or sets default key button right padding */
41
- defaultButtonPaddingRight: string;
42
- /** Gets or sets default key button top padding */
43
- defaultButtonPaddingTop: string;
44
- /** Gets or sets default key button bottom padding */
45
- defaultButtonPaddingBottom: string;
46
- /** Gets or sets default key button foreground color */
47
- defaultButtonColor: string;
48
- /** Gets or sets default key button background color */
49
- defaultButtonBackground: string;
50
- /** Gets or sets shift button foreground color */
51
- shiftButtonColor: string;
52
- /** Gets or sets shift button thickness*/
53
- selectedShiftThickness: number;
54
- /** Gets shift key state */
55
- shiftState: number;
56
- protected _getTypeName(): string;
57
- private _createKey;
58
- /**
59
- * Adds a new row of keys
60
- * @param keys defines the list of keys to add
61
- * @param propertySets defines the associated property sets
62
- */
63
- addKeysRow(keys: Array<string>, propertySets?: Array<KeyPropertySet>): void;
64
- /**
65
- * Set the shift key to a specific state
66
- * @param shiftState defines the new shift state
67
- */
68
- applyShiftState(shiftState: number): void;
69
- private _currentlyConnectedInputText;
70
- private _connectedInputTexts;
71
- private _onKeyPressObserver;
72
- /** Gets the input text control currently attached to the keyboard */
73
- get connectedInputText(): Nullable<InputText | InputTextArea>;
74
- /**
75
- * Connects the keyboard with an input text control
76
- *
77
- * @param input defines the target control
78
- */
79
- connect(input: InputText): void;
80
- /**
81
- * Disconnects the keyboard from connected InputText controls
82
- *
83
- * @param input optionally defines a target control, otherwise all are disconnected
84
- */
85
- disconnect(input?: InputText): void;
86
- private _removeConnectedInputObservables;
87
- /**
88
- * Release all resources
89
- */
90
- dispose(): void;
91
- /**
92
- * Creates a new keyboard using a default layout
93
- *
94
- * @param name defines control name
95
- * @returns a new VirtualKeyboard
96
- */
97
- static CreateDefaultLayout(name?: string): VirtualKeyboard;
98
- /**
99
- * @internal
100
- */
101
- _parseFromContent(serializedObject: any, host: AdvancedDynamicTexture): void;
102
- }
5
+ export * from "./virtualKeyboard.pure.js";
@@ -1,275 +1,8 @@
1
- import { Observable } from "@babylonjs/core/Misc/observable.js";
2
- import { StackPanel } from "./stackPanel.js";
3
- import { Button } from "./button.js";
4
- import { RegisterClass } from "@babylonjs/core/Misc/typeStore.js";
5
- import { InputTextArea } from "./inputTextArea.js";
6
1
  /**
7
- * Class used to store key control properties
2
+ * Re-exports the pure implementation and applies the runtime registration side effect.
3
+ * Import "./virtualKeyboard.pure" for tree-shakeable, side-effect-free usage.
8
4
  */
9
- export class KeyPropertySet {
10
- }
11
- /**
12
- * Class used to create virtual keyboard
13
- */
14
- export class VirtualKeyboard extends StackPanel {
15
- constructor() {
16
- super(...arguments);
17
- /** Observable raised when a key is pressed */
18
- this.onKeyPressObservable = new Observable();
19
- /** Gets or sets default key button width */
20
- this.defaultButtonWidth = "40px";
21
- /** Gets or sets default key button height */
22
- this.defaultButtonHeight = "40px";
23
- /** Gets or sets default key button left padding */
24
- this.defaultButtonPaddingLeft = "2px";
25
- /** Gets or sets default key button right padding */
26
- this.defaultButtonPaddingRight = "2px";
27
- /** Gets or sets default key button top padding */
28
- this.defaultButtonPaddingTop = "2px";
29
- /** Gets or sets default key button bottom padding */
30
- this.defaultButtonPaddingBottom = "2px";
31
- /** Gets or sets default key button foreground color */
32
- this.defaultButtonColor = "#DDD";
33
- /** Gets or sets default key button background color */
34
- this.defaultButtonBackground = "#070707";
35
- /** Gets or sets shift button foreground color */
36
- this.shiftButtonColor = "#7799FF";
37
- /** Gets or sets shift button thickness*/
38
- this.selectedShiftThickness = 1;
39
- /** Gets shift key state */
40
- this.shiftState = 0;
41
- this._currentlyConnectedInputText = null;
42
- this._connectedInputTexts = [];
43
- this._onKeyPressObserver = null;
44
- }
45
- _getTypeName() {
46
- return "VirtualKeyboard";
47
- }
48
- _createKey(key, propertySet) {
49
- const button = Button.CreateSimpleButton(key, key);
50
- button.width = propertySet && propertySet.width ? propertySet.width : this.defaultButtonWidth;
51
- button.height = propertySet && propertySet.height ? propertySet.height : this.defaultButtonHeight;
52
- button.color = propertySet && propertySet.color ? propertySet.color : this.defaultButtonColor;
53
- button.background = propertySet && propertySet.background ? propertySet.background : this.defaultButtonBackground;
54
- button.paddingLeft = propertySet && propertySet.paddingLeft ? propertySet.paddingLeft : this.defaultButtonPaddingLeft;
55
- button.paddingRight = propertySet && propertySet.paddingRight ? propertySet.paddingRight : this.defaultButtonPaddingRight;
56
- button.paddingTop = propertySet && propertySet.paddingTop ? propertySet.paddingTop : this.defaultButtonPaddingTop;
57
- button.paddingBottom = propertySet && propertySet.paddingBottom ? propertySet.paddingBottom : this.defaultButtonPaddingBottom;
58
- button.thickness = 0;
59
- button.isFocusInvisible = true;
60
- button.shadowColor = this.shadowColor;
61
- button.shadowBlur = this.shadowBlur;
62
- button.shadowOffsetX = this.shadowOffsetX;
63
- button.shadowOffsetY = this.shadowOffsetY;
64
- button.onPointerUpObservable.add(() => {
65
- this.onKeyPressObservable.notifyObservers(key);
66
- });
67
- return button;
68
- }
69
- /**
70
- * Adds a new row of keys
71
- * @param keys defines the list of keys to add
72
- * @param propertySets defines the associated property sets
73
- */
74
- addKeysRow(keys, propertySets) {
75
- const panel = new StackPanel();
76
- panel.isVertical = false;
77
- panel.isFocusInvisible = true;
78
- let maxKey = null;
79
- for (let i = 0; i < keys.length; i++) {
80
- let properties = null;
81
- if (propertySets && propertySets.length === keys.length) {
82
- properties = propertySets[i];
83
- }
84
- const key = this._createKey(keys[i], properties);
85
- if (!maxKey || key.heightInPixels > maxKey.heightInPixels) {
86
- maxKey = key;
87
- }
88
- panel.addControl(key);
89
- }
90
- panel.height = maxKey ? maxKey.height : this.defaultButtonHeight;
91
- this.addControl(panel);
92
- }
93
- /**
94
- * Set the shift key to a specific state
95
- * @param shiftState defines the new shift state
96
- */
97
- applyShiftState(shiftState) {
98
- if (!this.children) {
99
- return;
100
- }
101
- for (let i = 0; i < this.children.length; i++) {
102
- const row = this.children[i];
103
- if (!row || !row.children) {
104
- continue;
105
- }
106
- const rowContainer = row;
107
- for (let j = 0; j < rowContainer.children.length; j++) {
108
- const button = rowContainer.children[j];
109
- if (!button || !button.children[0]) {
110
- continue;
111
- }
112
- const buttonTblock = button.children[0];
113
- if (buttonTblock.text === "\u21E7") {
114
- button.color = shiftState ? this.shiftButtonColor : this.defaultButtonColor;
115
- button.thickness = shiftState > 1 ? this.selectedShiftThickness : 0;
116
- }
117
- buttonTblock.text = shiftState > 0 ? buttonTblock.text.toUpperCase() : buttonTblock.text.toLowerCase();
118
- }
119
- }
120
- }
121
- /** Gets the input text control currently attached to the keyboard */
122
- get connectedInputText() {
123
- return this._currentlyConnectedInputText;
124
- }
125
- /**
126
- * Connects the keyboard with an input text control
127
- *
128
- * @param input defines the target control
129
- */
130
- connect(input) {
131
- const inputTextAlreadyConnected = this._connectedInputTexts.some((a) => a.input === input);
132
- if (inputTextAlreadyConnected) {
133
- return;
134
- }
135
- if (this._onKeyPressObserver === null) {
136
- this._onKeyPressObserver = this.onKeyPressObservable.add((key) => {
137
- if (!this._currentlyConnectedInputText) {
138
- return;
139
- }
140
- this._currentlyConnectedInputText._host.focusedControl = this._currentlyConnectedInputText;
141
- switch (key) {
142
- case "\u21E7":
143
- this.shiftState++;
144
- if (this.shiftState > 2) {
145
- this.shiftState = 0;
146
- }
147
- this.applyShiftState(this.shiftState);
148
- return;
149
- case "\u2190":
150
- if (this._currentlyConnectedInputText instanceof InputTextArea) {
151
- this._currentlyConnectedInputText.alternativeProcessKey("Backspace");
152
- }
153
- else {
154
- this._currentlyConnectedInputText.processKey(8);
155
- }
156
- return;
157
- case "\u21B5":
158
- if (this._currentlyConnectedInputText instanceof InputTextArea) {
159
- this._currentlyConnectedInputText.alternativeProcessKey("Enter");
160
- }
161
- else {
162
- this._currentlyConnectedInputText.processKey(13);
163
- }
164
- return;
165
- }
166
- if (this._currentlyConnectedInputText instanceof InputTextArea) {
167
- this._currentlyConnectedInputText.alternativeProcessKey("", this.shiftState ? key.toUpperCase() : key);
168
- }
169
- else {
170
- this._currentlyConnectedInputText.processKey(-1, this.shiftState ? key.toUpperCase() : key);
171
- }
172
- if (this.shiftState === 1) {
173
- this.shiftState = 0;
174
- this.applyShiftState(this.shiftState);
175
- }
176
- });
177
- }
178
- this.isVisible = false;
179
- this._currentlyConnectedInputText = input;
180
- input._connectedVirtualKeyboard = this;
181
- // Events hooking
182
- const onFocusObserver = input.onFocusObservable.add(() => {
183
- this._currentlyConnectedInputText = input;
184
- input._connectedVirtualKeyboard = this;
185
- this.isVisible = true;
186
- });
187
- const onBlurObserver = input.onBlurObservable.add(() => {
188
- input._connectedVirtualKeyboard = null;
189
- this._currentlyConnectedInputText = null;
190
- this.isVisible = false;
191
- });
192
- this._connectedInputTexts.push({
193
- input,
194
- onBlurObserver,
195
- onFocusObserver,
196
- });
197
- }
198
- /**
199
- * Disconnects the keyboard from connected InputText controls
200
- *
201
- * @param input optionally defines a target control, otherwise all are disconnected
202
- */
203
- disconnect(input) {
204
- if (input) {
205
- // .find not available on IE
206
- const filtered = this._connectedInputTexts.filter((a) => a.input === input);
207
- if (filtered.length === 1) {
208
- this._removeConnectedInputObservables(filtered[0]);
209
- this._connectedInputTexts = this._connectedInputTexts.filter((a) => a.input !== input);
210
- if (this._currentlyConnectedInputText === input) {
211
- this._currentlyConnectedInputText = null;
212
- }
213
- }
214
- }
215
- else {
216
- for (const connectedInputText of this._connectedInputTexts) {
217
- this._removeConnectedInputObservables(connectedInputText);
218
- }
219
- this._connectedInputTexts.length = 0;
220
- }
221
- if (this._connectedInputTexts.length === 0) {
222
- this._currentlyConnectedInputText = null;
223
- this.onKeyPressObservable.remove(this._onKeyPressObserver);
224
- this._onKeyPressObserver = null;
225
- }
226
- }
227
- _removeConnectedInputObservables(connectedInputText) {
228
- connectedInputText.input._connectedVirtualKeyboard = null;
229
- connectedInputText.input.onFocusObservable.remove(connectedInputText.onFocusObserver);
230
- connectedInputText.input.onBlurObservable.remove(connectedInputText.onBlurObserver);
231
- }
232
- /**
233
- * Release all resources
234
- */
235
- dispose() {
236
- super.dispose();
237
- this.disconnect();
238
- }
239
- // Statics
240
- /**
241
- * Creates a new keyboard using a default layout
242
- *
243
- * @param name defines control name
244
- * @returns a new VirtualKeyboard
245
- */
246
- static CreateDefaultLayout(name) {
247
- const returnValue = new VirtualKeyboard(name);
248
- returnValue.addKeysRow(["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "\u2190"]);
249
- returnValue.addKeysRow(["q", "w", "e", "r", "t", "y", "u", "i", "o", "p"]);
250
- returnValue.addKeysRow(["a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", "\u21B5"]);
251
- returnValue.addKeysRow(["\u21E7", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/"]);
252
- returnValue.addKeysRow([" "], [{ width: "200px" }]);
253
- return returnValue;
254
- }
255
- /**
256
- * @internal
257
- */
258
- _parseFromContent(serializedObject, host) {
259
- super._parseFromContent(serializedObject, host);
260
- for (const row of this.children) {
261
- if (row.getClassName() === "StackPanel") {
262
- const stackPanel = row;
263
- for (const key of stackPanel.children) {
264
- if (key.getClassName() === "Button" && key.name) {
265
- key.onPointerUpObservable.add(() => {
266
- this.onKeyPressObservable.notifyObservers(key.name);
267
- });
268
- }
269
- }
270
- }
271
- }
272
- }
273
- }
274
- RegisterClass("BABYLON.GUI.VirtualKeyboard", VirtualKeyboard);
5
+ export * from "./virtualKeyboard.pure.js";
6
+ import { RegisterVirtualKeyboard } from "./virtualKeyboard.pure.js";
7
+ RegisterVirtualKeyboard();
275
8
  //# sourceMappingURL=virtualKeyboard.js.map