@babylonjs/gui 5.0.0-rc.7 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/2D/adtInstrumentation.d.ts +52 -52
  2. package/2D/adtInstrumentation.js +126 -126
  3. package/2D/adtInstrumentation.js.map +1 -1
  4. package/2D/advancedDynamicTexture.d.ts +449 -448
  5. package/2D/advancedDynamicTexture.js +1318 -1318
  6. package/2D/advancedDynamicTexture.js.map +1 -1
  7. package/2D/controls/button.d.ts +135 -135
  8. package/2D/controls/button.js +276 -276
  9. package/2D/controls/button.js.map +1 -1
  10. package/2D/controls/checkbox.d.ts +59 -59
  11. package/2D/controls/checkbox.js +188 -188
  12. package/2D/controls/checkbox.js.map +1 -1
  13. package/2D/controls/colorpicker.d.ts +103 -103
  14. package/2D/controls/colorpicker.js +1417 -1417
  15. package/2D/controls/colorpicker.js.map +1 -1
  16. package/2D/controls/container.d.ts +175 -175
  17. package/2D/controls/container.js +570 -570
  18. package/2D/controls/container.js.map +1 -1
  19. package/2D/controls/control.d.ts +866 -866
  20. package/2D/controls/control.js +2433 -2433
  21. package/2D/controls/control.js.map +1 -1
  22. package/2D/controls/displayGrid.d.ts +53 -53
  23. package/2D/controls/displayGrid.js +245 -245
  24. package/2D/controls/displayGrid.js.map +1 -1
  25. package/2D/controls/ellipse.d.ts +21 -21
  26. package/2D/controls/ellipse.js +85 -85
  27. package/2D/controls/ellipse.js.map +1 -1
  28. package/2D/controls/focusableButton.d.ts +59 -59
  29. package/2D/controls/focusableButton.js +99 -99
  30. package/2D/controls/focusableButton.js.map +1 -1
  31. package/2D/controls/focusableControl.d.ts +34 -34
  32. package/2D/controls/focusableControl.js +1 -1
  33. package/2D/controls/focusableControl.js.map +1 -1
  34. package/2D/controls/grid.d.ts +139 -139
  35. package/2D/controls/grid.js +529 -529
  36. package/2D/controls/grid.js.map +1 -1
  37. package/2D/controls/image.d.ts +204 -204
  38. package/2D/controls/image.js +887 -887
  39. package/2D/controls/image.js.map +1 -1
  40. package/2D/controls/index.d.ts +29 -29
  41. package/2D/controls/index.js +29 -29
  42. package/2D/controls/inputPassword.d.ts +9 -8
  43. package/2D/controls/inputPassword.js +28 -25
  44. package/2D/controls/inputPassword.js.map +1 -1
  45. package/2D/controls/inputText.d.ts +201 -201
  46. package/2D/controls/inputText.js +1119 -1119
  47. package/2D/controls/inputText.js.map +1 -1
  48. package/2D/controls/line.d.ts +66 -66
  49. package/2D/controls/line.js +271 -271
  50. package/2D/controls/line.js.map +1 -1
  51. package/2D/controls/multiLine.d.ts +75 -75
  52. package/2D/controls/multiLine.js +262 -262
  53. package/2D/controls/multiLine.js.map +1 -1
  54. package/2D/controls/radioButton.d.ts +49 -49
  55. package/2D/controls/radioButton.js +205 -205
  56. package/2D/controls/radioButton.js.map +1 -1
  57. package/2D/controls/rectangle.d.ts +29 -29
  58. package/2D/controls/rectangle.js +150 -150
  59. package/2D/controls/rectangle.js.map +1 -1
  60. package/2D/controls/scrollViewers/scrollViewer.d.ts +182 -182
  61. package/2D/controls/scrollViewers/scrollViewer.js +677 -677
  62. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  63. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +57 -57
  64. package/2D/controls/scrollViewers/scrollViewerWindow.js +278 -278
  65. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  66. package/2D/controls/selector.d.ts +263 -263
  67. package/2D/controls/selector.js +692 -692
  68. package/2D/controls/sliders/baseSlider.d.ts +82 -82
  69. package/2D/controls/sliders/baseSlider.js +347 -347
  70. package/2D/controls/sliders/baseSlider.js.map +1 -1
  71. package/2D/controls/sliders/imageBasedSlider.d.ts +49 -49
  72. package/2D/controls/sliders/imageBasedSlider.js +192 -192
  73. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  74. package/2D/controls/sliders/imageScrollBar.d.ts +65 -65
  75. package/2D/controls/sliders/imageScrollBar.js +263 -263
  76. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  77. package/2D/controls/sliders/scrollBar.d.ts +38 -38
  78. package/2D/controls/sliders/scrollBar.js +143 -143
  79. package/2D/controls/sliders/scrollBar.js.map +1 -1
  80. package/2D/controls/sliders/slider.d.ts +35 -35
  81. package/2D/controls/sliders/slider.js +271 -271
  82. package/2D/controls/sliders/slider.js.map +1 -1
  83. package/2D/controls/stackPanel.d.ts +64 -64
  84. package/2D/controls/stackPanel.js +246 -246
  85. package/2D/controls/stackPanel.js.map +1 -1
  86. package/2D/controls/statics.d.ts +6 -6
  87. package/2D/controls/statics.js +49 -49
  88. package/2D/controls/textBlock.d.ts +175 -175
  89. package/2D/controls/textBlock.js +603 -603
  90. package/2D/controls/textBlock.js.map +1 -1
  91. package/2D/controls/textWrapper.d.ts +13 -13
  92. package/2D/controls/textWrapper.js +101 -101
  93. package/2D/controls/toggleButton.d.ts +117 -117
  94. package/2D/controls/toggleButton.js +268 -268
  95. package/2D/controls/toggleButton.js.map +1 -1
  96. package/2D/controls/virtualKeyboard.d.ts +96 -96
  97. package/2D/controls/virtualKeyboard.js +256 -256
  98. package/2D/controls/virtualKeyboard.js.map +1 -1
  99. package/2D/index.d.ts +9 -9
  100. package/2D/index.js +10 -9
  101. package/2D/index.js.map +1 -1
  102. package/2D/math2D.d.ts +117 -117
  103. package/2D/math2D.js +221 -221
  104. package/2D/math2D.js.map +1 -1
  105. package/2D/measure.d.ts +77 -77
  106. package/2D/measure.js +139 -139
  107. package/2D/measure.js.map +1 -1
  108. package/2D/multiLinePoint.d.ts +47 -47
  109. package/2D/multiLinePoint.js +127 -127
  110. package/2D/multiLinePoint.js.map +1 -1
  111. package/2D/style.d.ts +46 -46
  112. package/2D/style.js +97 -97
  113. package/2D/style.js.map +1 -1
  114. package/2D/valueAndUnit.d.ts +89 -89
  115. package/2D/valueAndUnit.js +226 -226
  116. package/2D/valueAndUnit.js.map +1 -1
  117. package/2D/xmlLoader.d.ts +60 -60
  118. package/2D/xmlLoader.js +348 -348
  119. package/2D/xmlLoader.js.map +1 -1
  120. package/3D/behaviors/defaultBehavior.d.ts +73 -73
  121. package/3D/behaviors/defaultBehavior.js +121 -121
  122. package/3D/behaviors/defaultBehavior.js.map +1 -1
  123. package/3D/controls/abstractButton3D.d.ts +15 -15
  124. package/3D/controls/abstractButton3D.js +25 -25
  125. package/3D/controls/abstractButton3D.js.map +1 -1
  126. package/3D/controls/button3D.d.ts +30 -30
  127. package/3D/controls/button3D.js +93 -93
  128. package/3D/controls/button3D.js.map +1 -1
  129. package/3D/controls/container3D.d.ts +72 -72
  130. package/3D/controls/container3D.js +139 -139
  131. package/3D/controls/container3D.js.map +1 -1
  132. package/3D/controls/contentDisplay3D.d.ts +30 -30
  133. package/3D/controls/contentDisplay3D.js +79 -79
  134. package/3D/controls/contentDisplay3D.js.map +1 -1
  135. package/3D/controls/control3D.d.ts +201 -201
  136. package/3D/controls/control3D.js +445 -445
  137. package/3D/controls/control3D.js.map +1 -1
  138. package/3D/controls/cylinderPanel.d.ts +17 -17
  139. package/3D/controls/cylinderPanel.js +66 -66
  140. package/3D/controls/cylinderPanel.js.map +1 -1
  141. package/3D/controls/handMenu.d.ts +28 -28
  142. package/3D/controls/handMenu.js +47 -47
  143. package/3D/controls/handMenu.js.map +1 -1
  144. package/3D/controls/holographicBackplate.d.ts +49 -49
  145. package/3D/controls/holographicBackplate.js +120 -120
  146. package/3D/controls/holographicBackplate.js.map +1 -1
  147. package/3D/controls/holographicButton.d.ts +84 -84
  148. package/3D/controls/holographicButton.js +339 -339
  149. package/3D/controls/holographicButton.js.map +1 -1
  150. package/3D/controls/holographicSlate.d.ts +131 -131
  151. package/3D/controls/holographicSlate.js +431 -431
  152. package/3D/controls/holographicSlate.js.map +1 -1
  153. package/3D/controls/index.d.ts +21 -21
  154. package/3D/controls/index.js +21 -21
  155. package/3D/controls/meshButton3D.d.ts +21 -21
  156. package/3D/controls/meshButton3D.js +62 -62
  157. package/3D/controls/meshButton3D.js.map +1 -1
  158. package/3D/controls/nearMenu.d.ts +44 -44
  159. package/3D/controls/nearMenu.js +114 -114
  160. package/3D/controls/nearMenu.js.map +1 -1
  161. package/3D/controls/planePanel.d.ts +9 -9
  162. package/3D/controls/planePanel.js +36 -36
  163. package/3D/controls/planePanel.js.map +1 -1
  164. package/3D/controls/scatterPanel.d.ts +18 -18
  165. package/3D/controls/scatterPanel.js +108 -108
  166. package/3D/controls/scatterPanel.js.map +1 -1
  167. package/3D/controls/slider3D.d.ts +81 -81
  168. package/3D/controls/slider3D.js +268 -268
  169. package/3D/controls/slider3D.js.map +1 -1
  170. package/3D/controls/spherePanel.d.ts +17 -17
  171. package/3D/controls/spherePanel.js +67 -67
  172. package/3D/controls/spherePanel.js.map +1 -1
  173. package/3D/controls/stackPanel3D.d.ts +22 -22
  174. package/3D/controls/stackPanel3D.js +107 -107
  175. package/3D/controls/touchButton3D.d.ts +80 -80
  176. package/3D/controls/touchButton3D.js +233 -233
  177. package/3D/controls/touchButton3D.js.map +1 -1
  178. package/3D/controls/touchHolographicButton.d.ts +110 -110
  179. package/3D/controls/touchHolographicButton.js +445 -445
  180. package/3D/controls/touchHolographicButton.js.map +1 -1
  181. package/3D/controls/touchHolographicMenu.d.ts +61 -61
  182. package/3D/controls/touchHolographicMenu.js +149 -149
  183. package/3D/controls/touchHolographicMenu.js.map +1 -1
  184. package/3D/controls/touchMeshButton3D.d.ts +21 -21
  185. package/3D/controls/touchMeshButton3D.js +62 -62
  186. package/3D/controls/touchMeshButton3D.js.map +1 -1
  187. package/3D/controls/volumeBasedPanel.d.ts +53 -53
  188. package/3D/controls/volumeBasedPanel.js +174 -174
  189. package/3D/controls/volumeBasedPanel.js.map +1 -1
  190. package/3D/gizmos/gizmoHandle.d.ts +108 -108
  191. package/3D/gizmos/gizmoHandle.js +209 -209
  192. package/3D/gizmos/gizmoHandle.js.map +1 -1
  193. package/3D/gizmos/index.d.ts +2 -2
  194. package/3D/gizmos/index.js +2 -2
  195. package/3D/gizmos/slateGizmo.d.ts +57 -57
  196. package/3D/gizmos/slateGizmo.js +369 -369
  197. package/3D/gizmos/slateGizmo.js.map +1 -1
  198. package/3D/gui3DManager.d.ts +94 -94
  199. package/3D/gui3DManager.js +257 -257
  200. package/3D/gui3DManager.js.map +1 -1
  201. package/3D/index.d.ts +5 -5
  202. package/3D/index.js +6 -5
  203. package/3D/index.js.map +1 -1
  204. package/3D/materials/fluent/fluentMaterial.d.ts +91 -90
  205. package/3D/materials/fluent/fluentMaterial.js +292 -292
  206. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  207. package/3D/materials/fluent/index.d.ts +1 -1
  208. package/3D/materials/fluent/index.js +1 -1
  209. package/3D/materials/fluent/shaders/fluent.fragment.d.ts +5 -5
  210. package/3D/materials/fluent/shaders/fluent.fragment.js +8 -8
  211. package/3D/materials/fluent/shaders/fluent.vertex.d.ts +5 -5
  212. package/3D/materials/fluent/shaders/fluent.vertex.js +8 -8
  213. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +155 -154
  214. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +469 -469
  215. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  216. package/3D/materials/fluentBackplate/index.d.ts +1 -1
  217. package/3D/materials/fluentBackplate/index.js +1 -1
  218. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -5
  219. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +8 -8
  220. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -5
  221. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +8 -8
  222. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +190 -189
  223. package/3D/materials/fluentButton/fluentButtonMaterial.js +539 -539
  224. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  225. package/3D/materials/fluentButton/index.d.ts +1 -1
  226. package/3D/materials/fluentButton/index.js +1 -1
  227. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -5
  228. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +8 -8
  229. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -5
  230. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +8 -8
  231. package/3D/materials/fluentMaterial.d.ts +4 -4
  232. package/3D/materials/fluentMaterial.js +4 -4
  233. package/3D/materials/handle/handleMaterial.d.ts +68 -68
  234. package/3D/materials/handle/handleMaterial.js +126 -126
  235. package/3D/materials/handle/handleMaterial.js.map +1 -1
  236. package/3D/materials/handle/index.d.ts +1 -1
  237. package/3D/materials/handle/index.js +1 -1
  238. package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -5
  239. package/3D/materials/handle/shaders/handle.fragment.js +8 -8
  240. package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -5
  241. package/3D/materials/handle/shaders/handle.vertex.js +8 -8
  242. package/3D/materials/index.d.ts +5 -5
  243. package/3D/materials/index.js +6 -5
  244. package/3D/materials/index.js.map +1 -1
  245. package/3D/materials/mrdl/index.d.ts +3 -3
  246. package/3D/materials/mrdl/index.js +3 -3
  247. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +148 -147
  248. package/3D/materials/mrdl/mrdlBackplateMaterial.js +436 -436
  249. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  250. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +334 -333
  251. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +851 -851
  252. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  253. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +334 -333
  254. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +851 -851
  255. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  256. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -5
  257. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +8 -8
  258. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -5
  259. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +8 -8
  260. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -5
  261. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +8 -8
  262. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -5
  263. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +8 -8
  264. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -5
  265. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +8 -8
  266. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -5
  267. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +8 -8
  268. package/3D/vector3WithInfo.d.ts +16 -16
  269. package/3D/vector3WithInfo.js +23 -23
  270. package/index.d.ts +2 -2
  271. package/index.js +3 -2
  272. package/index.js.map +1 -1
  273. package/legacy/legacy.d.ts +1 -1
  274. package/legacy/legacy.js +14 -13
  275. package/legacy/legacy.js.map +1 -1
  276. package/license.md +71 -0
  277. package/package.json +24 -5
