@babylonjs/gui 5.21.0 → 5.23.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 (178) hide show
  1. package/2D/adtInstrumentation.js +70 -90
  2. package/2D/adtInstrumentation.js.map +1 -1
  3. package/2D/advancedDynamicTexture.d.ts +12 -0
  4. package/2D/advancedDynamicTexture.js +569 -622
  5. package/2D/advancedDynamicTexture.js.map +1 -1
  6. package/2D/controls/button.js +76 -90
  7. package/2D/controls/button.js.map +1 -1
  8. package/2D/controls/checkbox.js +86 -106
  9. package/2D/controls/checkbox.js.map +1 -1
  10. package/2D/controls/colorpicker.js +395 -415
  11. package/2D/controls/colorpicker.js.map +1 -1
  12. package/2D/controls/container.js +187 -230
  13. package/2D/controls/container.js.map +1 -1
  14. package/2D/controls/control.js +1067 -1353
  15. package/2D/controls/control.js.map +1 -1
  16. package/2D/controls/displayGrid.js +152 -196
  17. package/2D/controls/displayGrid.js.map +1 -1
  18. package/2D/controls/ellipse.js +32 -40
  19. package/2D/controls/ellipse.js.map +1 -1
  20. package/2D/controls/focusableButton.js +30 -35
  21. package/2D/controls/focusableButton.js.map +1 -1
  22. package/2D/controls/grid.js +172 -212
  23. package/2D/controls/grid.js.map +1 -1
  24. package/2D/controls/image.js +489 -592
  25. package/2D/controls/image.js.map +1 -1
  26. package/2D/controls/inputPassword.js +9 -16
  27. package/2D/controls/inputPassword.js.map +1 -1
  28. package/2D/controls/inputText.js +380 -467
  29. package/2D/controls/inputText.js.map +1 -1
  30. package/2D/controls/inputTextArea.js +234 -273
  31. package/2D/controls/inputTextArea.js.map +1 -1
  32. package/2D/controls/line.js +147 -198
  33. package/2D/controls/line.js.map +1 -1
  34. package/2D/controls/multiLine.js +87 -113
  35. package/2D/controls/multiLine.js.map +1 -1
  36. package/2D/controls/radioButton.js +106 -127
  37. package/2D/controls/radioButton.js.map +1 -1
  38. package/2D/controls/rectangle.js +60 -72
  39. package/2D/controls/rectangle.js.map +1 -1
  40. package/2D/controls/scrollViewers/scrollViewer.js +439 -543
  41. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  42. package/2D/controls/scrollViewers/scrollViewerWindow.js +99 -118
  43. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  44. package/2D/controls/selector.js +241 -329
  45. package/2D/controls/selector.js.map +1 -1
  46. package/2D/controls/sliders/baseSlider.js +182 -230
  47. package/2D/controls/sliders/baseSlider.js.map +1 -1
  48. package/2D/controls/sliders/imageBasedSlider.js +86 -109
  49. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  50. package/2D/controls/sliders/imageScrollBar.js +148 -178
  51. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  52. package/2D/controls/sliders/scrollBar.js +64 -80
  53. package/2D/controls/sliders/scrollBar.js.map +1 -1
  54. package/2D/controls/sliders/slider.js +91 -115
  55. package/2D/controls/sliders/slider.js.map +1 -1
  56. package/2D/controls/stackPanel.js +114 -135
  57. package/2D/controls/stackPanel.js.map +1 -1
  58. package/2D/controls/statics.js +5 -5
  59. package/2D/controls/statics.js.map +1 -1
  60. package/2D/controls/textBlock.js +322 -384
  61. package/2D/controls/textBlock.js.map +1 -1
  62. package/2D/controls/textWrapper.js +27 -41
  63. package/2D/controls/textWrapper.js.map +1 -1
  64. package/2D/controls/toggleButton.js +105 -121
  65. package/2D/controls/toggleButton.js.map +1 -1
  66. package/2D/controls/virtualKeyboard.js +101 -123
  67. package/2D/controls/virtualKeyboard.js.map +1 -1
  68. package/2D/math2D.js +62 -70
  69. package/2D/math2D.js.map +1 -1
  70. package/2D/measure.js +30 -32
  71. package/2D/measure.js.map +1 -1
  72. package/2D/multiLinePoint.js +71 -89
  73. package/2D/multiLinePoint.js.map +1 -1
  74. package/2D/style.js +55 -73
  75. package/2D/style.js.map +1 -1
  76. package/2D/valueAndUnit.js +71 -104
  77. package/2D/valueAndUnit.js.map +1 -1
  78. package/2D/xmlLoader.js +70 -84
  79. package/2D/xmlLoader.js.map +1 -1
  80. package/3D/behaviors/defaultBehavior.js +40 -59
  81. package/3D/behaviors/defaultBehavior.js.map +1 -1
  82. package/3D/controls/abstractButton3D.js +8 -12
  83. package/3D/controls/abstractButton3D.js.map +1 -1
  84. package/3D/controls/button3D.js +30 -35
  85. package/3D/controls/button3D.js.map +1 -1
  86. package/3D/controls/container3D.js +57 -71
  87. package/3D/controls/container3D.js.map +1 -1
  88. package/3D/controls/contentDisplay3D.js +47 -60
  89. package/3D/controls/contentDisplay3D.js.map +1 -1
  90. package/3D/controls/control3D.js +123 -158
  91. package/3D/controls/control3D.js.map +1 -1
  92. package/3D/controls/cylinderPanel.js +28 -38
  93. package/3D/controls/cylinderPanel.js.map +1 -1
  94. package/3D/controls/handMenu.js +20 -29
  95. package/3D/controls/handMenu.js.map +1 -1
  96. package/3D/controls/holographicBackplate.js +52 -72
  97. package/3D/controls/holographicBackplate.js.map +1 -1
  98. package/3D/controls/holographicButton.js +160 -200
  99. package/3D/controls/holographicButton.js.map +1 -1
  100. package/3D/controls/holographicSlate.js +176 -206
  101. package/3D/controls/holographicSlate.js.map +1 -1
  102. package/3D/controls/meshButton3D.js +24 -30
  103. package/3D/controls/meshButton3D.js.map +1 -1
  104. package/3D/controls/nearMenu.js +57 -71
  105. package/3D/controls/nearMenu.js.map +1 -1
  106. package/3D/controls/planePanel.js +6 -13
  107. package/3D/controls/planePanel.js.map +1 -1
  108. package/3D/controls/scatterPanel.js +43 -54
  109. package/3D/controls/scatterPanel.js.map +1 -1
  110. package/3D/controls/slider3D.js +168 -222
  111. package/3D/controls/slider3D.js.map +1 -1
  112. package/3D/controls/spherePanel.js +29 -39
  113. package/3D/controls/spherePanel.js.map +1 -1
  114. package/3D/controls/stackPanel3D.js +36 -49
  115. package/3D/controls/stackPanel3D.js.map +1 -1
  116. package/3D/controls/touchButton3D.js +126 -154
  117. package/3D/controls/touchButton3D.js.map +1 -1
  118. package/3D/controls/touchHolographicButton.js +223 -272
  119. package/3D/controls/touchHolographicButton.js.map +1 -1
  120. package/3D/controls/touchHolographicMenu.js +55 -66
  121. package/3D/controls/touchHolographicMenu.js.map +1 -1
  122. package/3D/controls/touchMeshButton3D.js +24 -30
  123. package/3D/controls/touchMeshButton3D.js.map +1 -1
  124. package/3D/controls/volumeBasedPanel.js +85 -107
  125. package/3D/controls/volumeBasedPanel.js.map +1 -1
  126. package/3D/gizmos/gizmoHandle.js +68 -103
  127. package/3D/gizmos/gizmoHandle.js.map +1 -1
  128. package/3D/gizmos/slateGizmo.js +165 -182
  129. package/3D/gizmos/slateGizmo.js.map +1 -1
  130. package/3D/gui3DManager.js +76 -101
  131. package/3D/gui3DManager.js.map +1 -1
  132. package/3D/materials/fluent/fluentMaterial.js +110 -119
  133. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  134. package/3D/materials/fluent/shaders/fluent.fragment.js +20 -3
  135. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -1
  136. package/3D/materials/fluent/shaders/fluent.vertex.js +11 -3
  137. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -1
  138. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +168 -177
  139. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  140. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +9 -3
  141. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -1
  142. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +15 -3
  143. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -1
  144. package/3D/materials/fluentButton/fluentButtonMaterial.js +205 -213
  145. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  146. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +6 -3
  147. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -1
  148. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +6 -3
  149. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -1
  150. package/3D/materials/handle/handleMaterial.js +56 -69
  151. package/3D/materials/handle/handleMaterial.js.map +1 -1
  152. package/3D/materials/handle/shaders/handle.fragment.js +3 -3
  153. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -1
  154. package/3D/materials/handle/shaders/handle.vertex.js +3 -3
  155. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -1
  156. package/3D/materials/mrdl/mrdlBackplateMaterial.js +158 -166
  157. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  158. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +322 -330
  159. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  160. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +322 -330
  161. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  162. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +9 -3
  163. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -1
  164. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +6 -3
  165. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -1
  166. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +24 -3
  167. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -1
  168. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +12 -3
  169. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -1
  170. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +24 -3
  171. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -1
  172. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +12 -3
  173. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -1
  174. package/3D/vector3WithInfo.js +6 -12
  175. package/3D/vector3WithInfo.js.map +1 -1
  176. package/legacy/legacy.js +1 -1
  177. package/legacy/legacy.js.map +1 -1
  178. package/package.json +3 -6
