@babylonjs/gui 9.13.0 → 9.15.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 (325) 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/advancedDynamicTexture.d.ts +2 -2
  11. package/2D/advancedDynamicTexture.js +2 -2
  12. package/2D/advancedDynamicTexture.js.map +1 -1
  13. package/2D/controls/button.d.ts +3 -107
  14. package/2D/controls/button.js +5 -243
  15. package/2D/controls/button.js.map +1 -1
  16. package/2D/controls/button.pure.d.ts +114 -0
  17. package/2D/controls/button.pure.js +257 -0
  18. package/2D/controls/button.pure.js.map +1 -0
  19. package/2D/controls/checkbox.d.ts +3 -51
  20. package/2D/controls/checkbox.js +5 -161
  21. package/2D/controls/checkbox.js.map +1 -1
  22. package/2D/controls/checkbox.pure.d.ts +58 -0
  23. package/2D/controls/checkbox.pure.js +175 -0
  24. package/2D/controls/checkbox.pure.js.map +1 -0
  25. package/2D/controls/colorpicker.d.ts +5 -101
  26. package/2D/controls/colorpicker.js +7 -1394
  27. package/2D/controls/colorpicker.js.map +1 -1
  28. package/2D/controls/colorpicker.pure.d.ts +106 -0
  29. package/2D/controls/colorpicker.pure.js +1406 -0
  30. package/2D/controls/colorpicker.pure.js.map +1 -0
  31. package/2D/controls/container.d.ts +3 -177
  32. package/2D/controls/container.js +5 -615
  33. package/2D/controls/container.js.map +1 -1
  34. package/2D/controls/container.pure.d.ts +184 -0
  35. package/2D/controls/container.pure.js +629 -0
  36. package/2D/controls/container.pure.js.map +1 -0
  37. package/2D/controls/control.d.ts +3 -944
  38. package/2D/controls/control.js +5 -2457
  39. package/2D/controls/control.js.map +1 -1
  40. package/2D/controls/control.pure.d.ts +951 -0
  41. package/2D/controls/control.pure.js +2471 -0
  42. package/2D/controls/control.pure.js.map +1 -0
  43. package/2D/controls/displayGrid.d.ts +5 -53
  44. package/2D/controls/displayGrid.js +7 -201
  45. package/2D/controls/displayGrid.js.map +1 -1
  46. package/2D/controls/displayGrid.pure.d.ts +58 -0
  47. package/2D/controls/displayGrid.pure.js +213 -0
  48. package/2D/controls/displayGrid.pure.js.map +1 -0
  49. package/2D/controls/ellipse.d.ts +5 -25
  50. package/2D/controls/ellipse.js +7 -92
  51. package/2D/controls/ellipse.js.map +1 -1
  52. package/2D/controls/ellipse.pure.d.ts +30 -0
  53. package/2D/controls/ellipse.pure.js +104 -0
  54. package/2D/controls/ellipse.pure.js.map +1 -0
  55. package/2D/controls/focusableButton.d.ts +3 -15
  56. package/2D/controls/focusableButton.js +5 -22
  57. package/2D/controls/focusableButton.js.map +1 -1
  58. package/2D/controls/focusableButton.pure.d.ts +22 -0
  59. package/2D/controls/focusableButton.pure.js +36 -0
  60. package/2D/controls/focusableButton.pure.js.map +1 -0
  61. package/2D/controls/gradient/LinearGradient.d.ts +3 -43
  62. package/2D/controls/gradient/LinearGradient.js +5 -70
  63. package/2D/controls/gradient/LinearGradient.js.map +1 -1
  64. package/2D/controls/gradient/LinearGradient.pure.d.ts +50 -0
  65. package/2D/controls/gradient/LinearGradient.pure.js +84 -0
  66. package/2D/controls/gradient/LinearGradient.pure.js.map +1 -0
  67. package/2D/controls/gradient/RadialGradient.d.ts +3 -51
  68. package/2D/controls/gradient/RadialGradient.js +5 -86
  69. package/2D/controls/gradient/RadialGradient.js.map +1 -1
  70. package/2D/controls/gradient/RadialGradient.pure.d.ts +58 -0
  71. package/2D/controls/gradient/RadialGradient.pure.js +100 -0
  72. package/2D/controls/gradient/RadialGradient.pure.js.map +1 -0
  73. package/2D/controls/gradient/pure.d.ts +3 -0
  74. package/2D/controls/gradient/pure.js +4 -0
  75. package/2D/controls/gradient/pure.js.map +1 -0
  76. package/2D/controls/grid.d.ts +3 -149
  77. package/2D/controls/grid.js +5 -525
  78. package/2D/controls/grid.js.map +1 -1
  79. package/2D/controls/grid.pure.d.ts +156 -0
  80. package/2D/controls/grid.pure.js +539 -0
  81. package/2D/controls/grid.pure.js.map +1 -0
  82. package/2D/controls/image.d.ts +3 -226
  83. package/2D/controls/image.js +5 -913
  84. package/2D/controls/image.js.map +1 -1
  85. package/2D/controls/image.pure.d.ts +233 -0
  86. package/2D/controls/image.pure.js +927 -0
  87. package/2D/controls/image.pure.js.map +1 -0
  88. package/2D/controls/inputPassword.d.ts +3 -7
  89. package/2D/controls/inputPassword.js +5 -19
  90. package/2D/controls/inputPassword.js.map +1 -1
  91. package/2D/controls/inputPassword.pure.d.ts +14 -0
  92. package/2D/controls/inputPassword.pure.js +33 -0
  93. package/2D/controls/inputPassword.pure.js.map +1 -0
  94. package/2D/controls/inputText.d.ts +3 -202
  95. package/2D/controls/inputText.js +5 -1050
  96. package/2D/controls/inputText.js.map +1 -1
  97. package/2D/controls/inputText.pure.d.ts +209 -0
  98. package/2D/controls/inputText.pure.js +1064 -0
  99. package/2D/controls/inputText.pure.js.map +1 -0
  100. package/2D/controls/inputTextArea.d.ts +3 -140
  101. package/2D/controls/inputTextArea.js +5 -1023
  102. package/2D/controls/inputTextArea.js.map +1 -1
  103. package/2D/controls/inputTextArea.pure.d.ts +147 -0
  104. package/2D/controls/inputTextArea.pure.js +1037 -0
  105. package/2D/controls/inputTextArea.pure.js.map +1 -0
  106. package/2D/controls/line.d.ts +5 -74
  107. package/2D/controls/line.js +7 -234
  108. package/2D/controls/line.js.map +1 -1
  109. package/2D/controls/line.pure.d.ts +79 -0
  110. package/2D/controls/line.pure.js +246 -0
  111. package/2D/controls/line.pure.js.map +1 -0
  112. package/2D/controls/multiLine.d.ts +3 -73
  113. package/2D/controls/multiLine.js +5 -234
  114. package/2D/controls/multiLine.js.map +1 -1
  115. package/2D/controls/multiLine.pure.d.ts +80 -0
  116. package/2D/controls/multiLine.pure.js +248 -0
  117. package/2D/controls/multiLine.pure.js.map +1 -0
  118. package/2D/controls/pure.d.ts +38 -0
  119. package/2D/controls/pure.js +39 -0
  120. package/2D/controls/pure.js.map +1 -0
  121. package/2D/controls/radioButton.d.ts +3 -47
  122. package/2D/controls/radioButton.js +5 -182
  123. package/2D/controls/radioButton.js.map +1 -1
  124. package/2D/controls/radioButton.pure.d.ts +54 -0
  125. package/2D/controls/radioButton.pure.js +196 -0
  126. package/2D/controls/radioButton.pure.js.map +1 -0
  127. package/2D/controls/rectangle.d.ts +5 -43
  128. package/2D/controls/rectangle.js +7 -205
  129. package/2D/controls/rectangle.js.map +1 -1
  130. package/2D/controls/rectangle.pure.d.ts +48 -0
  131. package/2D/controls/rectangle.pure.js +217 -0
  132. package/2D/controls/rectangle.pure.js.map +1 -0
  133. package/2D/controls/scrollViewers/pure.d.ts +2 -0
  134. package/2D/controls/scrollViewers/pure.js +3 -0
  135. package/2D/controls/scrollViewers/pure.js.map +1 -0
  136. package/2D/controls/scrollViewers/scrollViewer.d.ts +3 -176
  137. package/2D/controls/scrollViewers/scrollViewer.js +5 -584
  138. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  139. package/2D/controls/scrollViewers/scrollViewer.pure.d.ts +183 -0
  140. package/2D/controls/scrollViewers/scrollViewer.pure.js +598 -0
  141. package/2D/controls/scrollViewers/scrollViewer.pure.js.map +1 -0
  142. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +1 -1
  143. package/2D/controls/scrollViewers/scrollViewerWindow.js +2 -2
  144. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  145. package/2D/controls/selector.d.ts +2 -2
  146. package/2D/controls/selector.js +8 -8
  147. package/2D/controls/selector.js.map +1 -1
  148. package/2D/controls/sliders/baseSlider.d.ts +1 -1
  149. package/2D/controls/sliders/baseSlider.js +1 -1
  150. package/2D/controls/sliders/baseSlider.js.map +1 -1
  151. package/2D/controls/sliders/imageBasedSlider.d.ts +3 -45
  152. package/2D/controls/sliders/imageBasedSlider.js +5 -165
  153. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  154. package/2D/controls/sliders/imageBasedSlider.pure.d.ts +52 -0
  155. package/2D/controls/sliders/imageBasedSlider.pure.js +179 -0
  156. package/2D/controls/sliders/imageBasedSlider.pure.js.map +1 -0
  157. package/2D/controls/sliders/pure.d.ts +4 -0
  158. package/2D/controls/sliders/pure.js +5 -0
  159. package/2D/controls/sliders/pure.js.map +1 -0
  160. package/2D/controls/sliders/scrollBar.d.ts +3 -48
  161. package/2D/controls/sliders/scrollBar.js +5 -170
  162. package/2D/controls/sliders/scrollBar.js.map +1 -1
  163. package/2D/controls/sliders/scrollBar.pure.d.ts +55 -0
  164. package/2D/controls/sliders/scrollBar.pure.js +184 -0
  165. package/2D/controls/sliders/scrollBar.pure.js.map +1 -0
  166. package/2D/controls/sliders/slider.d.ts +3 -44
  167. package/2D/controls/sliders/slider.js +5 -278
  168. package/2D/controls/sliders/slider.js.map +1 -1
  169. package/2D/controls/sliders/slider.pure.d.ts +51 -0
  170. package/2D/controls/sliders/slider.pure.js +292 -0
  171. package/2D/controls/sliders/slider.pure.js.map +1 -0
  172. package/2D/controls/stackPanel.d.ts +3 -62
  173. package/2D/controls/stackPanel.js +5 -243
  174. package/2D/controls/stackPanel.js.map +1 -1
  175. package/2D/controls/stackPanel.pure.d.ts +69 -0
  176. package/2D/controls/stackPanel.pure.js +257 -0
  177. package/2D/controls/stackPanel.pure.js.map +1 -0
  178. package/2D/controls/statics.d.ts +3 -4
  179. package/2D/controls/statics.js +5 -47
  180. package/2D/controls/statics.js.map +1 -1
  181. package/2D/controls/statics.pure.d.ts +11 -0
  182. package/2D/controls/statics.pure.js +61 -0
  183. package/2D/controls/statics.pure.js.map +1 -0
  184. package/2D/controls/textBlock.d.ts +3 -217
  185. package/2D/controls/textBlock.js +5 -676
  186. package/2D/controls/textBlock.js.map +1 -1
  187. package/2D/controls/textBlock.pure.d.ts +224 -0
  188. package/2D/controls/textBlock.pure.js +690 -0
  189. package/2D/controls/textBlock.pure.js.map +1 -0
  190. package/2D/controls/toggleButton.d.ts +3 -91
  191. package/2D/controls/toggleButton.js +5 -226
  192. package/2D/controls/toggleButton.js.map +1 -1
  193. package/2D/controls/toggleButton.pure.d.ts +98 -0
  194. package/2D/controls/toggleButton.pure.js +240 -0
  195. package/2D/controls/toggleButton.pure.js.map +1 -0
  196. package/2D/controls/virtualKeyboard.d.ts +3 -100
  197. package/2D/controls/virtualKeyboard.js +5 -272
  198. package/2D/controls/virtualKeyboard.js.map +1 -1
  199. package/2D/controls/virtualKeyboard.pure.d.ts +107 -0
  200. package/2D/controls/virtualKeyboard.pure.js +286 -0
  201. package/2D/controls/virtualKeyboard.pure.js.map +1 -0
  202. package/2D/math2D.d.ts +1 -1
  203. package/2D/math2D.js +1 -1
  204. package/2D/math2D.js.map +1 -1
  205. package/2D/measure.js +1 -1
  206. package/2D/measure.js.map +1 -1
  207. package/2D/pure.d.ts +13 -0
  208. package/2D/pure.js +15 -0
  209. package/2D/pure.js.map +1 -0
  210. package/3D/controls/MRTK3/touchHolographicButton.d.ts +4 -4
  211. package/3D/controls/MRTK3/touchHolographicButton.js +10 -10
  212. package/3D/controls/MRTK3/touchHolographicButton.js.map +1 -1
  213. package/3D/controls/holographicBackplate.d.ts +1 -1
  214. package/3D/controls/holographicBackplate.js +1 -1
  215. package/3D/controls/holographicBackplate.js.map +1 -1
  216. package/3D/controls/holographicButton.d.ts +1 -1
  217. package/3D/controls/holographicButton.js +4 -4
  218. package/3D/controls/holographicButton.js.map +1 -1
  219. package/3D/controls/holographicSlate.js +4 -4
  220. package/3D/controls/holographicSlate.js.map +1 -1
  221. package/3D/controls/pure.d.ts +23 -0
  222. package/3D/controls/pure.js +24 -0
  223. package/3D/controls/pure.js.map +1 -0
  224. package/3D/controls/slider3D.d.ts +3 -3
  225. package/3D/controls/slider3D.js +3 -3
  226. package/3D/controls/slider3D.js.map +1 -1
  227. package/3D/controls/touchHolographicButton.d.ts +2 -2
  228. package/3D/controls/touchHolographicButton.js +5 -5
  229. package/3D/controls/touchHolographicButton.js.map +1 -1
  230. package/3D/controls/touchHolographicMenu.js +1 -1
  231. package/3D/controls/touchHolographicMenu.js.map +1 -1
  232. package/3D/gizmos/gizmoHandle.d.ts +1 -1
  233. package/3D/gizmos/gizmoHandle.js +1 -1
  234. package/3D/gizmos/gizmoHandle.js.map +1 -1
  235. package/3D/gizmos/pure.d.ts +3 -0
  236. package/3D/gizmos/pure.js +4 -0
  237. package/3D/gizmos/pure.js.map +1 -0
  238. package/3D/materials/fluent/fluentMaterial.d.ts +5 -100
  239. package/3D/materials/fluent/fluentMaterial.js +7 -305
  240. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  241. package/3D/materials/fluent/fluentMaterial.pure.d.ts +105 -0
  242. package/3D/materials/fluent/fluentMaterial.pure.js +320 -0
  243. package/3D/materials/fluent/fluentMaterial.pure.js.map +1 -0
  244. package/3D/materials/fluent/pure.d.ts +2 -0
  245. package/3D/materials/fluent/pure.js +3 -0
  246. package/3D/materials/fluent/pure.js.map +1 -0
  247. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +5 -164
  248. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +7 -488
  249. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  250. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.d.ts +169 -0
  251. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js +503 -0
  252. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js.map +1 -0
  253. package/3D/materials/fluentBackplate/pure.d.ts +2 -0
  254. package/3D/materials/fluentBackplate/pure.js +3 -0
  255. package/3D/materials/fluentBackplate/pure.js.map +1 -0
  256. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +5 -200
  257. package/3D/materials/fluentButton/fluentButtonMaterial.js +7 -563
  258. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  259. package/3D/materials/fluentButton/fluentButtonMaterial.pure.d.ts +205 -0
  260. package/3D/materials/fluentButton/fluentButtonMaterial.pure.js +578 -0
  261. package/3D/materials/fluentButton/fluentButtonMaterial.pure.js.map +1 -0
  262. package/3D/materials/fluentButton/pure.d.ts +2 -0
  263. package/3D/materials/fluentButton/pure.js +3 -0
  264. package/3D/materials/fluentButton/pure.js.map +1 -0
  265. package/3D/materials/fluentMaterial.d.ts +1 -1
  266. package/3D/materials/fluentMaterial.js +1 -1
  267. package/3D/materials/fluentMaterial.js.map +1 -1
  268. package/3D/materials/handle/handleMaterial.d.ts +5 -66
  269. package/3D/materials/handle/handleMaterial.js +5 -118
  270. package/3D/materials/handle/handleMaterial.js.map +1 -1
  271. package/3D/materials/handle/handleMaterial.pure.d.ts +66 -0
  272. package/3D/materials/handle/handleMaterial.pure.js +121 -0
  273. package/3D/materials/handle/handleMaterial.pure.js.map +1 -0
  274. package/3D/materials/handle/pure.d.ts +2 -0
  275. package/3D/materials/handle/pure.js +3 -0
  276. package/3D/materials/handle/pure.js.map +1 -0
  277. package/3D/materials/mrdl/mrdlBackglowMaterial.d.ts +5 -85
  278. package/3D/materials/mrdl/mrdlBackglowMaterial.js +7 -299
  279. package/3D/materials/mrdl/mrdlBackglowMaterial.js.map +1 -1
  280. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.d.ts +90 -0
  281. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js +314 -0
  282. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js.map +1 -0
  283. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +5 -145
  284. package/3D/materials/mrdl/mrdlBackplateMaterial.js +7 -433
  285. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  286. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.d.ts +157 -0
  287. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js +455 -0
  288. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js.map +1 -0
  289. package/3D/materials/mrdl/mrdlFrontplateMaterial.d.ts +5 -183
  290. package/3D/materials/mrdl/mrdlFrontplateMaterial.js +7 -532
  291. package/3D/materials/mrdl/mrdlFrontplateMaterial.js.map +1 -1
  292. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.d.ts +188 -0
  293. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js +547 -0
  294. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js.map +1 -0
  295. package/3D/materials/mrdl/mrdlInnerquadMaterial.d.ts +5 -54
  296. package/3D/materials/mrdl/mrdlInnerquadMaterial.js +7 -227
  297. package/3D/materials/mrdl/mrdlInnerquadMaterial.js.map +1 -1
  298. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.d.ts +59 -0
  299. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js +242 -0
  300. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js.map +1 -0
  301. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +5 -334
  302. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +7 -855
  303. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  304. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.d.ts +346 -0
  305. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js +877 -0
  306. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js.map +1 -0
  307. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +5 -334
  308. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +7 -855
  309. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  310. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.d.ts +346 -0
  311. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js +877 -0
  312. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js.map +1 -0
  313. package/3D/materials/mrdl/pure.d.ts +7 -0
  314. package/3D/materials/mrdl/pure.js +8 -0
  315. package/3D/materials/mrdl/pure.js.map +1 -0
  316. package/3D/materials/pure.d.ts +6 -0
  317. package/3D/materials/pure.js +8 -0
  318. package/3D/materials/pure.js.map +1 -0
  319. package/3D/pure.d.ts +6 -0
  320. package/3D/pure.js +8 -0
  321. package/3D/pure.js.map +1 -0
  322. package/package.json +50 -3
  323. package/pure.d.ts +3 -0
  324. package/pure.js +5 -0
  325. 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