@@ -1 +1 @@
1
- {"version":3,"file":"touchHolographicButton.js","sourceRoot":"","sources":["../../../../../../lts/gui/generated/3D/controls/touchHolographicButton.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,6CAA+B;AACjD,OAAO,EAAE,gBAAgB,EAAE,sDAAwC;AACnE,OAAO,EAAE,aAAa,EAAE,gDAAkC;AAC1D,OAAO,EAAE,IAAI,EAAE,uCAAyB;AACxC,OAAO,EAAE,WAAW,EAAE,wDAA0C;AAChE,OAAO,EAAE,SAAS,EAAE,sDAAwC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,8DAAgD;AAE5E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,EAAE,MAAM,EAAE,4CAA8B;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,+CAAiC;AACvD,OAAO,EAAE,aAAa,EAAE,8CAAgC;AACxD,OAAO,EAAE,MAAM,EAAE,6CAA+B;AAEhD;;;GAGG;AACH;IAA4C,0CAAa;IA+MrD;;;;OAIG;IACH,gCAAY,IAAa,EAAE,cAAqB;QAArB,+BAAA,EAAA,qBAAqB;QAAhD,YACI,kBAAM,IAAI,CAAC,SA8Cd;QApPO,qBAAe,GAAG,IAAI,CAAC;QACvB,yBAAmB,GAAG,IAAI,CAAC;QAM3B,sBAAgB,GAAG,GAAG,CAAC;QACvB,qBAAe,GAAG,IAAI,CAAC;QACvB,qBAAe,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,4BAAsB,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QA8LzD,KAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QAEtC,KAAI,CAAC,qBAAqB,GAAG;YACzB,KAAI,CAAC,cAAc,CAAC,cAAc,GAAG,IAAI,CAAC;YAC1C,KAAI,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC;QAC/C,CAAC,CAAC;QAEF,KAAI,CAAC,mBAAmB,GAAG;YACvB,KAAI,CAAC,cAAc,CAAC,cAAc,GAAG,KAAK,CAAC;YAC3C,KAAI,CAAC,cAAc,CAAC,eAAe,GAAG,KAAK,CAAC;QAChD,CAAC,CAAC;QAEF,KAAI,CAAC,oBAAoB,GAAG;YACxB,IAAI,KAAI,CAAC,WAAW,IAAI,CAAC,KAAI,CAAC,uBAAuB,EAAE;gBACnD,KAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;gBACzD,KAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAI,CAAC,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAI,CAAC,gBAAgB,GAAG,GAAG,GAAG,KAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3J,KAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAI,CAAC,eAAe,GAAG,GAAG,GAAG,KAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;aAC5J;QACL,CAAC,CAAC;QACF,KAAI,CAAC,kBAAkB,GAAG;YACtB,IAAI,KAAI,CAAC,WAAW,EAAE;gBAClB,KAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI,CAAC,gBAAgB,CAAC;gBACnD,KAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAI,CAAC,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAI,CAAC,gBAAgB,GAAG,KAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrJ,KAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAI,CAAC,eAAe,GAAG,KAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;aACtJ;QACL,CAAC,CAAC;QAEF,KAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAC,QAAQ;YACtC,IAAI,KAAI,CAAC,WAAW,IAAI,KAAI,CAAC,uBAAuB,EAAE;gBAClD,IAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,KAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;oBACzE,IAAI,iBAAiB,GAAG,KAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;oBAC9G,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,GAAG,KAAI,CAAC,eAAe,GAAG,CAAC,EAAE,GAAG,GAAG,KAAI,CAAC,gBAAgB,EAAE,KAAI,CAAC,gBAAgB,CAAC,CAAC;oBAEnI,KAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,iBAAiB,CAAC;oBAC/C,KAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAI,CAAC,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAI,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjJ,KAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAI,CAAC,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;iBAClJ;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,KAAI,CAAC,qBAAqB,GAAG,KAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAC,aAAsB;YACjF,KAAI,CAAC,cAAc,CAAC,0BAA0B,GAAG,aAAa,CAAC;QACnE,CAAC,CAAC,CAAC;;IACP,CAAC;IAhOO,gDAAe,GAAvB;QACI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;SACpC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;SAC/B;QACD,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACjE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACjE,CAAC;IAKD,sBAAW,oDAAgB;aAS3B;YACI,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAC5C,CAAC;QAdD;;WAEG;aACH,UAA4B,EAAU;YAClC,IAAI,CAAC,UAAU,CAAC,gBAAgB,GAAG,EAAE,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,gBAAgB,GAAG,EAAE,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,EAAE,CAAC;YAEvC,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,EAAE,CAAC;aAC3C;QACL,CAAC;;;OAAA;IAQD,sBAAW,wCAAI;QAHf;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,UAA0B,CAAC;QAC3C,CAAC;;;OAAA;IAKD,sBAAW,+CAAW;aAiDtB;YACI,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACxB,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;aACtC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAzDD;;WAEG;aACH,UAAuB,IAAsB;YAA7C,iBA+CC;YA9CG,IAAI,CAAC,IAAI,EAAE;gBACP,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,OAAO;aACV;YACD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACpB,IAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC;gBACrE,oCAAoC;gBACpC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACzE,IAAM,iBAAiB,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACjH,IAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC7D,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBACnD,iBAAiB,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACjC,iBAAiB,CAAC,UAAU,GAAG,KAAK,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBAC9C,iBAAiB,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3E,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACzG,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;gBAE3C,sCAAsC;gBACtC,IAAI,CAAC,eAAe,GAAG,sBAAsB,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC/E,IAAI,CAAC,iBAAiB,GAAG,IAAI,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClC,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,OAAO,CAAC;gBACvC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACtC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAExD,8BAA8B;gBAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAC;gBAC5C,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,GAAG,CAAC;gBAC9B,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;oBAC3D,IAAI,KAAI,CAAC,YAAY,EAAE;wBACnB,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;qBAClC;gBACL,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;oBACvD,IAAI,KAAI,CAAC,YAAY,EAAE;wBACnB,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;qBACnC;gBACL,CAAC,CAAC,CAAC;aACN;YACD,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC;aACtC;QACL,CAAC;;;OAAA;IAYD,sBAAW,wCAAI;QAHf;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;aAED,UAAgB,KAAa;YACzB,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;gBACtB,OAAO;aACV;YAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;;;OATA;IAcD,sBAAW,4CAAQ;QAHnB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;aAED,UAAoB,KAAa;YAC7B,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;gBAC1B,OAAO;aACV;YAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;;;OATA;IAcD,sBAAW,gDAAY;QAHvB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;;;OAAA;IAKD,sBAAW,iDAAa;QAHxB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;;;OAAA;IAKD,sBAAW,iDAAa;QAHxB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;;;OAAA;IAKD,sBAAW,kDAAc;QAHzB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC;;;OAAA;IAKD,sBAAW,sDAAkB;QAH7B;;WAEG;aACH,UAA8B,SAAkB;YAC5C,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE;gBACnC,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;oBACxC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC;iBAClC;qBAAM,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,mBAAmB,EAAE;oBAC/C,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC;iBAClC;aACJ;YAED,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACzC,CAAC;;;OAAA;IAwDS,6CAAY,GAAtB;QACI,OAAO,wBAAwB,CAAC;IACpC,CAAC;IAEO,gDAAe,GAAvB;QACI,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;QAC/B,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QAExB,IAAI,aAAa,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE;YACjE,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;gBAC1B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC9B,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;gBAC1B,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;gBACvB,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;gBACtB,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;gBAC7B,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAC3B;SACJ;QAED,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,IAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAC1B;QAED,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,mBAAmB;IACT,4CAAW,GAArB,UAAsB,KAAY;QAAlC,iBAsEC;;QArEG,IAAI,CAAC,IAAI,GAAG,MAAA,IAAI,CAAC,IAAI,mCAAI,wBAAwB,CAAC;QAClD,IAAM,aAAa,GAAG,SAAS,CAC3B,UAAG,IAAI,CAAC,IAAI,mBAAgB,EAC5B;YACI,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,IAAI,CAAC,gBAAgB;SAC/B,EACD,KAAK,CACR,CAAC;QACF,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;QAChC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC;QACpC,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC;QAC7B,aAAa,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;QAEvG,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,sBAAsB,CAAC,cAAc,EAAE,sBAAsB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,UAAC,MAAM;YACpI,IAAM,SAAS,GAAG,SAAS,CACvB,wBAAwB,EACxB;gBACI,KAAK,EAAE,GAAG;gBACV,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,GAAG;aACb,EACD,KAAK,CACR,CAAC;YACF,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;YAC7B,SAAS,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YACpF,SAAS,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;YAEhC,IAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5C,kBAAkB,CAAC,IAAI,GAAG,UAAG,KAAI,CAAC,IAAI,gBAAa,CAAC;YACpD,kBAAkB,CAAC,UAAU,GAAG,KAAK,CAAC;YACtC,kBAAkB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI,CAAC,gBAAgB,CAAC;YACrD,SAAS,CAAC,MAAM,GAAG,kBAAkB,CAAC;YACtC,kBAAkB,CAAC,MAAM,GAAG,aAAa,CAAC;YAC1C,IAAI,KAAI,CAAC,cAAc,EAAE;gBACrB,kBAAkB,CAAC,QAAQ,GAAG,KAAI,CAAC,cAAc,CAAC;aACrD;YACD,KAAI,CAAC,WAAW,GAAG,kBAAkB,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,SAAS,CACvB,UAAG,IAAI,CAAC,IAAI,eAAY,EACxB;YACI,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,IAAI,CAAC,eAAe;SAC9B,EACD,KAAK,CACR,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;QAEnC,IAAI,CAAC,UAAU,GAAS,iBAAM,WAAW,YAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,UAAG,IAAI,CAAC,IAAI,eAAY,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;QAEzG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1C,IAAM,EAAE,GAAG,IAAI,aAAa,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAE9B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,+BAA+B;QAEjG,OAAO,EAAE,CAAC;IACd,CAAC;IAES,6CAAY,GAAtB,UAAuB,aAAqC;QACxD,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,aAAa,CAAC;QACpD,IAAI,CAAC,cAAc,CAAC,cAAc,GAAG,aAAa,CAAC;QACnD,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACjE,CAAC;IAEO,oDAAmB,GAA3B,UAA4B,IAAU;QAClC,IAAI,CAAC,aAAa,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,GAAG,mBAAmB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;QACtD,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChD,CAAC;IAEO,qDAAoB,GAA5B,UAA6B,IAAU;QACnC,IAAI,CAAC,cAAc,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,GAAG,gBAAgB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClG,CAAC;IAEO,qDAAoB,GAA5B,UAA6B,IAAU;QACnC,IAAI,CAAC,cAAc,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,GAAG,gBAAgB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IACvD,CAAC;IAES,0CAAS,GAAnB,UAAoB,QAAiB;QACjC,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,QAAQ,EAAE;gBACV,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC;aAChE;iBAAM;gBACH,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;aACzD;SACJ;QAED,iBAAM,SAAS,YAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAES,gDAAe,GAAzB,UAA0B,IAAU;QAChC,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,OAAO;YACP,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,EAAE;gBACzD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;aAC/E;iBAAM;gBACH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,oBAAoB,CAAmB,CAAC;aACjG;YAED,QAAQ;YACR,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,EAAE;gBAC1D,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;aACjF;iBAAM;gBACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,qBAAqB,CAAyB,CAAC;aACzG;SACJ;aAAM;YACH,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;SACnC;QAED,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QAE/C,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;SACnD;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,wCAAO,GAAd;QACI,iBAAM,OAAO,WAAE,CAAC,CAAC,wCAAwC;QAEzD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAEhE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAE9B,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBAC5E,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;aACpC;SACJ;IACL,CAAC;IAxcD;;OAEG;IACW,qCAAc,GAAW,2CAA2C,CAAC;IACnF;;OAEG;IACW,qCAAc,GAAW,wBAAwB,CAAC;IAkcpE,6BAAC;CAAA,AA1cD,CAA4C,aAAa,GA0cxD;SA1cY,sBAAsB","sourcesContent":["import { Nullable } from \"core/types\";\r\nimport { Observer } from \"core/Misc/observable\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { TransformNode } from \"core/Meshes/transformNode\";\r\nimport { Mesh } from \"core/Meshes/mesh\";\r\nimport { CreatePlane } from \"core/Meshes/Builders/planeBuilder\";\r\nimport { CreateBox } from \"core/Meshes/Builders/boxBuilder\";\r\nimport { FadeInOutBehavior } from \"core/Behaviors/Meshes/fadeInOutBehavior\";\r\nimport { Scene } from \"core/scene\";\r\nimport { FluentMaterial } from \"../materials/fluent/fluentMaterial\";\r\nimport { FluentButtonMaterial } from \"../materials/fluentButton/fluentButtonMaterial\";\r\nimport { StackPanel } from \"../../2D/controls/stackPanel\";\r\nimport { Image } from \"../../2D/controls/image\";\r\nimport { TextBlock } from \"../../2D/controls/textBlock\";\r\nimport { AdvancedDynamicTexture } from \"../../2D/advancedDynamicTexture\";\r\nimport { Control3D } from \"./control3D\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { TouchButton3D } from \"./touchButton3D\";\r\nimport { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { SceneLoader } from \"core/Loading/sceneLoader\";\r\nimport { DomManagement } from \"core/Misc/domManagement\";\r\nimport { Scalar } from \"core/Maths/math.scalar\";\r\n\r\n/**\r\n * Class used to create a holographic button in 3D\r\n * @since 5.0.0\r\n */\r\nexport class TouchHolographicButton extends TouchButton3D {\r\n /**\r\n * Base Url for the button model.\r\n */\r\n public static MODEL_BASE_URL: string = \"https://assets.babylonjs.com/meshes/MRTK/\";\r\n /**\r\n * File name for the button model.\r\n */\r\n public static MODEL_FILENAME: string = \"mrtk-fluent-button.glb\";\r\n\r\n private _backPlate: Mesh;\r\n private _textPlate: Mesh;\r\n private _frontPlate: AbstractMesh;\r\n private _text: string;\r\n private _imageUrl: string;\r\n private _shareMaterials = true;\r\n private _isBackplateVisible = true;\r\n private _frontMaterial: FluentButtonMaterial;\r\n private _backMaterial: FluentMaterial;\r\n private _plateMaterial: StandardMaterial;\r\n private _pickedPointObserver: Nullable<Observer<Nullable<Vector3>>>;\r\n private _pointerHoverObserver: Nullable<Observer<Vector3>>;\r\n private _frontPlateDepth = 0.5;\r\n private _backPlateDepth = 0.04;\r\n private _backplateColor = new Color3(0.08, 0.15, 0.55);\r\n private _backplateToggledColor = new Color3(0.25, 0.4, 0.95);\r\n\r\n // Tooltip\r\n private _tooltipFade: Nullable<FadeInOutBehavior>;\r\n private _tooltipTextBlock: Nullable<TextBlock>;\r\n private _tooltipTexture: Nullable<AdvancedDynamicTexture>;\r\n private _tooltipMesh: Nullable<Mesh>;\r\n private _tooltipHoverObserver: Nullable<Observer<Control3D>>;\r\n private _tooltipOutObserver: Nullable<Observer<Control3D>>;\r\n\r\n private _disposeTooltip() {\r\n this._tooltipFade = null;\r\n if (this._tooltipTextBlock) {\r\n this._tooltipTextBlock.dispose();\r\n }\r\n if (this._tooltipTexture) {\r\n this._tooltipTexture.dispose();\r\n }\r\n if (this._tooltipMesh) {\r\n this._tooltipMesh.dispose();\r\n }\r\n this.onPointerEnterObservable.remove(this._tooltipHoverObserver);\r\n this.onPointerOutObservable.remove(this._tooltipOutObserver);\r\n }\r\n\r\n /**\r\n * Rendering ground id of all the mesh in the button\r\n */\r\n public set renderingGroupId(id: number) {\r\n this._backPlate.renderingGroupId = id;\r\n this._textPlate.renderingGroupId = id;\r\n this._frontPlate.renderingGroupId = id;\r\n\r\n if (this._tooltipMesh) {\r\n this._tooltipMesh.renderingGroupId = id;\r\n }\r\n }\r\n public get renderingGroupId(): number {\r\n return this._backPlate.renderingGroupId;\r\n }\r\n\r\n /**\r\n * Gets the mesh used to render this control\r\n */\r\n public get mesh(): Nullable<AbstractMesh> {\r\n return this._backPlate as AbstractMesh;\r\n }\r\n\r\n /**\r\n * Text to be displayed on the tooltip shown when hovering on the button. When set to null tooltip is disabled. (Default: null)\r\n */\r\n public set tooltipText(text: Nullable<string>) {\r\n if (!text) {\r\n this._disposeTooltip();\r\n return;\r\n }\r\n if (!this._tooltipFade) {\r\n const rightHandedScene = this._backPlate._scene.useRightHandedSystem;\r\n // Create tooltip with mesh and text\r\n this._tooltipMesh = CreatePlane(\"\", { size: 1 }, this._backPlate._scene);\r\n const tooltipBackground = CreatePlane(\"\", { size: 1, sideOrientation: Mesh.DOUBLESIDE }, this._backPlate._scene);\r\n const mat = new StandardMaterial(\"\", this._backPlate._scene);\r\n mat.diffuseColor = Color3.FromHexString(\"#212121\");\r\n tooltipBackground.material = mat;\r\n tooltipBackground.isPickable = false;\r\n this._tooltipMesh.addChild(tooltipBackground);\r\n tooltipBackground.position = Vector3.Forward(rightHandedScene).scale(0.05);\r\n this._tooltipMesh.scaling.y = 1 / 3;\r\n this._tooltipMesh.position = Vector3.Up().scale(0.7).add(Vector3.Forward(rightHandedScene).scale(-0.15));\r\n this._tooltipMesh.isPickable = false;\r\n this._tooltipMesh.parent = this._backPlate;\r\n\r\n // Create text texture for the tooltip\r\n this._tooltipTexture = AdvancedDynamicTexture.CreateForMesh(this._tooltipMesh);\r\n this._tooltipTextBlock = new TextBlock();\r\n this._tooltipTextBlock.scaleY = 3;\r\n this._tooltipTextBlock.color = \"white\";\r\n this._tooltipTextBlock.fontSize = 130;\r\n this._tooltipTexture.addControl(this._tooltipTextBlock);\r\n\r\n // Add hover action to tooltip\r\n this._tooltipFade = new FadeInOutBehavior();\r\n this._tooltipFade.delay = 500;\r\n this._tooltipMesh.addBehavior(this._tooltipFade);\r\n this._tooltipHoverObserver = this.onPointerEnterObservable.add(() => {\r\n if (this._tooltipFade) {\r\n this._tooltipFade.fadeIn(true);\r\n }\r\n });\r\n this._tooltipOutObserver = this.onPointerOutObservable.add(() => {\r\n if (this._tooltipFade) {\r\n this._tooltipFade.fadeIn(false);\r\n }\r\n });\r\n }\r\n if (this._tooltipTextBlock) {\r\n this._tooltipTextBlock.text = text;\r\n }\r\n }\r\n\r\n public get tooltipText() {\r\n if (this._tooltipTextBlock) {\r\n return this._tooltipTextBlock.text;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets or sets text for the button\r\n */\r\n public get text(): string {\r\n return this._text;\r\n }\r\n\r\n public set text(value: string) {\r\n if (this._text === value) {\r\n return;\r\n }\r\n\r\n this._text = value;\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Gets or sets the image url for the button\r\n */\r\n public get imageUrl(): string {\r\n return this._imageUrl;\r\n }\r\n\r\n public set imageUrl(value: string) {\r\n if (this._imageUrl === value) {\r\n return;\r\n }\r\n\r\n this._imageUrl = value;\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Gets the back material used by this button\r\n */\r\n public get backMaterial(): FluentMaterial {\r\n return this._backMaterial;\r\n }\r\n\r\n /**\r\n * Gets the front material used by this button\r\n */\r\n public get frontMaterial(): FluentButtonMaterial {\r\n return this._frontMaterial;\r\n }\r\n\r\n /**\r\n * Gets the plate material used by this button\r\n */\r\n public get plateMaterial(): StandardMaterial {\r\n return this._plateMaterial;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this button shares its material with other HolographicButtons\r\n */\r\n public get shareMaterials(): boolean {\r\n return this._shareMaterials;\r\n }\r\n\r\n /**\r\n * Sets whether the backplate is visible or hidden. Hiding the backplate is not recommended without some sort of replacement\r\n */\r\n public set isBackplateVisible(isVisible: boolean) {\r\n if (this.mesh && !!this._backMaterial) {\r\n if (isVisible && !this._isBackplateVisible) {\r\n this._backPlate.visibility = 1;\r\n } else if (!isVisible && this._isBackplateVisible) {\r\n this._backPlate.visibility = 0;\r\n }\r\n }\r\n\r\n this._isBackplateVisible = isVisible;\r\n }\r\n\r\n /**\r\n * Creates a new button\r\n * @param name defines the control name\r\n * @param shareMaterials\r\n */\r\n constructor(name?: string, shareMaterials = true) {\r\n super(name);\r\n\r\n this._shareMaterials = shareMaterials;\r\n\r\n this.pointerEnterAnimation = () => {\r\n this._frontMaterial.leftBlobEnable = true;\r\n this._frontMaterial.rightBlobEnable = true;\r\n };\r\n\r\n this.pointerOutAnimation = () => {\r\n this._frontMaterial.leftBlobEnable = false;\r\n this._frontMaterial.rightBlobEnable = false;\r\n };\r\n\r\n this.pointerDownAnimation = () => {\r\n if (this._frontPlate && !this.isActiveNearInteraction) {\r\n this._frontPlate.scaling.z = this._frontPlateDepth * 0.2;\r\n this._frontPlate.position = Vector3.Forward(this._frontPlate._scene.useRightHandedSystem).scale((this._frontPlateDepth - 0.2 * this._frontPlateDepth) / 2);\r\n this._textPlate.position = Vector3.Forward(this._textPlate._scene.useRightHandedSystem).scale(-(this._backPlateDepth + 0.2 * this._frontPlateDepth) / 2);\r\n }\r\n };\r\n this.pointerUpAnimation = () => {\r\n if (this._frontPlate) {\r\n this._frontPlate.scaling.z = this._frontPlateDepth;\r\n this._frontPlate.position = Vector3.Forward(this._frontPlate._scene.useRightHandedSystem).scale((this._frontPlateDepth - this._frontPlateDepth) / 2);\r\n this._textPlate.position = Vector3.Forward(this._textPlate._scene.useRightHandedSystem).scale(-(this._backPlateDepth + this._frontPlateDepth) / 2);\r\n }\r\n };\r\n\r\n this.onPointerMoveObservable.add((position) => {\r\n if (this._frontPlate && this.isActiveNearInteraction) {\r\n const scale = Vector3.Zero();\r\n if (this._backPlate.getWorldMatrix().decompose(scale, undefined, undefined)) {\r\n let interactionHeight = this._getInteractionHeight(position, this._backPlate.getAbsolutePosition()) / scale.z;\r\n interactionHeight = Scalar.Clamp(interactionHeight - this._backPlateDepth / 2, 0.2 * this._frontPlateDepth, this._frontPlateDepth);\r\n\r\n this._frontPlate.scaling.z = interactionHeight;\r\n this._frontPlate.position = Vector3.Forward(this._frontPlate._scene.useRightHandedSystem).scale((this._frontPlateDepth - interactionHeight) / 2);\r\n this._textPlate.position = Vector3.Forward(this._textPlate._scene.useRightHandedSystem).scale(-(this._backPlateDepth + interactionHeight) / 2);\r\n }\r\n }\r\n });\r\n\r\n this._pointerHoverObserver = this.onPointerMoveObservable.add((hoverPosition: Vector3) => {\r\n this._frontMaterial.globalLeftIndexTipPosition = hoverPosition;\r\n });\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"TouchHolographicButton\";\r\n }\r\n\r\n private _rebuildContent(): void {\r\n this._disposeFacadeTexture();\r\n\r\n const panel = new StackPanel();\r\n panel.isVertical = true;\r\n\r\n if (DomManagement.IsDocumentAvailable() && !!document.createElement) {\r\n if (this._imageUrl) {\r\n const image = new Image();\r\n image.source = this._imageUrl;\r\n image.paddingTop = \"40px\";\r\n image.height = \"180px\";\r\n image.width = \"100px\";\r\n image.paddingBottom = \"40px\";\r\n panel.addControl(image);\r\n }\r\n }\r\n\r\n if (this._text) {\r\n const text = new TextBlock();\r\n text.text = this._text;\r\n text.color = \"white\";\r\n text.height = \"30px\";\r\n text.fontSize = 24;\r\n panel.addControl(text);\r\n }\r\n\r\n this.content = panel;\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n this.name = this.name ?? \"TouchHolographicButton\";\r\n const collisionMesh = CreateBox(\r\n `${this.name}_collisionMesh`,\r\n {\r\n width: 1.0,\r\n height: 1.0,\r\n depth: this._frontPlateDepth,\r\n },\r\n scene\r\n );\r\n collisionMesh.isPickable = true;\r\n collisionMesh.isNearPickable = true;\r\n collisionMesh.visibility = 0;\r\n collisionMesh.position = Vector3.Forward(scene.useRightHandedSystem).scale(-this._frontPlateDepth / 2);\r\n\r\n SceneLoader.ImportMeshAsync(undefined, TouchHolographicButton.MODEL_BASE_URL, TouchHolographicButton.MODEL_FILENAME, scene).then((result) => {\r\n const alphaMesh = CreateBox(\r\n \"${this.name}_alphaMesh\",\r\n {\r\n width: 1.0,\r\n height: 1.0,\r\n depth: 1.0,\r\n },\r\n scene\r\n );\r\n alphaMesh.isPickable = false;\r\n alphaMesh.material = new StandardMaterial(\"${this.name}_alphaMesh_material\", scene);\r\n alphaMesh.material.alpha = 0.15;\r\n\r\n const importedFrontPlate = result.meshes[1];\r\n importedFrontPlate.name = `${this.name}_frontPlate`;\r\n importedFrontPlate.isPickable = false;\r\n importedFrontPlate.scaling.z = this._frontPlateDepth;\r\n alphaMesh.parent = importedFrontPlate;\r\n importedFrontPlate.parent = collisionMesh;\r\n if (this._frontMaterial) {\r\n importedFrontPlate.material = this._frontMaterial;\r\n }\r\n this._frontPlate = importedFrontPlate;\r\n });\r\n\r\n this._backPlate = CreateBox(\r\n `${this.name}_backPlate`,\r\n {\r\n width: 1.0,\r\n height: 1.0,\r\n depth: this._backPlateDepth,\r\n },\r\n scene\r\n );\r\n\r\n this._backPlate.position = Vector3.Forward(scene.useRightHandedSystem).scale(this._backPlateDepth / 2);\r\n this._backPlate.isPickable = false;\r\n\r\n this._textPlate = <Mesh>super._createNode(scene);\r\n this._textPlate.name = `${this.name}_textPlate`;\r\n this._textPlate.isPickable = false;\r\n this._textPlate.position = Vector3.Forward(scene.useRightHandedSystem).scale(-this._frontPlateDepth / 2);\r\n\r\n this._backPlate.addChild(collisionMesh);\r\n this._backPlate.addChild(this._textPlate);\r\n\r\n const tn = new TransformNode(`{this.name}_root`, scene);\r\n this._backPlate.setParent(tn);\r\n\r\n this.collisionMesh = collisionMesh;\r\n this.collidableFrontDirection = this._backPlate.forward.negate(); // Mesh is facing the wrong way\r\n\r\n return tn;\r\n }\r\n\r\n protected _applyFacade(facadeTexture: AdvancedDynamicTexture) {\r\n this._plateMaterial.emissiveTexture = facadeTexture;\r\n this._plateMaterial.opacityTexture = facadeTexture;\r\n this._plateMaterial.diffuseColor = new Color3(0.4, 0.4, 0.4);\r\n }\r\n\r\n private _createBackMaterial(mesh: Mesh) {\r\n this._backMaterial = new FluentMaterial(this.name + \"backPlateMaterial\", mesh.getScene());\r\n this._backMaterial.albedoColor = this._backplateColor;\r\n this._backMaterial.renderBorders = true;\r\n this._backMaterial.renderHoverLight = false;\r\n }\r\n\r\n private _createFrontMaterial(mesh: Mesh) {\r\n this._frontMaterial = new FluentButtonMaterial(this.name + \"Front Material\", mesh.getScene());\r\n }\r\n\r\n private _createPlateMaterial(mesh: Mesh) {\r\n this._plateMaterial = new StandardMaterial(this.name + \"Plate Material\", mesh.getScene());\r\n this._plateMaterial.specularColor = Color3.Black();\r\n }\r\n\r\n protected _onToggle(newState: boolean) {\r\n if (this._backMaterial) {\r\n if (newState) {\r\n this._backMaterial.albedoColor = this._backplateToggledColor;\r\n } else {\r\n this._backMaterial.albedoColor = this._backplateColor;\r\n }\r\n }\r\n\r\n super._onToggle(newState);\r\n }\r\n\r\n protected _affectMaterial(mesh: Mesh) {\r\n if (this._shareMaterials) {\r\n // Back\r\n if (!this._host._touchSharedMaterials[\"backFluentMaterial\"]) {\r\n this._createBackMaterial(mesh);\r\n this._host._touchSharedMaterials[\"backFluentMaterial\"] = this._backMaterial;\r\n } else {\r\n this._backMaterial = this._host._touchSharedMaterials[\"backFluentMaterial\"] as FluentMaterial;\r\n }\r\n\r\n // Front\r\n if (!this._host._touchSharedMaterials[\"frontFluentMaterial\"]) {\r\n this._createFrontMaterial(mesh);\r\n this._host._touchSharedMaterials[\"frontFluentMaterial\"] = this._frontMaterial;\r\n } else {\r\n this._frontMaterial = this._host._touchSharedMaterials[\"frontFluentMaterial\"] as FluentButtonMaterial;\r\n }\r\n } else {\r\n this._createBackMaterial(mesh);\r\n this._createFrontMaterial(mesh);\r\n }\r\n\r\n this._createPlateMaterial(mesh);\r\n this._backPlate.material = this._backMaterial;\r\n this._textPlate.material = this._plateMaterial;\r\n\r\n if (!this._isBackplateVisible) {\r\n this._backPlate.visibility = 0;\r\n }\r\n if (this._frontPlate) {\r\n this._frontPlate.material = this._frontMaterial;\r\n }\r\n\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n super.dispose(); // will dispose main mesh ie. back plate\r\n\r\n this._disposeTooltip();\r\n this.onPointerMoveObservable.remove(this._pointerHoverObserver);\r\n\r\n if (!this.shareMaterials) {\r\n this._backMaterial.dispose();\r\n this._frontMaterial.dispose();\r\n this._plateMaterial.dispose();\r\n\r\n if (this._pickedPointObserver) {\r\n this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);\r\n this._pickedPointObserver = null;\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"touchHolographicButton.js","sourceRoot":"","sources":["../../../../../../lts/gui/generated/3D/controls/touchHolographicButton.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport { StandardMaterial } from \"core/Materials/standardMaterial\";\r\nimport { TransformNode } from \"core/Meshes/transformNode\";\r\nimport { Mesh } from \"core/Meshes/mesh\";\r\nimport { CreatePlane } from \"core/Meshes/Builders/planeBuilder\";\r\nimport { CreateBox } from \"core/Meshes/Builders/boxBuilder\";\r\nimport { FadeInOutBehavior } from \"core/Behaviors/Meshes/fadeInOutBehavior\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { FluentMaterial } from \"../materials/fluent/fluentMaterial\";\r\nimport { FluentButtonMaterial } from \"../materials/fluentButton/fluentButtonMaterial\";\r\nimport { StackPanel } from \"../../2D/controls/stackPanel\";\r\nimport { Image } from \"../../2D/controls/image\";\r\nimport { TextBlock } from \"../../2D/controls/textBlock\";\r\nimport { AdvancedDynamicTexture } from \"../../2D/advancedDynamicTexture\";\r\nimport type { Control3D } from \"./control3D\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { TouchButton3D } from \"./touchButton3D\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { SceneLoader } from \"core/Loading/sceneLoader\";\r\nimport { DomManagement } from \"core/Misc/domManagement\";\r\nimport { Scalar } from \"core/Maths/math.scalar\";\r\n\r\n/**\r\n * Class used to create a holographic button in 3D\r\n * @since 5.0.0\r\n */\r\nexport class TouchHolographicButton extends TouchButton3D {\r\n /**\r\n * Base Url for the button model.\r\n */\r\n public static MODEL_BASE_URL: string = \"https://assets.babylonjs.com/meshes/MRTK/\";\r\n /**\r\n * File name for the button model.\r\n */\r\n public static MODEL_FILENAME: string = \"mrtk-fluent-button.glb\";\r\n\r\n private _backPlate: Mesh;\r\n private _textPlate: Mesh;\r\n private _frontPlate: AbstractMesh;\r\n private _text: string;\r\n private _imageUrl: string;\r\n private _shareMaterials = true;\r\n private _isBackplateVisible = true;\r\n private _frontMaterial: FluentButtonMaterial;\r\n private _backMaterial: FluentMaterial;\r\n private _plateMaterial: StandardMaterial;\r\n private _pickedPointObserver: Nullable<Observer<Nullable<Vector3>>>;\r\n private _pointerHoverObserver: Nullable<Observer<Vector3>>;\r\n private _frontPlateDepth = 0.5;\r\n private _backPlateDepth = 0.04;\r\n private _backplateColor = new Color3(0.08, 0.15, 0.55);\r\n private _backplateToggledColor = new Color3(0.25, 0.4, 0.95);\r\n\r\n // Tooltip\r\n private _tooltipFade: Nullable<FadeInOutBehavior>;\r\n private _tooltipTextBlock: Nullable<TextBlock>;\r\n private _tooltipTexture: Nullable<AdvancedDynamicTexture>;\r\n private _tooltipMesh: Nullable<Mesh>;\r\n private _tooltipHoverObserver: Nullable<Observer<Control3D>>;\r\n private _tooltipOutObserver: Nullable<Observer<Control3D>>;\r\n\r\n private _disposeTooltip() {\r\n this._tooltipFade = null;\r\n if (this._tooltipTextBlock) {\r\n this._tooltipTextBlock.dispose();\r\n }\r\n if (this._tooltipTexture) {\r\n this._tooltipTexture.dispose();\r\n }\r\n if (this._tooltipMesh) {\r\n this._tooltipMesh.dispose();\r\n }\r\n this.onPointerEnterObservable.remove(this._tooltipHoverObserver);\r\n this.onPointerOutObservable.remove(this._tooltipOutObserver);\r\n }\r\n\r\n /**\r\n * Rendering ground id of all the mesh in the button\r\n */\r\n public set renderingGroupId(id: number) {\r\n this._backPlate.renderingGroupId = id;\r\n this._textPlate.renderingGroupId = id;\r\n this._frontPlate.renderingGroupId = id;\r\n\r\n if (this._tooltipMesh) {\r\n this._tooltipMesh.renderingGroupId = id;\r\n }\r\n }\r\n public get renderingGroupId(): number {\r\n return this._backPlate.renderingGroupId;\r\n }\r\n\r\n /**\r\n * Gets the mesh used to render this control\r\n */\r\n public get mesh(): Nullable<AbstractMesh> {\r\n return this._backPlate as AbstractMesh;\r\n }\r\n\r\n /**\r\n * Text to be displayed on the tooltip shown when hovering on the button. When set to null tooltip is disabled. (Default: null)\r\n */\r\n public set tooltipText(text: Nullable<string>) {\r\n if (!text) {\r\n this._disposeTooltip();\r\n return;\r\n }\r\n if (!this._tooltipFade) {\r\n const rightHandedScene = this._backPlate._scene.useRightHandedSystem;\r\n // Create tooltip with mesh and text\r\n this._tooltipMesh = CreatePlane(\"\", { size: 1 }, this._backPlate._scene);\r\n const tooltipBackground = CreatePlane(\"\", { size: 1, sideOrientation: Mesh.DOUBLESIDE }, this._backPlate._scene);\r\n const mat = new StandardMaterial(\"\", this._backPlate._scene);\r\n mat.diffuseColor = Color3.FromHexString(\"#212121\");\r\n tooltipBackground.material = mat;\r\n tooltipBackground.isPickable = false;\r\n this._tooltipMesh.addChild(tooltipBackground);\r\n tooltipBackground.position = Vector3.Forward(rightHandedScene).scale(0.05);\r\n this._tooltipMesh.scaling.y = 1 / 3;\r\n this._tooltipMesh.position = Vector3.Up().scale(0.7).add(Vector3.Forward(rightHandedScene).scale(-0.15));\r\n this._tooltipMesh.isPickable = false;\r\n this._tooltipMesh.parent = this._backPlate;\r\n\r\n // Create text texture for the tooltip\r\n this._tooltipTexture = AdvancedDynamicTexture.CreateForMesh(this._tooltipMesh);\r\n this._tooltipTextBlock = new TextBlock();\r\n this._tooltipTextBlock.scaleY = 3;\r\n this._tooltipTextBlock.color = \"white\";\r\n this._tooltipTextBlock.fontSize = 130;\r\n this._tooltipTexture.addControl(this._tooltipTextBlock);\r\n\r\n // Add hover action to tooltip\r\n this._tooltipFade = new FadeInOutBehavior();\r\n this._tooltipFade.delay = 500;\r\n this._tooltipMesh.addBehavior(this._tooltipFade);\r\n this._tooltipHoverObserver = this.onPointerEnterObservable.add(() => {\r\n if (this._tooltipFade) {\r\n this._tooltipFade.fadeIn(true);\r\n }\r\n });\r\n this._tooltipOutObserver = this.onPointerOutObservable.add(() => {\r\n if (this._tooltipFade) {\r\n this._tooltipFade.fadeIn(false);\r\n }\r\n });\r\n }\r\n if (this._tooltipTextBlock) {\r\n this._tooltipTextBlock.text = text;\r\n }\r\n }\r\n\r\n public get tooltipText() {\r\n if (this._tooltipTextBlock) {\r\n return this._tooltipTextBlock.text;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets or sets text for the button\r\n */\r\n public get text(): string {\r\n return this._text;\r\n }\r\n\r\n public set text(value: string) {\r\n if (this._text === value) {\r\n return;\r\n }\r\n\r\n this._text = value;\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Gets or sets the image url for the button\r\n */\r\n public get imageUrl(): string {\r\n return this._imageUrl;\r\n }\r\n\r\n public set imageUrl(value: string) {\r\n if (this._imageUrl === value) {\r\n return;\r\n }\r\n\r\n this._imageUrl = value;\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Gets the back material used by this button\r\n */\r\n public get backMaterial(): FluentMaterial {\r\n return this._backMaterial;\r\n }\r\n\r\n /**\r\n * Gets the front material used by this button\r\n */\r\n public get frontMaterial(): FluentButtonMaterial {\r\n return this._frontMaterial;\r\n }\r\n\r\n /**\r\n * Gets the plate material used by this button\r\n */\r\n public get plateMaterial(): StandardMaterial {\r\n return this._plateMaterial;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if this button shares its material with other HolographicButtons\r\n */\r\n public get shareMaterials(): boolean {\r\n return this._shareMaterials;\r\n }\r\n\r\n /**\r\n * Sets whether the backplate is visible or hidden. Hiding the backplate is not recommended without some sort of replacement\r\n */\r\n public set isBackplateVisible(isVisible: boolean) {\r\n if (this.mesh && !!this._backMaterial) {\r\n if (isVisible && !this._isBackplateVisible) {\r\n this._backPlate.visibility = 1;\r\n } else if (!isVisible && this._isBackplateVisible) {\r\n this._backPlate.visibility = 0;\r\n }\r\n }\r\n\r\n this._isBackplateVisible = isVisible;\r\n }\r\n\r\n /**\r\n * Creates a new button\r\n * @param name defines the control name\r\n * @param shareMaterials\r\n */\r\n constructor(name?: string, shareMaterials = true) {\r\n super(name);\r\n\r\n this._shareMaterials = shareMaterials;\r\n\r\n this.pointerEnterAnimation = () => {\r\n this._frontMaterial.leftBlobEnable = true;\r\n this._frontMaterial.rightBlobEnable = true;\r\n };\r\n\r\n this.pointerOutAnimation = () => {\r\n this._frontMaterial.leftBlobEnable = false;\r\n this._frontMaterial.rightBlobEnable = false;\r\n };\r\n\r\n this.pointerDownAnimation = () => {\r\n if (this._frontPlate && !this.isActiveNearInteraction) {\r\n this._frontPlate.scaling.z = this._frontPlateDepth * 0.2;\r\n this._frontPlate.position = Vector3.Forward(this._frontPlate._scene.useRightHandedSystem).scale((this._frontPlateDepth - 0.2 * this._frontPlateDepth) / 2);\r\n this._textPlate.position = Vector3.Forward(this._textPlate._scene.useRightHandedSystem).scale(-(this._backPlateDepth + 0.2 * this._frontPlateDepth) / 2);\r\n }\r\n };\r\n this.pointerUpAnimation = () => {\r\n if (this._frontPlate) {\r\n this._frontPlate.scaling.z = this._frontPlateDepth;\r\n this._frontPlate.position = Vector3.Forward(this._frontPlate._scene.useRightHandedSystem).scale((this._frontPlateDepth - this._frontPlateDepth) / 2);\r\n this._textPlate.position = Vector3.Forward(this._textPlate._scene.useRightHandedSystem).scale(-(this._backPlateDepth + this._frontPlateDepth) / 2);\r\n }\r\n };\r\n\r\n this.onPointerMoveObservable.add((position) => {\r\n if (this._frontPlate && this.isActiveNearInteraction) {\r\n const scale = Vector3.Zero();\r\n if (this._backPlate.getWorldMatrix().decompose(scale, undefined, undefined)) {\r\n let interactionHeight = this._getInteractionHeight(position, this._backPlate.getAbsolutePosition()) / scale.z;\r\n interactionHeight = Scalar.Clamp(interactionHeight - this._backPlateDepth / 2, 0.2 * this._frontPlateDepth, this._frontPlateDepth);\r\n\r\n this._frontPlate.scaling.z = interactionHeight;\r\n this._frontPlate.position = Vector3.Forward(this._frontPlate._scene.useRightHandedSystem).scale((this._frontPlateDepth - interactionHeight) / 2);\r\n this._textPlate.position = Vector3.Forward(this._textPlate._scene.useRightHandedSystem).scale(-(this._backPlateDepth + interactionHeight) / 2);\r\n }\r\n }\r\n });\r\n\r\n this._pointerHoverObserver = this.onPointerMoveObservable.add((hoverPosition: Vector3) => {\r\n this._frontMaterial.globalLeftIndexTipPosition = hoverPosition;\r\n });\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"TouchHolographicButton\";\r\n }\r\n\r\n private _rebuildContent(): void {\r\n this._disposeFacadeTexture();\r\n\r\n const panel = new StackPanel();\r\n panel.isVertical = true;\r\n\r\n if (DomManagement.IsDocumentAvailable() && !!document.createElement) {\r\n if (this._imageUrl) {\r\n const image = new Image();\r\n image.source = this._imageUrl;\r\n image.paddingTop = \"40px\";\r\n image.height = \"180px\";\r\n image.width = \"100px\";\r\n image.paddingBottom = \"40px\";\r\n panel.addControl(image);\r\n }\r\n }\r\n\r\n if (this._text) {\r\n const text = new TextBlock();\r\n text.text = this._text;\r\n text.color = \"white\";\r\n text.height = \"30px\";\r\n text.fontSize = 24;\r\n panel.addControl(text);\r\n }\r\n\r\n this.content = panel;\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n this.name = this.name ?? \"TouchHolographicButton\";\r\n const collisionMesh = CreateBox(\r\n `${this.name}_collisionMesh`,\r\n {\r\n width: 1.0,\r\n height: 1.0,\r\n depth: this._frontPlateDepth,\r\n },\r\n scene\r\n );\r\n collisionMesh.isPickable = true;\r\n collisionMesh.isNearPickable = true;\r\n collisionMesh.visibility = 0;\r\n collisionMesh.position = Vector3.Forward(scene.useRightHandedSystem).scale(-this._frontPlateDepth / 2);\r\n\r\n SceneLoader.ImportMeshAsync(undefined, TouchHolographicButton.MODEL_BASE_URL, TouchHolographicButton.MODEL_FILENAME, scene).then((result) => {\r\n const alphaMesh = CreateBox(\r\n \"${this.name}_alphaMesh\",\r\n {\r\n width: 1.0,\r\n height: 1.0,\r\n depth: 1.0,\r\n },\r\n scene\r\n );\r\n alphaMesh.isPickable = false;\r\n alphaMesh.material = new StandardMaterial(\"${this.name}_alphaMesh_material\", scene);\r\n alphaMesh.material.alpha = 0.15;\r\n\r\n const importedFrontPlate = result.meshes[1];\r\n importedFrontPlate.name = `${this.name}_frontPlate`;\r\n importedFrontPlate.isPickable = false;\r\n importedFrontPlate.scaling.z = this._frontPlateDepth;\r\n alphaMesh.parent = importedFrontPlate;\r\n importedFrontPlate.parent = collisionMesh;\r\n if (this._frontMaterial) {\r\n importedFrontPlate.material = this._frontMaterial;\r\n }\r\n this._frontPlate = importedFrontPlate;\r\n });\r\n\r\n this._backPlate = CreateBox(\r\n `${this.name}_backPlate`,\r\n {\r\n width: 1.0,\r\n height: 1.0,\r\n depth: this._backPlateDepth,\r\n },\r\n scene\r\n );\r\n\r\n this._backPlate.position = Vector3.Forward(scene.useRightHandedSystem).scale(this._backPlateDepth / 2);\r\n this._backPlate.isPickable = false;\r\n\r\n this._textPlate = <Mesh>super._createNode(scene);\r\n this._textPlate.name = `${this.name}_textPlate`;\r\n this._textPlate.isPickable = false;\r\n this._textPlate.position = Vector3.Forward(scene.useRightHandedSystem).scale(-this._frontPlateDepth / 2);\r\n\r\n this._backPlate.addChild(collisionMesh);\r\n this._backPlate.addChild(this._textPlate);\r\n\r\n const tn = new TransformNode(`{this.name}_root`, scene);\r\n this._backPlate.setParent(tn);\r\n\r\n this.collisionMesh = collisionMesh;\r\n this.collidableFrontDirection = this._backPlate.forward.negate(); // Mesh is facing the wrong way\r\n\r\n return tn;\r\n }\r\n\r\n protected _applyFacade(facadeTexture: AdvancedDynamicTexture) {\r\n this._plateMaterial.emissiveTexture = facadeTexture;\r\n this._plateMaterial.opacityTexture = facadeTexture;\r\n this._plateMaterial.diffuseColor = new Color3(0.4, 0.4, 0.4);\r\n }\r\n\r\n private _createBackMaterial(mesh: Mesh) {\r\n this._backMaterial = new FluentMaterial(this.name + \"backPlateMaterial\", mesh.getScene());\r\n this._backMaterial.albedoColor = this._backplateColor;\r\n this._backMaterial.renderBorders = true;\r\n this._backMaterial.renderHoverLight = false;\r\n }\r\n\r\n private _createFrontMaterial(mesh: Mesh) {\r\n this._frontMaterial = new FluentButtonMaterial(this.name + \"Front Material\", mesh.getScene());\r\n }\r\n\r\n private _createPlateMaterial(mesh: Mesh) {\r\n this._plateMaterial = new StandardMaterial(this.name + \"Plate Material\", mesh.getScene());\r\n this._plateMaterial.specularColor = Color3.Black();\r\n }\r\n\r\n protected _onToggle(newState: boolean) {\r\n if (this._backMaterial) {\r\n if (newState) {\r\n this._backMaterial.albedoColor = this._backplateToggledColor;\r\n } else {\r\n this._backMaterial.albedoColor = this._backplateColor;\r\n }\r\n }\r\n\r\n super._onToggle(newState);\r\n }\r\n\r\n protected _affectMaterial(mesh: Mesh) {\r\n if (this._shareMaterials) {\r\n // Back\r\n if (!this._host._touchSharedMaterials[\"backFluentMaterial\"]) {\r\n this._createBackMaterial(mesh);\r\n this._host._touchSharedMaterials[\"backFluentMaterial\"] = this._backMaterial;\r\n } else {\r\n this._backMaterial = this._host._touchSharedMaterials[\"backFluentMaterial\"] as FluentMaterial;\r\n }\r\n\r\n // Front\r\n if (!this._host._touchSharedMaterials[\"frontFluentMaterial\"]) {\r\n this._createFrontMaterial(mesh);\r\n this._host._touchSharedMaterials[\"frontFluentMaterial\"] = this._frontMaterial;\r\n } else {\r\n this._frontMaterial = this._host._touchSharedMaterials[\"frontFluentMaterial\"] as FluentButtonMaterial;\r\n }\r\n } else {\r\n this._createBackMaterial(mesh);\r\n this._createFrontMaterial(mesh);\r\n }\r\n\r\n this._createPlateMaterial(mesh);\r\n this._backPlate.material = this._backMaterial;\r\n this._textPlate.material = this._plateMaterial;\r\n\r\n if (!this._isBackplateVisible) {\r\n this._backPlate.visibility = 0;\r\n }\r\n if (this._frontPlate) {\r\n this._frontPlate.material = this._frontMaterial;\r\n }\r\n\r\n this._rebuildContent();\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n super.dispose(); // will dispose main mesh ie. back plate\r\n\r\n this._disposeTooltip();\r\n this.onPointerMoveObservable.remove(this._pointerHoverObserver);\r\n\r\n if (!this.shareMaterials) {\r\n this._backMaterial.dispose();\r\n this._frontMaterial.dispose();\r\n this._plateMaterial.dispose();\r\n\r\n if (this._pickedPointObserver) {\r\n this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);\r\n this._pickedPointObserver = null;\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -1,61 +1,61 @@
1
- import { Scene } from "@babylonjs/core/scene.js";
2
- import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
3
- import { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
4
- import { Nullable } from "@babylonjs/core/types.js";
5
- import { Control3D } from "./control3D";
6
- import { VolumeBasedPanel } from "./volumeBasedPanel";
7
- import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
8
- import { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js";
9
- import { Container3D } from "./container3D";
10
- import { TouchHolographicButton } from "./touchHolographicButton";
11
- /**
12
- * Simple menu that can contain holographic buttons
13
- */
14
- export declare class TouchHolographicMenu extends VolumeBasedPanel {
15
- protected _backPlate: Mesh;
16
- private _backPlateMaterial;
17
- private _pickedPointObserver;
18
- private _currentMin;
19
- private _currentMax;
20
- private _backPlateMargin;
21
- /**
22
- * Scale for the buttons added to the menu
23
- */
24
- protected static MENU_BUTTON_SCALE: number;
25
- /**
26
- * Gets or sets the margin size of the backplate in button size units.
27
- * Setting this to 1, will make the backPlate margin the size of 1 button
28
- */
29
- get backPlateMargin(): number;
30
- set backPlateMargin(value: number);
31
- protected _createNode(scene: Scene): Nullable<TransformNode>;
32
- protected _affectMaterial(mesh: AbstractMesh): void;
33
- protected _mapGridNode(control: Control3D, nodePosition: Vector3): void;
34
- protected _finalProcessing(): void;
35
- private _updateCurrentMinMax;
36
- private _updateMargins;
37
- /**
38
- * Creates a holographic menu GUI 3D control
39
- * @param name name of the menu
40
- */
41
- constructor(name?: string);
42
- /**
43
- * Adds a button to the menu.
44
- * Please note that the back material of the button will be set to transparent as it is attached to the menu.
45
- *
46
- * @param button Button to add
47
- * @returns This menu
48
- */
49
- addButton(button: TouchHolographicButton): TouchHolographicMenu;
50
- /**
51
- * This method should not be used directly. It is inherited from `Container3D`.
52
- * Please use `addButton` instead.
53
- * @param _control
54
- * @returns
55
- */
56
- addControl(_control: Control3D): Container3D;
57
- /**
58
- * Disposes the menu
59
- */
60
- dispose(): void;
61
- }
1
+ import type { Scene } from "@babylonjs/core/scene.js";
2
+ import type { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
3
+ import type { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
4
+ import type { Nullable } from "@babylonjs/core/types.js";
5
+ import type { Control3D } from "./control3D";
6
+ import { VolumeBasedPanel } from "./volumeBasedPanel";
7
+ import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
8
+ import type { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js";
9
+ import type { Container3D } from "./container3D";
10
+ import type { TouchHolographicButton } from "./touchHolographicButton";
11
+ /**
12
+ * Simple menu that can contain holographic buttons
13
+ */
14
+ export declare class TouchHolographicMenu extends VolumeBasedPanel {
15
+ protected _backPlate: Mesh;
16
+ private _backPlateMaterial;
17
+ private _pickedPointObserver;
18
+ private _currentMin;
19
+ private _currentMax;
20
+ private _backPlateMargin;
21
+ /**
22
+ * Scale for the buttons added to the menu
23
+ */
24
+ protected static MENU_BUTTON_SCALE: number;
25
+ /**
26
+ * Gets or sets the margin size of the backplate in button size units.
27
+ * Setting this to 1, will make the backPlate margin the size of 1 button
28
+ */
29
+ get backPlateMargin(): number;
30
+ set backPlateMargin(value: number);
31
+ protected _createNode(scene: Scene): Nullable<TransformNode>;
32
+ protected _affectMaterial(mesh: AbstractMesh): void;
33
+ protected _mapGridNode(control: Control3D, nodePosition: Vector3): void;
34
+ protected _finalProcessing(): void;
35
+ private _updateCurrentMinMax;
36
+ private _updateMargins;
37
+ /**
38
+ * Creates a holographic menu GUI 3D control
39
+ * @param name name of the menu
40
+ */
41
+ constructor(name?: string);
42
+ /**
43
+ * Adds a button to the menu.
44
+ * Please note that the back material of the button will be set to transparent as it is attached to the menu.
45
+ *
46
+ * @param button Button to add
47
+ * @returns This menu
48
+ */
49
+ addButton(button: TouchHolographicButton): TouchHolographicMenu;
50
+ /**
51
+ * This method should not be used directly. It is inherited from `Container3D`.
52
+ * Please use `addButton` instead.
53
+ * @param _control
54
+ * @returns
55
+ */
56
+ addControl(_control: Control3D): Container3D;
57
+ /**
58
+ * Disposes the menu
59
+ */
60
+ dispose(): void;
61
+ }
@@ -1,150 +1,150 @@
1
- import { __extends } from "tslib";
2
- import { VolumeBasedPanel } from "./volumeBasedPanel.js";
3
- import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
4
- import { CreateBox } from "@babylonjs/core/Meshes/Builders/boxBuilder.js";
5
- import { FluentMaterial } from "../materials/fluent/fluentMaterial.js";
6
- import { Color3 } from "@babylonjs/core/Maths/math.color.js";
7
- import { Logger } from "@babylonjs/core/Misc/logger.js";
8
- /**
9
- * Simple menu that can contain holographic buttons
10
- */
11
- var TouchHolographicMenu = /** @class */ (function (_super) {
12
- __extends(TouchHolographicMenu, _super);
13
- /**
14
- * Creates a holographic menu GUI 3D control
15
- * @param name name of the menu
16
- */
17
- function TouchHolographicMenu(name) {
18
- var _this = _super.call(this, name) || this;
19
- _this._backPlateMargin = 1.25;
20
- return _this;
21
- }
22
- Object.defineProperty(TouchHolographicMenu.prototype, "backPlateMargin", {
23
- /**
24
- * Gets or sets the margin size of the backplate in button size units.
25
- * Setting this to 1, will make the backPlate margin the size of 1 button
26
- */
27
- get: function () {
28
- return this._backPlateMargin;
29
- },
30
- set: function (value) {
31
- var _this = this;
32
- this._backPlateMargin = value;
33
- if (this._children.length >= 1) {
34
- this.children.forEach(function (control) {
35
- _this._updateCurrentMinMax(control.position);
36
- });
37
- this._updateMargins();
38
- }
39
- },
40
- enumerable: false,
41
- configurable: true
42
- });
43
- TouchHolographicMenu.prototype._createNode = function (scene) {
44
- var node = new Mesh("menu_".concat(this.name), scene);
45
- this._backPlate = CreateBox("backPlate" + this.name, { size: 1 }, scene);
46
- this._backPlate.parent = node;
47
- return node;
48
- };
49
- TouchHolographicMenu.prototype._affectMaterial = function (mesh) {
50
- var _this = this;
51
- this._backPlateMaterial = new FluentMaterial(this.name + "backPlateMaterial", mesh.getScene());
52
- this._backPlateMaterial.albedoColor = new Color3(0.08, 0.15, 0.55);
53
- this._backPlateMaterial.renderBorders = true;
54
- this._backPlateMaterial.renderHoverLight = true;
55
- this._pickedPointObserver = this._host.onPickedPointChangedObservable.add(function (pickedPoint) {
56
- if (pickedPoint) {
57
- _this._backPlateMaterial.hoverPosition = pickedPoint;
58
- _this._backPlateMaterial.hoverColor.a = 1.0;
59
- }
60
- else {
61
- _this._backPlateMaterial.hoverColor.a = 0;
62
- }
63
- });
64
- this._backPlate.material = this._backPlateMaterial;
65
- };
66
- TouchHolographicMenu.prototype._mapGridNode = function (control, nodePosition) {
67
- // Simple plane mapping for the menu
68
- var mesh = control.mesh;
69
- if (!mesh) {
70
- return;
71
- }
72
- control.position = nodePosition.clone();
73
- this._updateCurrentMinMax(nodePosition);
74
- };
75
- TouchHolographicMenu.prototype._finalProcessing = function () {
76
- this._updateMargins();
77
- };
78
- TouchHolographicMenu.prototype._updateCurrentMinMax = function (nodePosition) {
79
- if (!this._currentMin) {
80
- this._currentMin = nodePosition.clone();
81
- this._currentMax = nodePosition.clone();
82
- }
83
- this._currentMin.minimizeInPlace(nodePosition);
84
- this._currentMax.maximizeInPlace(nodePosition);
85
- };
86
- TouchHolographicMenu.prototype._updateMargins = function () {
87
- if (this._children.length > 0) {
88
- this._currentMin.addInPlaceFromFloats(-this._cellWidth / 2, -this._cellHeight / 2, 0);
89
- this._currentMax.addInPlaceFromFloats(this._cellWidth / 2, this._cellHeight / 2, 0);
90
- var extendSize = this._currentMax.subtract(this._currentMin);
91
- // Also add a % margin
92
- this._backPlate.scaling.x = extendSize.x + this._cellWidth * this.backPlateMargin;
93
- this._backPlate.scaling.y = extendSize.y + this._cellHeight * this.backPlateMargin;
94
- this._backPlate.scaling.z = 0.001;
95
- for (var i = 0; i < this._children.length; i++) {
96
- this._children[i].position.subtractInPlace(this._currentMin).subtractInPlace(extendSize.scale(0.5));
97
- this._children[i].position.z -= 0.01;
98
- }
99
- }
100
- this._currentMin = null;
101
- this._currentMax = null;
102
- };
103
- /**
104
- * Adds a button to the menu.
105
- * Please note that the back material of the button will be set to transparent as it is attached to the menu.
106
- *
107
- * @param button Button to add
108
- * @returns This menu
109
- */
110
- TouchHolographicMenu.prototype.addButton = function (button) {
111
- // Block updating the layout until the button is resized (which has to happen after node creation)
112
- var wasLayoutBlocked = this.blockLayout;
113
- if (!wasLayoutBlocked) {
114
- this.blockLayout = true;
115
- }
116
- _super.prototype.addControl.call(this, button);
117
- button.isBackplateVisible = false;
118
- button.scaling.scaleInPlace(TouchHolographicMenu.MENU_BUTTON_SCALE);
119
- // Unblocking the layout triggers the pending layout update that uses the size of the buttons to determine the size of the backing mesh
120
- if (!wasLayoutBlocked) {
121
- this.blockLayout = false;
122
- }
123
- return this;
124
- };
125
- /**
126
- * This method should not be used directly. It is inherited from `Container3D`.
127
- * Please use `addButton` instead.
128
- * @param _control
129
- * @returns
130
- */
131
- TouchHolographicMenu.prototype.addControl = function (_control) {
132
- Logger.Warn("TouchHolographicMenu can only contain buttons. Please use the method `addButton` instead.");
133
- return this;
134
- };
135
- /**
136
- * Disposes the menu
137
- */
138
- TouchHolographicMenu.prototype.dispose = function () {
139
- _super.prototype.dispose.call(this);
140
- this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);
141
- };
142
- /**
143
- * Scale for the buttons added to the menu
144
- */
145
- // eslint-disable-next-line @typescript-eslint/naming-convention
146
- TouchHolographicMenu.MENU_BUTTON_SCALE = 1;
147
- return TouchHolographicMenu;
148
- }(VolumeBasedPanel));
149
- export { TouchHolographicMenu };
1
+ import { __extends } from "tslib";
2
+ import { VolumeBasedPanel } from "./volumeBasedPanel.js";
3
+ import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
4
+ import { CreateBox } from "@babylonjs/core/Meshes/Builders/boxBuilder.js";
5
+ import { FluentMaterial } from "../materials/fluent/fluentMaterial.js";
6
+ import { Color3 } from "@babylonjs/core/Maths/math.color.js";
7
+ import { Logger } from "@babylonjs/core/Misc/logger.js";
8
+ /**
9
+ * Simple menu that can contain holographic buttons
10
+ */
11
+ var TouchHolographicMenu = /** @class */ (function (_super) {
12
+ __extends(TouchHolographicMenu, _super);
13
+ /**
14
+ * Creates a holographic menu GUI 3D control
15
+ * @param name name of the menu
16
+ */
17
+ function TouchHolographicMenu(name) {
18
+ var _this = _super.call(this, name) || this;
19
+ _this._backPlateMargin = 1.25;
20
+ return _this;
21
+ }
22
+ Object.defineProperty(TouchHolographicMenu.prototype, "backPlateMargin", {
23
+ /**
24
+ * Gets or sets the margin size of the backplate in button size units.
25
+ * Setting this to 1, will make the backPlate margin the size of 1 button
26
+ */
27
+ get: function () {
28
+ return this._backPlateMargin;
29
+ },
30
+ set: function (value) {
31
+ var _this = this;
32
+ this._backPlateMargin = value;
33
+ if (this._children.length >= 1) {
34
+ this.children.forEach(function (control) {
35
+ _this._updateCurrentMinMax(control.position);
36
+ });
37
+ this._updateMargins();
38
+ }
39
+ },
40
+ enumerable: false,
41
+ configurable: true
42
+ });
43
+ TouchHolographicMenu.prototype._createNode = function (scene) {
44
+ var node = new Mesh("menu_".concat(this.name), scene);
45
+ this._backPlate = CreateBox("backPlate" + this.name, { size: 1 }, scene);
46
+ this._backPlate.parent = node;
47
+ return node;
48
+ };
49
+ TouchHolographicMenu.prototype._affectMaterial = function (mesh) {
50
+ var _this = this;
51
+ this._backPlateMaterial = new FluentMaterial(this.name + "backPlateMaterial", mesh.getScene());
52
+ this._backPlateMaterial.albedoColor = new Color3(0.08, 0.15, 0.55);
53
+ this._backPlateMaterial.renderBorders = true;
54
+ this._backPlateMaterial.renderHoverLight = true;
55
+ this._pickedPointObserver = this._host.onPickedPointChangedObservable.add(function (pickedPoint) {
56
+ if (pickedPoint) {
57
+ _this._backPlateMaterial.hoverPosition = pickedPoint;
58
+ _this._backPlateMaterial.hoverColor.a = 1.0;
59
+ }
60
+ else {
61
+ _this._backPlateMaterial.hoverColor.a = 0;
62
+ }
63
+ });
64
+ this._backPlate.material = this._backPlateMaterial;
65
+ };
66
+ TouchHolographicMenu.prototype._mapGridNode = function (control, nodePosition) {
67
+ // Simple plane mapping for the menu
68
+ var mesh = control.mesh;
69
+ if (!mesh) {
70
+ return;
71
+ }
72
+ control.position = nodePosition.clone();
73
+ this._updateCurrentMinMax(nodePosition);
74
+ };
75
+ TouchHolographicMenu.prototype._finalProcessing = function () {
76
+ this._updateMargins();
77
+ };
78
+ TouchHolographicMenu.prototype._updateCurrentMinMax = function (nodePosition) {
79
+ if (!this._currentMin) {
80
+ this._currentMin = nodePosition.clone();
81
+ this._currentMax = nodePosition.clone();
82
+ }
83
+ this._currentMin.minimizeInPlace(nodePosition);
84
+ this._currentMax.maximizeInPlace(nodePosition);
85
+ };
86
+ TouchHolographicMenu.prototype._updateMargins = function () {
87
+ if (this._children.length > 0) {
88
+ this._currentMin.addInPlaceFromFloats(-this._cellWidth / 2, -this._cellHeight / 2, 0);
89
+ this._currentMax.addInPlaceFromFloats(this._cellWidth / 2, this._cellHeight / 2, 0);
90
+ var extendSize = this._currentMax.subtract(this._currentMin);
91
+ // Also add a % margin
92
+ this._backPlate.scaling.x = extendSize.x + this._cellWidth * this.backPlateMargin;
93
+ this._backPlate.scaling.y = extendSize.y + this._cellHeight * this.backPlateMargin;
94
+ this._backPlate.scaling.z = 0.001;
95
+ for (var i = 0; i < this._children.length; i++) {
96
+ this._children[i].position.subtractInPlace(this._currentMin).subtractInPlace(extendSize.scale(0.5));
97
+ this._children[i].position.z -= 0.01;
98
+ }
99
+ }
100
+ this._currentMin = null;
101
+ this._currentMax = null;
102
+ };
103
+ /**
104
+ * Adds a button to the menu.
105
+ * Please note that the back material of the button will be set to transparent as it is attached to the menu.
106
+ *
107
+ * @param button Button to add
108
+ * @returns This menu
109
+ */
110
+ TouchHolographicMenu.prototype.addButton = function (button) {
111
+ // Block updating the layout until the button is resized (which has to happen after node creation)
112
+ var wasLayoutBlocked = this.blockLayout;
113
+ if (!wasLayoutBlocked) {
114
+ this.blockLayout = true;
115
+ }
116
+ _super.prototype.addControl.call(this, button);
117
+ button.isBackplateVisible = false;
118
+ button.scaling.scaleInPlace(TouchHolographicMenu.MENU_BUTTON_SCALE);
119
+ // Unblocking the layout triggers the pending layout update that uses the size of the buttons to determine the size of the backing mesh
120
+ if (!wasLayoutBlocked) {
121
+ this.blockLayout = false;
122
+ }
123
+ return this;
124
+ };
125
+ /**
126
+ * This method should not be used directly. It is inherited from `Container3D`.
127
+ * Please use `addButton` instead.
128
+ * @param _control
129
+ * @returns
130
+ */
131
+ TouchHolographicMenu.prototype.addControl = function (_control) {
132
+ Logger.Warn("TouchHolographicMenu can only contain buttons. Please use the method `addButton` instead.");
133
+ return this;
134
+ };
135
+ /**
136
+ * Disposes the menu
137
+ */
138
+ TouchHolographicMenu.prototype.dispose = function () {
139
+ _super.prototype.dispose.call(this);
140
+ this._host.onPickedPointChangedObservable.remove(this._pickedPointObserver);
141
+ };
142
+ /**
143
+ * Scale for the buttons added to the menu
144
+ */
145
+ // eslint-disable-next-line @typescript-eslint/naming-convention
146
+ TouchHolographicMenu.MENU_BUTTON_SCALE = 1;
147
+ return TouchHolographicMenu;
148
+ }(VolumeBasedPanel));
149
+ export { TouchHolographicMenu };
150
150
  //# sourceMappingURL=touchHolographicMenu.js.map