@@ -2,20 +2,18 @@ import { Observable } from "@babylonjs/core/Misc/observable.js";
2
2
  /**
3
3
  * Class used to specific a value and its associated unit
4
4
  */
5
- var ValueAndUnit = /** @class */ (function () {
5
+ export class ValueAndUnit {
6
6
  /**
7
7
  * Creates a new ValueAndUnit
8
8
  * @param value defines the value to store
9
9
  * @param unit defines the unit to store - defaults to ValueAndUnit.UNITMODE_PIXEL
10
10
  * @param negativeValueAllowed defines a boolean indicating if the value can be negative
11
11
  */
12
- function ValueAndUnit(value,
12
+ constructor(value,
13
13
  /** defines the unit to store */
14
- unit,
14
+ unit = ValueAndUnit.UNITMODE_PIXEL,
15
15
  /** defines a boolean indicating if the value can be negative */
16
- negativeValueAllowed) {
17
- if (unit === void 0) { unit = ValueAndUnit.UNITMODE_PIXEL; }
18
- if (negativeValueAllowed === void 0) { negativeValueAllowed = true; }
16
+ negativeValueAllowed = true) {
19
17
  this.negativeValueAllowed = negativeValueAllowed;
20
18
  this._value = 1;
21
19
  this._unit = ValueAndUnit.UNITMODE_PIXEL;
@@ -32,83 +30,62 @@ var ValueAndUnit = /** @class */ (function () {
32
30
  this._unit = unit;
33
31
  this._originalUnit = unit;
34
32
  }
35
- Object.defineProperty(ValueAndUnit.prototype, "isPercentage", {
36
- /** Gets a boolean indicating if the value is a percentage */
37
- get: function () {
38
- return this._unit === ValueAndUnit.UNITMODE_PERCENTAGE;
39
- },
40
- enumerable: false,
41
- configurable: true
42
- });
43
- Object.defineProperty(ValueAndUnit.prototype, "isPixel", {
44
- /** Gets a boolean indicating if the value is store as pixel */
45
- get: function () {
46
- return this._unit === ValueAndUnit.UNITMODE_PIXEL;
47
- },
48
- enumerable: false,
49
- configurable: true
50
- });
51
- Object.defineProperty(ValueAndUnit.prototype, "internalValue", {
52
- /**
53
- * Gets value (without units)
54
- * @deprecated use value property instead
55
- */
56
- get: function () {
57
- return this._value;
58
- },
59
- enumerable: false,
60
- configurable: true
61
- });
62
- Object.defineProperty(ValueAndUnit.prototype, "value", {
63
- /** Gets value (without units) */
64
- get: function () {
65
- return this._value;
66
- },
67
- /** Sets value (without units) */
68
- set: function (value) {
69
- if (value !== this._value) {
70
- this._value = value;
71
- this.onChangedObservable.notifyObservers();
72
- }
73
- },
74
- enumerable: false,
75
- configurable: true
76
- });
77
- Object.defineProperty(ValueAndUnit.prototype, "unit", {
78
- /** Gets units (without value) */
79
- get: function () {
80
- return this._unit;
81
- },
82
- /** Sets units (without value) */
83
- set: function (value) {
84
- if (value !== this._unit) {
85
- this._unit = value;
86
- this.onChangedObservable.notifyObservers();
87
- }
88
- },
89
- enumerable: false,
90
- configurable: true
91
- });
33
+ /** Gets a boolean indicating if the value is a percentage */
34
+ get isPercentage() {
35
+ return this._unit === ValueAndUnit.UNITMODE_PERCENTAGE;
36
+ }
37
+ /** Gets a boolean indicating if the value is store as pixel */
38
+ get isPixel() {
39
+ return this._unit === ValueAndUnit.UNITMODE_PIXEL;
40
+ }
41
+ /**
42
+ * Gets value (without units)
43
+ * @deprecated use value property instead
44
+ */
45
+ get internalValue() {
46
+ return this._value;
47
+ }
48
+ /** Gets value (without units) */
49
+ get value() {
50
+ return this._value;
51
+ }
52
+ /** Sets value (without units) */
53
+ set value(value) {
54
+ if (value !== this._value) {
55
+ this._value = value;
56
+ this.onChangedObservable.notifyObservers();
57
+ }
58
+ }
59
+ /** Gets units (without value) */
60
+ get unit() {
61
+ return this._unit;
62
+ }
63
+ /** Sets units (without value) */
64
+ set unit(value) {
65
+ if (value !== this._unit) {
66
+ this._unit = value;
67
+ this.onChangedObservable.notifyObservers();
68
+ }
69
+ }
92
70
  /**
93
71
  * Gets value as pixel
94
72
  * @param host defines the root host
95
73
  * @param refValue defines the reference value for percentages
96
74
  * @returns the value as pixel
97
75
  */
98
- ValueAndUnit.prototype.getValueInPixel = function (host, refValue) {
76
+ getValueInPixel(host, refValue) {
99
77
  if (this.isPixel) {
100
78
  return this.getValue(host);
101
79
  }
102
80
  return this.getValue(host) * refValue;
103
- };
81
+ }
104
82
  /**
105
83
  * Update the current value and unit.
106
84
  * @param value defines the value to store
107
85
  * @param unit defines the unit to store
108
86
  * @returns the current ValueAndUnit
109
87
  */
110
- ValueAndUnit.prototype.updateInPlace = function (value, unit) {
111
- if (unit === void 0) { unit = ValueAndUnit.UNITMODE_PIXEL; }
88
+ updateInPlace(value, unit = ValueAndUnit.UNITMODE_PIXEL) {
112
89
  if (this.value !== value || this.unit !== unit) {
113
90
  // set member variables to notify only once
114
91
  this._value = value;
@@ -116,16 +93,16 @@ var ValueAndUnit = /** @class */ (function () {
116
93
  this.onChangedObservable.notifyObservers();
117
94
  }
118
95
  return this;
119
- };
96
+ }
120
97
  /**
121
98
  * Gets the value accordingly to its unit
122
99
  * @param host defines the root host
123
100
  * @returns the value
124
101
  */
125
- ValueAndUnit.prototype.getValue = function (host) {
102
+ getValue(host) {
126
103
  if (host && !this.ignoreAdaptiveScaling && this.unit !== ValueAndUnit.UNITMODE_PERCENTAGE) {
127
- var width = 0;
128
- var height = 0;
104
+ let width = 0;
105
+ let height = 0;
129
106
  if (host.idealWidth) {
130
107
  width = (this._value * host.getSize().width) / host.idealWidth;
131
108
  }
@@ -145,38 +122,38 @@ var ValueAndUnit = /** @class */ (function () {
145
122
  }
146
123
  }
147
124
  return this._value;
148
- };
125
+ }
149
126
  /**
150
127
  * Gets a string representation of the value
151
128
  * @param host defines the root host
152
129
  * @param decimals defines an optional number of decimals to display
153
130
  * @returns a string
154
131
  */
155
- ValueAndUnit.prototype.toString = function (host, decimals) {
132
+ toString(host, decimals) {
156
133
  switch (this._unit) {
157
134
  case ValueAndUnit.UNITMODE_PERCENTAGE: {
158
- var percentage = this.getValue(host) * 100;
135
+ const percentage = this.getValue(host) * 100;
159
136
  return (decimals ? percentage.toFixed(decimals) : percentage) + "%";
160
137
  }
161
138
  case ValueAndUnit.UNITMODE_PIXEL: {
162
- var pixels = this.getValue(host);
139
+ const pixels = this.getValue(host);
163
140
  return (decimals ? pixels.toFixed(decimals) : pixels) + "px";
164
141
  }
165
142
  }
166
143
  return this._unit.toString();
167
- };
144
+ }
168
145
  /**
169
146
  * Store a value parsed from a string
170
147
  * @param source defines the source string
171
148
  * @returns true if the value was successfully parsed and updated
172
149
  */
173
- ValueAndUnit.prototype.fromString = function (source) {
174
- var match = ValueAndUnit._Regex.exec(source.toString());
150
+ fromString(source) {
151
+ const match = ValueAndUnit._Regex.exec(source.toString());
175
152
  if (!match || match.length === 0) {
176
153
  return false;
177
154
  }
178
- var sourceValue = parseFloat(match[1]);
179
- var sourceUnit = this._originalUnit;
155
+ let sourceValue = parseFloat(match[1]);
156
+ let sourceUnit = this._originalUnit;
180
157
  if (!this.negativeValueAllowed) {
181
158
  if (sourceValue < 0) {
182
159
  sourceValue = 0;
@@ -200,28 +177,18 @@ var ValueAndUnit = /** @class */ (function () {
200
177
  this._unit = sourceUnit;
201
178
  this.onChangedObservable.notifyObservers();
202
179
  return true;
203
- };
204
- Object.defineProperty(ValueAndUnit, "UNITMODE_PERCENTAGE", {
205
- /** UNITMODE_PERCENTAGE */
206
- get: function () {
207
- return ValueAndUnit._UNITMODE_PERCENTAGE;
208
- },
209
- enumerable: false,
210
- configurable: true
211
- });
212
- Object.defineProperty(ValueAndUnit, "UNITMODE_PIXEL", {
213
- /** UNITMODE_PIXEL */
214
- get: function () {
215
- return ValueAndUnit._UNITMODE_PIXEL;
216
- },
217
- enumerable: false,
218
- configurable: true
219
- });
220
- // Static
221
- ValueAndUnit._Regex = /(^-?\d*(\.\d+)?)(%|px)?/;
222
- ValueAndUnit._UNITMODE_PERCENTAGE = 0;
223
- ValueAndUnit._UNITMODE_PIXEL = 1;
224
- return ValueAndUnit;
225
- }());
226
- export { ValueAndUnit };
180
+ }
181
+ /** UNITMODE_PERCENTAGE */
182
+ static get UNITMODE_PERCENTAGE() {
183
+ return ValueAndUnit._UNITMODE_PERCENTAGE;
184
+ }
185
+ /** UNITMODE_PIXEL */
186
+ static get UNITMODE_PIXEL() {
187
+ return ValueAndUnit._UNITMODE_PIXEL;
188
+ }
189
+ }
190
+ // Static
191
+ ValueAndUnit._Regex = /(^-?\d*(\.\d+)?)(%|px)?/;
192
+ ValueAndUnit._UNITMODE_PERCENTAGE = 0;
193
+ ValueAndUnit._UNITMODE_PIXEL = 1;
227
194
  //# sourceMappingURL=valueAndUnit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"valueAndUnit.js","sourceRoot":"","sources":["../../../../../lts/gui/generated/2D/valueAndUnit.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"core/Misc/observable\";\r\nimport type { AdvancedDynamicTexture } from \"./advancedDynamicTexture\";\r\n\r\n/**\r\n * Class used to specific a value and its associated unit\r\n */\r\nexport class ValueAndUnit {\r\n private _value = 1;\r\n private _unit = ValueAndUnit.UNITMODE_PIXEL;\r\n private _originalUnit: number;\r\n\r\n /**\r\n * Gets or sets a value indicating that this value will not scale accordingly with adaptive scaling property\r\n * @see https://doc.babylonjs.com/how_to/gui#adaptive-scaling\r\n */\r\n public ignoreAdaptiveScaling = false;\r\n\r\n /**\r\n * Observable event triggered each time the value or unit changes\r\n */\r\n public onChangedObservable = new Observable<void>();\r\n\r\n /**\r\n * Creates a new ValueAndUnit\r\n * @param value defines the value to store\r\n * @param unit defines the unit to store - defaults to ValueAndUnit.UNITMODE_PIXEL\r\n * @param negativeValueAllowed defines a boolean indicating if the value can be negative\r\n */\r\n public constructor(\r\n value: number,\r\n /** defines the unit to store */\r\n unit = ValueAndUnit.UNITMODE_PIXEL,\r\n /** defines a boolean indicating if the value can be negative */\r\n public negativeValueAllowed = true\r\n ) {\r\n this._value = value;\r\n this._unit = unit;\r\n this._originalUnit = unit;\r\n }\r\n\r\n /** Gets a boolean indicating if the value is a percentage */\r\n public get isPercentage(): boolean {\r\n return this._unit === ValueAndUnit.UNITMODE_PERCENTAGE;\r\n }\r\n\r\n /** Gets a boolean indicating if the value is store as pixel */\r\n public get isPixel(): boolean {\r\n return this._unit === ValueAndUnit.UNITMODE_PIXEL;\r\n }\r\n\r\n /**\r\n * Gets value (without units)\r\n * @deprecated use value property instead\r\n */\r\n public get internalValue(): number {\r\n return this._value;\r\n }\r\n\r\n /** Gets value (without units) */\r\n public get value(): number {\r\n return this._value;\r\n }\r\n\r\n /** Sets value (without units) */\r\n public set value(value: number) {\r\n if (value !== this._value) {\r\n this._value = value;\r\n this.onChangedObservable.notifyObservers();\r\n }\r\n }\r\n\r\n /** Gets units (without value) */\r\n public get unit(): number {\r\n return this._unit;\r\n }\r\n\r\n /** Sets units (without value) */\r\n public set unit(value: number) {\r\n if (value !== this._unit) {\r\n this._unit = value;\r\n this.onChangedObservable.notifyObservers();\r\n }\r\n }\r\n\r\n /**\r\n * Gets value as pixel\r\n * @param host defines the root host\r\n * @param refValue defines the reference value for percentages\r\n * @returns the value as pixel\r\n */\r\n public getValueInPixel(host: AdvancedDynamicTexture, refValue: number): number {\r\n if (this.isPixel) {\r\n return this.getValue(host);\r\n }\r\n\r\n return this.getValue(host) * refValue;\r\n }\r\n\r\n /**\r\n * Update the current value and unit.\r\n * @param value defines the value to store\r\n * @param unit defines the unit to store\r\n * @returns the current ValueAndUnit\r\n */\r\n public updateInPlace(value: number, unit = ValueAndUnit.UNITMODE_PIXEL): ValueAndUnit {\r\n if (this.value !== value || this.unit !== unit) {\r\n // set member variables to notify only once\r\n this._value = value;\r\n this._unit = unit;\r\n this.onChangedObservable.notifyObservers();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the value accordingly to its unit\r\n * @param host defines the root host\r\n * @returns the value\r\n */\r\n public getValue(host: AdvancedDynamicTexture): number {\r\n if (host && !this.ignoreAdaptiveScaling && this.unit !== ValueAndUnit.UNITMODE_PERCENTAGE) {\r\n let width: number = 0;\r\n let height: number = 0;\r\n\r\n if (host.idealWidth) {\r\n width = (this._value * host.getSize().width) / host.idealWidth;\r\n }\r\n\r\n if (host.idealHeight) {\r\n height = (this._value * host.getSize().height) / host.idealHeight;\r\n }\r\n\r\n if (host.useSmallestIdeal && host.idealWidth && host.idealHeight) {\r\n return window.innerWidth < window.innerHeight ? width : height;\r\n }\r\n\r\n if (host.idealWidth) {\r\n // horizontal\r\n return width;\r\n }\r\n\r\n if (host.idealHeight) {\r\n // vertical\r\n return height;\r\n }\r\n }\r\n return this._value;\r\n }\r\n\r\n /**\r\n * Gets a string representation of the value\r\n * @param host defines the root host\r\n * @param decimals defines an optional number of decimals to display\r\n * @returns a string\r\n */\r\n public toString(host: AdvancedDynamicTexture, decimals?: number): string {\r\n switch (this._unit) {\r\n case ValueAndUnit.UNITMODE_PERCENTAGE: {\r\n const percentage = this.getValue(host) * 100;\r\n return (decimals ? percentage.toFixed(decimals) : percentage) + \"%\";\r\n }\r\n case ValueAndUnit.UNITMODE_PIXEL: {\r\n const pixels = this.getValue(host);\r\n return (decimals ? pixels.toFixed(decimals) : pixels) + \"px\";\r\n }\r\n }\r\n\r\n return this._unit.toString();\r\n }\r\n\r\n /**\r\n * Store a value parsed from a string\r\n * @param source defines the source string\r\n * @returns true if the value was successfully parsed and updated\r\n */\r\n public fromString(source: string | number): boolean {\r\n const match = ValueAndUnit._Regex.exec(source.toString());\r\n\r\n if (!match || match.length === 0) {\r\n return false;\r\n }\r\n\r\n let sourceValue = parseFloat(match[1]);\r\n let sourceUnit = this._originalUnit;\r\n\r\n if (!this.negativeValueAllowed) {\r\n if (sourceValue < 0) {\r\n sourceValue = 0;\r\n }\r\n }\r\n\r\n if (match.length === 4) {\r\n switch (match[3]) {\r\n case \"px\":\r\n sourceUnit = ValueAndUnit.UNITMODE_PIXEL;\r\n break;\r\n case \"%\":\r\n sourceUnit = ValueAndUnit.UNITMODE_PERCENTAGE;\r\n sourceValue /= 100.0;\r\n break;\r\n }\r\n }\r\n\r\n if (sourceValue === this._value && sourceUnit === this._unit) {\r\n return false;\r\n }\r\n\r\n this._value = sourceValue;\r\n this._unit = sourceUnit;\r\n this.onChangedObservable.notifyObservers();\r\n\r\n return true;\r\n }\r\n\r\n // Static\r\n private static _Regex = /(^-?\\d*(\\.\\d+)?)(%|px)?/;\r\n private static _UNITMODE_PERCENTAGE = 0;\r\n private static _UNITMODE_PIXEL = 1;\r\n\r\n /** UNITMODE_PERCENTAGE */\r\n public static get UNITMODE_PERCENTAGE(): number {\r\n return ValueAndUnit._UNITMODE_PERCENTAGE;\r\n }\r\n\r\n /** UNITMODE_PIXEL */\r\n public static get UNITMODE_PIXEL(): number {\r\n return ValueAndUnit._UNITMODE_PIXEL;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"valueAndUnit.js","sourceRoot":"","sources":["../../../../../lts/gui/generated/2D/valueAndUnit.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"core/Misc/observable\";\r\nimport type { AdvancedDynamicTexture } from \"./advancedDynamicTexture\";\r\n\r\n/**\r\n * Class used to specific a value and its associated unit\r\n */\r\nexport class ValueAndUnit {\r\n private _value = 1;\r\n private _unit = ValueAndUnit.UNITMODE_PIXEL;\r\n private _originalUnit: number;\r\n\r\n /**\r\n * Gets or sets a value indicating that this value will not scale accordingly with adaptive scaling property\r\n * @see https://doc.babylonjs.com/how_to/gui#adaptive-scaling\r\n */\r\n public ignoreAdaptiveScaling = false;\r\n\r\n /**\r\n * Observable event triggered each time the value or unit changes\r\n */\r\n public onChangedObservable = new Observable<void>();\r\n\r\n /**\r\n * Creates a new ValueAndUnit\r\n * @param value defines the value to store\r\n * @param unit defines the unit to store - defaults to ValueAndUnit.UNITMODE_PIXEL\r\n * @param negativeValueAllowed defines a boolean indicating if the value can be negative\r\n */\r\n public constructor(\r\n value: number,\r\n /** defines the unit to store */\r\n unit = ValueAndUnit.UNITMODE_PIXEL,\r\n /** defines a boolean indicating if the value can be negative */\r\n public negativeValueAllowed = true\r\n ) {\r\n this._value = value;\r\n this._unit = unit;\r\n this._originalUnit = unit;\r\n }\r\n\r\n /** Gets a boolean indicating if the value is a percentage */\r\n public get isPercentage(): boolean {\r\n return this._unit === ValueAndUnit.UNITMODE_PERCENTAGE;\r\n }\r\n\r\n /** Gets a boolean indicating if the value is store as pixel */\r\n public get isPixel(): boolean {\r\n return this._unit === ValueAndUnit.UNITMODE_PIXEL;\r\n }\r\n\r\n /**\r\n * Gets value (without units)\r\n * @deprecated use value property instead\r\n */\r\n public get internalValue(): number {\r\n return this._value;\r\n }\r\n\r\n /** Gets value (without units) */\r\n public get value(): number {\r\n return this._value;\r\n }\r\n\r\n /** Sets value (without units) */\r\n public set value(value: number) {\r\n if (value !== this._value) {\r\n this._value = value;\r\n this.onChangedObservable.notifyObservers();\r\n }\r\n }\r\n\r\n /** Gets units (without value) */\r\n public get unit(): number {\r\n return this._unit;\r\n }\r\n\r\n /** Sets units (without value) */\r\n public set unit(value: number) {\r\n if (value !== this._unit) {\r\n this._unit = value;\r\n this.onChangedObservable.notifyObservers();\r\n }\r\n }\r\n\r\n /**\r\n * Gets value as pixel\r\n * @param host defines the root host\r\n * @param refValue defines the reference value for percentages\r\n * @returns the value as pixel\r\n */\r\n public getValueInPixel(host: AdvancedDynamicTexture, refValue: number): number {\r\n if (this.isPixel) {\r\n return this.getValue(host);\r\n }\r\n\r\n return this.getValue(host) * refValue;\r\n }\r\n\r\n /**\r\n * Update the current value and unit.\r\n * @param value defines the value to store\r\n * @param unit defines the unit to store\r\n * @returns the current ValueAndUnit\r\n */\r\n public updateInPlace(value: number, unit = ValueAndUnit.UNITMODE_PIXEL): ValueAndUnit {\r\n if (this.value !== value || this.unit !== unit) {\r\n // set member variables to notify only once\r\n this._value = value;\r\n this._unit = unit;\r\n this.onChangedObservable.notifyObservers();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the value accordingly to its unit\r\n * @param host defines the root host\r\n * @returns the value\r\n */\r\n public getValue(host: AdvancedDynamicTexture): number {\r\n if (host && !this.ignoreAdaptiveScaling && this.unit !== ValueAndUnit.UNITMODE_PERCENTAGE) {\r\n let width: number = 0;\r\n let height: number = 0;\r\n\r\n if (host.idealWidth) {\r\n width = (this._value * host.getSize().width) / host.idealWidth;\r\n }\r\n\r\n if (host.idealHeight) {\r\n height = (this._value * host.getSize().height) / host.idealHeight;\r\n }\r\n\r\n if (host.useSmallestIdeal && host.idealWidth && host.idealHeight) {\r\n return window.innerWidth < window.innerHeight ? width : height;\r\n }\r\n\r\n if (host.idealWidth) {\r\n // horizontal\r\n return width;\r\n }\r\n\r\n if (host.idealHeight) {\r\n // vertical\r\n return height;\r\n }\r\n }\r\n return this._value;\r\n }\r\n\r\n /**\r\n * Gets a string representation of the value\r\n * @param host defines the root host\r\n * @param decimals defines an optional number of decimals to display\r\n * @returns a string\r\n */\r\n public toString(host: AdvancedDynamicTexture, decimals?: number): string {\r\n switch (this._unit) {\r\n case ValueAndUnit.UNITMODE_PERCENTAGE: {\r\n const percentage = this.getValue(host) * 100;\r\n return (decimals ? percentage.toFixed(decimals) : percentage) + \"%\";\r\n }\r\n case ValueAndUnit.UNITMODE_PIXEL: {\r\n const pixels = this.getValue(host);\r\n return (decimals ? pixels.toFixed(decimals) : pixels) + \"px\";\r\n }\r\n }\r\n\r\n return this._unit.toString();\r\n }\r\n\r\n /**\r\n * Store a value parsed from a string\r\n * @param source defines the source string\r\n * @returns true if the value was successfully parsed and updated\r\n */\r\n public fromString(source: string | number): boolean {\r\n const match = ValueAndUnit._Regex.exec(source.toString());\r\n\r\n if (!match || match.length === 0) {\r\n return false;\r\n }\r\n\r\n let sourceValue = parseFloat(match[1]);\r\n let sourceUnit = this._originalUnit;\r\n\r\n if (!this.negativeValueAllowed) {\r\n if (sourceValue < 0) {\r\n sourceValue = 0;\r\n }\r\n }\r\n\r\n if (match.length === 4) {\r\n switch (match[3]) {\r\n case \"px\":\r\n sourceUnit = ValueAndUnit.UNITMODE_PIXEL;\r\n break;\r\n case \"%\":\r\n sourceUnit = ValueAndUnit.UNITMODE_PERCENTAGE;\r\n sourceValue /= 100.0;\r\n break;\r\n }\r\n }\r\n\r\n if (sourceValue === this._value && sourceUnit === this._unit) {\r\n return false;\r\n }\r\n\r\n this._value = sourceValue;\r\n this._unit = sourceUnit;\r\n this.onChangedObservable.notifyObservers();\r\n\r\n return true;\r\n }\r\n\r\n // Static\r\n private static _Regex = /(^-?\\d*(\\.\\d+)?)(%|px)?/;\r\n private static _UNITMODE_PERCENTAGE = 0;\r\n private static _UNITMODE_PIXEL = 1;\r\n\r\n /** UNITMODE_PERCENTAGE */\r\n public static get UNITMODE_PERCENTAGE(): number {\r\n return ValueAndUnit._UNITMODE_PERCENTAGE;\r\n }\r\n\r\n /** UNITMODE_PIXEL */\r\n public static get UNITMODE_PIXEL(): number {\r\n return ValueAndUnit._UNITMODE_PIXEL;\r\n }\r\n}\r\n"]}
package/2D/xmlLoader.js CHANGED
@@ -1,16 +1,14 @@
1
- import { __awaiter, __generator } from "tslib";
2
1
  import { GetClass } from "@babylonjs/core/Misc/typeStore.js";
3
- var XmlLoaderError = "XmlLoader Exception : XML file is malformed or corrupted.";
2
+ const XmlLoaderError = "XmlLoader Exception : XML file is malformed or corrupted.";
4
3
  /**
5
4
  * Class used to load GUI via XML.
6
5
  */
7
- var XmlLoader = /** @class */ (function () {
6
+ export class XmlLoader {
8
7
  /**
9
8
  * Create a new xml loader
10
9
  * @param parentClass Sets the class context. Used when the loader is instanced inside a class and not in a global context
11
10
  */
12
- function XmlLoader(parentClass) {
13
- if (parentClass === void 0) { parentClass = null; }
11
+ constructor(parentClass = null) {
14
12
  this._nodes = {};
15
13
  this._nodeTypes = {
16
14
  element: 1,
@@ -29,37 +27,36 @@ var XmlLoader = /** @class */ (function () {
29
27
  this._parentClass = parentClass;
30
28
  }
31
29
  }
32
- XmlLoader.prototype._getChainElement = function (attributeValue) {
33
- var element = window;
30
+ _getChainElement(attributeValue) {
31
+ let element = window;
34
32
  if (this._parentClass) {
35
33
  element = this._parentClass;
36
34
  }
37
- var value = attributeValue;
35
+ let value = attributeValue;
38
36
  value = value.split(".");
39
- for (var i = 0; i < value.length; i++) {
37
+ for (let i = 0; i < value.length; i++) {
40
38
  element = element[value[i]];
41
39
  }
42
40
  return element;
43
- };
44
- XmlLoader.prototype._getClassAttribute = function (attributeName) {
45
- var attribute = attributeName.split(".");
46
- var className = GetClass("BABYLON.GUI." + attribute[0]);
41
+ }
42
+ _getClassAttribute(attributeName) {
43
+ const attribute = attributeName.split(".");
44
+ const className = GetClass("BABYLON.GUI." + attribute[0]);
47
45
  return className[attribute[1]];
48
- };
49
- XmlLoader.prototype._createGuiElement = function (node, parent, linkParent) {
50
- if (linkParent === void 0) { linkParent = true; }
46
+ }
47
+ _createGuiElement(node, parent, linkParent = true) {
51
48
  try {
52
- var className = GetClass("BABYLON.GUI." + node.nodeName);
53
- var guiNode = new className();
49
+ const className = GetClass("BABYLON.GUI." + node.nodeName);
50
+ const guiNode = new className();
54
51
  if (parent && linkParent) {
55
52
  parent.addControl(guiNode);
56
53
  }
57
- for (var i = 0; i < node.attributes.length; i++) {
54
+ for (let i = 0; i < node.attributes.length; i++) {
58
55
  if (node.attributes[i].name.toLowerCase().includes("datasource")) {
59
56
  continue;
60
57
  }
61
58
  if (node.attributes[i].name.toLowerCase().includes("observable")) {
62
- var element = this._getChainElement(node.attributes[i].value);
59
+ const element = this._getChainElement(node.attributes[i].value);
63
60
  guiNode[node.attributes[i].name].add(element);
64
61
  continue;
65
62
  }
@@ -72,7 +69,7 @@ var XmlLoader = /** @class */ (function () {
72
69
  }
73
70
  }
74
71
  else if (node.attributes[i].value.startsWith("{{") && node.attributes[i].value.endsWith("}}")) {
75
- var element = this._getChainElement(node.attributes[i].value.substring(2, node.attributes[i].value.length - 2));
72
+ const element = this._getChainElement(node.attributes[i].value.substring(2, node.attributes[i].value.length - 2));
76
73
  guiNode[node.attributes[i].name] = element;
77
74
  }
78
75
  else if (!this._objectAttributes[node.attributes[i].name]) {
@@ -91,7 +88,7 @@ var XmlLoader = /** @class */ (function () {
91
88
  this._nodes[node.nodeName + Object.keys(this._nodes).length + "_gen"] = guiNode;
92
89
  return guiNode;
93
90
  }
94
- var id = node.attributes.getNamedItem("id").value;
91
+ let id = node.attributes.getNamedItem("id").value;
95
92
  if (id.startsWith("{{") && id.endsWith("}}")) {
96
93
  id = this._getChainElement(id.substring(2, id.length - 2));
97
94
  }
@@ -106,19 +103,19 @@ var XmlLoader = /** @class */ (function () {
106
103
  catch (exception) {
107
104
  throw "XmlLoader Exception : Error parsing Control " + node.nodeName + "," + exception + ".";
108
105
  }
109
- };
110
- XmlLoader.prototype._parseGrid = function (node, guiNode, parent) {
111
- var width;
112
- var height;
113
- var columns;
114
- var rows = node.children;
115
- var cells;
116
- var isPixel = false;
117
- var cellNode;
118
- var rowNumber = -1;
119
- var columnNumber = -1;
120
- var totalColumnsNumber = 0;
121
- for (var i = 0; i < rows.length; i++) {
106
+ }
107
+ _parseGrid(node, guiNode, parent) {
108
+ let width;
109
+ let height;
110
+ let columns;
111
+ const rows = node.children;
112
+ let cells;
113
+ let isPixel = false;
114
+ let cellNode;
115
+ let rowNumber = -1;
116
+ let columnNumber = -1;
117
+ let totalColumnsNumber = 0;
118
+ for (let i = 0; i < rows.length; i++) {
122
119
  if (rows[i].nodeType != this._nodeTypes.element) {
123
120
  continue;
124
121
  }
@@ -133,7 +130,7 @@ var XmlLoader = /** @class */ (function () {
133
130
  height = Number(rows[i].attributes.getNamedItem("height").nodeValue);
134
131
  isPixel = rows[i].attributes.getNamedItem("isPixel") ? JSON.parse(rows[i].attributes.getNamedItem("isPixel").nodeValue) : false;
135
132
  guiNode.addRowDefinition(height, isPixel);
136
- for (var j = 0; j < columns.length; j++) {
133
+ for (let j = 0; j < columns.length; j++) {
137
134
  if (columns[j].nodeType != this._nodeTypes.element) {
138
135
  continue;
139
136
  }
@@ -153,7 +150,7 @@ var XmlLoader = /** @class */ (function () {
153
150
  guiNode.addColumnDefinition(width, isPixel);
154
151
  }
155
152
  cells = columns[j].children;
156
- for (var k = 0; k < cells.length; k++) {
153
+ for (let k = 0; k < cells.length; k++) {
157
154
  if (cells[k].nodeType != this._nodeTypes.element) {
158
155
  continue;
159
156
  }
@@ -172,16 +169,16 @@ var XmlLoader = /** @class */ (function () {
172
169
  if (node.nextSibling) {
173
170
  this._parseXml(node.nextSibling, parent);
174
171
  }
175
- };
176
- XmlLoader.prototype._parseElement = function (node, guiNode, parent) {
172
+ }
173
+ _parseElement(node, guiNode, parent) {
177
174
  if (node.firstChild) {
178
175
  this._parseXml(node.firstChild, guiNode);
179
176
  }
180
177
  if (node.nextSibling) {
181
178
  this._parseXml(node.nextSibling, parent);
182
179
  }
183
- };
184
- XmlLoader.prototype._prepareSourceElement = function (node, guiNode, variable, source, iterator) {
180
+ }
181
+ _prepareSourceElement(node, guiNode, variable, source, iterator) {
185
182
  if (this._parentClass) {
186
183
  this._parentClass[variable] = source[iterator];
187
184
  }
@@ -191,19 +188,19 @@ var XmlLoader = /** @class */ (function () {
191
188
  if (node.firstChild) {
192
189
  this._parseXml(node.firstChild, guiNode, true);
193
190
  }
194
- };
195
- XmlLoader.prototype._parseElementsFromSource = function (node, guiNode, parent) {
196
- var dataSource = node.attributes.getNamedItem("dataSource").value;
191
+ }
192
+ _parseElementsFromSource(node, guiNode, parent) {
193
+ const dataSource = node.attributes.getNamedItem("dataSource").value;
197
194
  if (!dataSource.includes(" in ")) {
198
195
  throw "XmlLoader Exception : Malformed XML, Data Source must include an in";
199
196
  }
200
197
  else {
201
- var isArray = true;
202
- var splittedSource = dataSource.split(" in ");
198
+ let isArray = true;
199
+ const splittedSource = dataSource.split(" in ");
203
200
  if (splittedSource.length < 2) {
204
201
  throw "XmlLoader Exception : Malformed XML, Data Source must have an iterator and a source";
205
202
  }
206
- var source = splittedSource[1];
203
+ let source = splittedSource[1];
207
204
  if (source.startsWith("{") && source.endsWith("}")) {
208
205
  isArray = false;
209
206
  }
@@ -217,12 +214,12 @@ var XmlLoader = /** @class */ (function () {
217
214
  source = window[source];
218
215
  }
219
216
  if (isArray) {
220
- for (var i = 0; i < source.length; i++) {
217
+ for (let i = 0; i < source.length; i++) {
221
218
  this._prepareSourceElement(node, guiNode, splittedSource[0], source, i);
222
219
  }
223
220
  }
224
221
  else {
225
- for (var i in source) {
222
+ for (const i in source) {
226
223
  this._prepareSourceElement(node, guiNode, splittedSource[0], source, i);
227
224
  }
228
225
  }
@@ -230,9 +227,8 @@ var XmlLoader = /** @class */ (function () {
230
227
  this._parseXml(node.nextSibling, parent);
231
228
  }
232
229
  }
233
- };
234
- XmlLoader.prototype._parseXml = function (node, parent, generated) {
235
- if (generated === void 0) { generated = false; }
230
+ }
231
+ _parseXml(node, parent, generated = false) {
236
232
  if (node.nodeType != this._nodeTypes.element) {
237
233
  if (node.nextSibling) {
238
234
  this._parseXml(node.nextSibling, parent, generated);
@@ -242,7 +238,7 @@ var XmlLoader = /** @class */ (function () {
242
238
  if (generated) {
243
239
  node.setAttribute("id", parent.id + (parent._children.length + 1));
244
240
  }
245
- var guiNode = this._createGuiElement(node, parent);
241
+ const guiNode = this._createGuiElement(node, parent);
246
242
  if (!this._rootNode) {
247
243
  this._rootNode = guiNode;
248
244
  }
@@ -255,39 +251,39 @@ var XmlLoader = /** @class */ (function () {
255
251
  else {
256
252
  this._parseElementsFromSource(node, guiNode, parent);
257
253
  }
258
- };
254
+ }
259
255
  /**
260
256
  * Gets if the loading has finished.
261
257
  * @returns whether the loading has finished or not
262
258
  */
263
- XmlLoader.prototype.isLoaded = function () {
259
+ isLoaded() {
264
260
  return this._isLoaded;
265
- };
261
+ }
266
262
  /**
267
263
  * Gets a loaded node / control by id.
268
264
  * @param id the Controls id set in the xml
269
265
  * @returns element of type Control
270
266
  */
271
- XmlLoader.prototype.getNodeById = function (id) {
267
+ getNodeById(id) {
272
268
  return this._nodes[id];
273
- };
269
+ }
274
270
  /**
275
271
  * Gets all loaded nodes / controls
276
272
  * @returns Array of controls
277
273
  */
278
- XmlLoader.prototype.getNodes = function () {
274
+ getNodes() {
279
275
  return this._nodes;
280
- };
276
+ }
281
277
  /**
282
278
  * Disposes the loaded layout
283
279
  */
284
- XmlLoader.prototype.dispose = function () {
280
+ dispose() {
285
281
  if (this._rootNode) {
286
282
  this._rootNode.dispose();
287
283
  this._rootNode = null;
288
284
  this._nodes = {};
289
285
  }
290
- };
286
+ }
291
287
  /**
292
288
  * Initiates the xml layout loading
293
289
  * @param xmlFile defines the xml layout to load
@@ -295,12 +291,9 @@ var XmlLoader = /** @class */ (function () {
295
291
  * @param onSuccess defines the callback called on layout load successfully.
296
292
  * @param onError defines the callback called on layout load failure.
297
293
  */
298
- XmlLoader.prototype.loadLayout = function (xmlFile, rootNode, onSuccess, onError) {
299
- var _this = this;
300
- if (onSuccess === void 0) { onSuccess = null; }
301
- if (onError === void 0) { onError = null; }
302
- var xhttp = new XMLHttpRequest();
303
- xhttp.onload = function () {
294
+ loadLayout(xmlFile, rootNode, onSuccess = null, onError = null) {
295
+ const xhttp = new XMLHttpRequest();
296
+ xhttp.onload = () => {
304
297
  if (xhttp.readyState === 4 && xhttp.status === 200) {
305
298
  if (!xhttp.responseXML) {
306
299
  if (onError) {
@@ -311,9 +304,9 @@ var XmlLoader = /** @class */ (function () {
311
304
  throw XmlLoaderError;
312
305
  }
313
306
  }
314
- var xmlDoc = xhttp.responseXML.documentElement;
315
- _this._parseXml(xmlDoc.firstChild, rootNode);
316
- _this._isLoaded = true;
307
+ const xmlDoc = xhttp.responseXML.documentElement;
308
+ this._parseXml(xmlDoc.firstChild, rootNode);
309
+ this._isLoaded = true;
317
310
  if (onSuccess) {
318
311
  onSuccess();
319
312
  }
@@ -326,24 +319,17 @@ var XmlLoader = /** @class */ (function () {
326
319
  };
327
320
  xhttp.open("GET", xmlFile, true);
328
321
  xhttp.send();
329
- };
322
+ }
330
323
  /**
331
324
  * Initiates the xml layout loading asynchronously
332
325
  * @param xmlFile defines the xml layout to load
333
326
  * @param rootNode defines the node / control to use as a parent for the loaded layout controls.
334
327
  * @returns Promise
335
328
  */
336
- XmlLoader.prototype.loadLayoutAsync = function (xmlFile, rootNode) {
337
- return __awaiter(this, void 0, void 0, function () {
338
- var _this = this;
339
- return __generator(this, function (_a) {
340
- return [2 /*return*/, new Promise(function (resolve, reject) {
341
- _this.loadLayout(xmlFile, rootNode, resolve, reject);
342
- })];
343
- });
329
+ async loadLayoutAsync(xmlFile, rootNode) {
330
+ return new Promise((resolve, reject) => {
331
+ this.loadLayout(xmlFile, rootNode, resolve, reject);
344
332
  });
345
- };
346
- return XmlLoader;
347
- }());
348
- export { XmlLoader };
333
+ }
334
+ }
349
335
  //# sourceMappingURL=xmlLoader.js.map