@babylonjs/gui 5.0.0-rc.4 → 5.0.0-rc.5

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 (265) hide show
  1. package/2D/adtInstrumentation.d.ts +2 -2
  2. package/2D/adtInstrumentation.js.map +1 -1
  3. package/2D/advancedDynamicTexture.d.ts +43 -20
  4. package/2D/advancedDynamicTexture.js +45 -22
  5. package/2D/advancedDynamicTexture.js.map +1 -1
  6. package/2D/controls/button.d.ts +50 -12
  7. package/2D/controls/button.js +48 -10
  8. package/2D/controls/button.js.map +1 -1
  9. package/2D/controls/checkbox.d.ts +17 -9
  10. package/2D/controls/checkbox.js +17 -7
  11. package/2D/controls/checkbox.js.map +1 -1
  12. package/2D/controls/colorpicker.d.ts +21 -8
  13. package/2D/controls/colorpicker.js +540 -523
  14. package/2D/controls/colorpicker.js.map +1 -1
  15. package/2D/controls/container.d.ts +63 -18
  16. package/2D/controls/container.js +63 -18
  17. package/2D/controls/container.js.map +1 -1
  18. package/2D/controls/control.d.ts +171 -48
  19. package/2D/controls/control.js +165 -41
  20. package/2D/controls/control.js.map +1 -1
  21. package/2D/controls/displayGrid.d.ts +2 -4
  22. package/2D/controls/displayGrid.js +3 -3
  23. package/2D/controls/displayGrid.js.map +1 -1
  24. package/2D/controls/ellipse.d.ts +1 -1
  25. package/2D/controls/ellipse.js +2 -2
  26. package/2D/controls/ellipse.js.map +1 -1
  27. package/2D/controls/focusableButton.d.ts +13 -6
  28. package/2D/controls/focusableButton.js +10 -3
  29. package/2D/controls/focusableButton.js.map +1 -1
  30. package/2D/controls/focusableControl.d.ts +11 -11
  31. package/2D/controls/focusableControl.js.map +1 -1
  32. package/2D/controls/grid.d.ts +7 -3
  33. package/2D/controls/grid.js +9 -5
  34. package/2D/controls/grid.js.map +1 -1
  35. package/2D/controls/image.d.ts +15 -8
  36. package/2D/controls/image.js +29 -21
  37. package/2D/controls/image.js.map +1 -1
  38. package/2D/controls/index.js.map +1 -1
  39. package/2D/controls/inputPassword.d.ts +1 -1
  40. package/2D/controls/inputPassword.js +2 -2
  41. package/2D/controls/inputPassword.js.map +1 -1
  42. package/2D/controls/inputText.d.ts +34 -15
  43. package/2D/controls/inputText.js +47 -24
  44. package/2D/controls/inputText.js.map +1 -1
  45. package/2D/controls/line.d.ts +4 -4
  46. package/2D/controls/line.js +5 -5
  47. package/2D/controls/line.js.map +1 -1
  48. package/2D/controls/multiLine.d.ts +9 -11
  49. package/2D/controls/multiLine.js +8 -8
  50. package/2D/controls/multiLine.js.map +1 -1
  51. package/2D/controls/radioButton.d.ts +4 -4
  52. package/2D/controls/radioButton.js +2 -2
  53. package/2D/controls/radioButton.js.map +1 -1
  54. package/2D/controls/rectangle.d.ts +1 -1
  55. package/2D/controls/rectangle.js +2 -2
  56. package/2D/controls/rectangle.js.map +1 -1
  57. package/2D/controls/scrollViewers/scrollViewer.d.ts +14 -7
  58. package/2D/controls/scrollViewers/scrollViewer.js +14 -13
  59. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  60. package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +20 -8
  61. package/2D/controls/scrollViewers/scrollViewerWindow.js +25 -10
  62. package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -1
  63. package/2D/controls/selector.d.ts +79 -25
  64. package/2D/controls/selector.js +93 -30
  65. package/2D/controls/selector.js.map +1 -1
  66. package/2D/controls/sliders/baseSlider.d.ts +9 -5
  67. package/2D/controls/sliders/baseSlider.js +11 -7
  68. package/2D/controls/sliders/baseSlider.js.map +1 -1
  69. package/2D/controls/sliders/imageBasedSlider.d.ts +10 -8
  70. package/2D/controls/sliders/imageBasedSlider.js +10 -6
  71. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  72. package/2D/controls/sliders/imageScrollBar.d.ts +8 -4
  73. package/2D/controls/sliders/imageScrollBar.js +10 -3
  74. package/2D/controls/sliders/imageScrollBar.js.map +1 -1
  75. package/2D/controls/sliders/scrollBar.d.ts +8 -4
  76. package/2D/controls/sliders/scrollBar.js +10 -3
  77. package/2D/controls/sliders/scrollBar.js.map +1 -1
  78. package/2D/controls/sliders/slider.d.ts +2 -4
  79. package/2D/controls/sliders/slider.js +6 -6
  80. package/2D/controls/sliders/slider.js.map +1 -1
  81. package/2D/controls/stackPanel.d.ts +11 -3
  82. package/2D/controls/stackPanel.js +16 -6
  83. package/2D/controls/stackPanel.js.map +1 -1
  84. package/2D/controls/statics.js +2 -0
  85. package/2D/controls/statics.js.map +1 -1
  86. package/2D/controls/textBlock.d.ts +9 -6
  87. package/2D/controls/textBlock.js +11 -6
  88. package/2D/controls/textBlock.js.map +1 -1
  89. package/2D/controls/textWrapper.js.map +1 -1
  90. package/2D/controls/toggleButton.d.ts +43 -9
  91. package/2D/controls/toggleButton.js +40 -6
  92. package/2D/controls/toggleButton.js.map +1 -1
  93. package/2D/controls/virtualKeyboard.d.ts +2 -2
  94. package/2D/controls/virtualKeyboard.js +6 -6
  95. package/2D/controls/virtualKeyboard.js.map +1 -1
  96. package/2D/index.js.map +1 -1
  97. package/2D/math2D.d.ts +2 -2
  98. package/2D/math2D.js +2 -2
  99. package/2D/math2D.js.map +1 -1
  100. package/2D/measure.d.ts +4 -4
  101. package/2D/measure.js +6 -16
  102. package/2D/measure.js.map +1 -1
  103. package/2D/multiLinePoint.d.ts +3 -3
  104. package/2D/multiLinePoint.js +3 -3
  105. package/2D/multiLinePoint.js.map +1 -1
  106. package/2D/style.d.ts +2 -2
  107. package/2D/style.js.map +1 -1
  108. package/2D/valueAndUnit.d.ts +1 -1
  109. package/2D/valueAndUnit.js +8 -4
  110. package/2D/valueAndUnit.js.map +1 -1
  111. package/2D/xmlLoader.d.ts +10 -10
  112. package/2D/xmlLoader.js +17 -17
  113. package/2D/xmlLoader.js.map +1 -1
  114. package/3D/behaviors/defaultBehavior.d.ts +7 -7
  115. package/3D/behaviors/defaultBehavior.js.map +1 -1
  116. package/3D/controls/abstractButton3D.d.ts +2 -2
  117. package/3D/controls/abstractButton3D.js +1 -1
  118. package/3D/controls/abstractButton3D.js.map +1 -1
  119. package/3D/controls/button3D.d.ts +4 -4
  120. package/3D/controls/button3D.js.map +1 -1
  121. package/3D/controls/container3D.d.ts +3 -3
  122. package/3D/controls/container3D.js +1 -2
  123. package/3D/controls/container3D.js.map +1 -1
  124. package/3D/controls/contentDisplay3D.js +1 -0
  125. package/3D/controls/contentDisplay3D.js.map +1 -1
  126. package/3D/controls/control3D.d.ts +53 -17
  127. package/3D/controls/control3D.js +48 -11
  128. package/3D/controls/control3D.js.map +1 -1
  129. package/3D/controls/cylinderPanel.d.ts +2 -2
  130. package/3D/controls/cylinderPanel.js +2 -2
  131. package/3D/controls/cylinderPanel.js.map +1 -1
  132. package/3D/controls/handMenu.d.ts +5 -5
  133. package/3D/controls/handMenu.js.map +1 -1
  134. package/3D/controls/holographicBackplate.d.ts +4 -3
  135. package/3D/controls/holographicBackplate.js +4 -4
  136. package/3D/controls/holographicBackplate.js.map +1 -1
  137. package/3D/controls/holographicButton.d.ts +6 -5
  138. package/3D/controls/holographicButton.js +1 -0
  139. package/3D/controls/holographicButton.js.map +1 -1
  140. package/3D/controls/holographicSlate.d.ts +10 -7
  141. package/3D/controls/holographicSlate.js +17 -14
  142. package/3D/controls/holographicSlate.js.map +1 -1
  143. package/3D/controls/index.js.map +1 -1
  144. package/3D/controls/meshButton3D.d.ts +4 -4
  145. package/3D/controls/meshButton3D.js +3 -2
  146. package/3D/controls/meshButton3D.js.map +1 -1
  147. package/3D/controls/nearMenu.d.ts +5 -5
  148. package/3D/controls/nearMenu.js +6 -4
  149. package/3D/controls/nearMenu.js.map +1 -1
  150. package/3D/controls/planePanel.d.ts +1 -1
  151. package/3D/controls/planePanel.js.map +1 -1
  152. package/3D/controls/scatterPanel.d.ts +2 -2
  153. package/3D/controls/scatterPanel.js +1 -1
  154. package/3D/controls/scatterPanel.js.map +1 -1
  155. package/3D/controls/slider3D.d.ts +5 -5
  156. package/3D/controls/slider3D.js +8 -9
  157. package/3D/controls/slider3D.js.map +1 -1
  158. package/3D/controls/spherePanel.d.ts +2 -2
  159. package/3D/controls/spherePanel.js +2 -2
  160. package/3D/controls/spherePanel.js.map +1 -1
  161. package/3D/controls/stackPanel3D.js +3 -3
  162. package/3D/controls/stackPanel3D.js.map +1 -1
  163. package/3D/controls/touchButton3D.d.ts +12 -7
  164. package/3D/controls/touchButton3D.js +11 -5
  165. package/3D/controls/touchButton3D.js.map +1 -1
  166. package/3D/controls/touchHolographicButton.d.ts +7 -6
  167. package/3D/controls/touchHolographicButton.js +7 -7
  168. package/3D/controls/touchHolographicButton.js.map +1 -1
  169. package/3D/controls/touchHolographicMenu.d.ts +6 -6
  170. package/3D/controls/touchHolographicMenu.js +1 -0
  171. package/3D/controls/touchHolographicMenu.js.map +1 -1
  172. package/3D/controls/touchMeshButton3D.d.ts +4 -5
  173. package/3D/controls/touchMeshButton3D.js +3 -3
  174. package/3D/controls/touchMeshButton3D.js.map +1 -1
  175. package/3D/controls/volumeBasedPanel.d.ts +10 -9
  176. package/3D/controls/volumeBasedPanel.js +13 -13
  177. package/3D/controls/volumeBasedPanel.js.map +1 -1
  178. package/3D/gizmos/gizmoHandle.d.ts +5 -5
  179. package/3D/gizmos/gizmoHandle.js.map +1 -1
  180. package/3D/gizmos/index.js.map +1 -1
  181. package/3D/gizmos/slateGizmo.d.ts +4 -4
  182. package/3D/gizmos/slateGizmo.js.map +1 -1
  183. package/3D/gui3DManager.d.ts +7 -7
  184. package/3D/gui3DManager.js +3 -3
  185. package/3D/gui3DManager.js.map +1 -1
  186. package/3D/index.js.map +1 -1
  187. package/3D/materials/fluent/fluentMaterial.d.ts +12 -12
  188. package/3D/materials/fluent/fluentMaterial.js +17 -6
  189. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  190. package/3D/materials/fluent/index.js.map +1 -1
  191. package/3D/materials/fluent/shaders/fluent.fragment.d.ts +1 -1
  192. package/3D/materials/fluent/shaders/fluent.fragment.js +4 -2
  193. package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -1
  194. package/3D/materials/fluent/shaders/fluent.vertex.d.ts +1 -1
  195. package/3D/materials/fluent/shaders/fluent.vertex.js +4 -2
  196. package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -1
  197. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +12 -12
  198. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +48 -13
  199. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  200. package/3D/materials/fluentBackplate/index.js.map +1 -1
  201. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +1 -1
  202. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +4 -2
  203. package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -1
  204. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +1 -1
  205. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +4 -2
  206. package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -1
  207. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +12 -12
  208. package/3D/materials/fluentButton/fluentButtonMaterial.js +8 -6
  209. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  210. package/3D/materials/fluentButton/index.js.map +1 -1
  211. package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +1 -1
  212. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +4 -2
  213. package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -1
  214. package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +1 -1
  215. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +4 -2
  216. package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -1
  217. package/3D/materials/fluentMaterial.d.ts +1 -1
  218. package/3D/materials/fluentMaterial.js +1 -1
  219. package/3D/materials/fluentMaterial.js.map +1 -1
  220. package/3D/materials/handle/handleMaterial.d.ts +4 -4
  221. package/3D/materials/handle/handleMaterial.js.map +1 -1
  222. package/3D/materials/handle/index.js.map +1 -1
  223. package/3D/materials/handle/shaders/handle.fragment.d.ts +1 -1
  224. package/3D/materials/handle/shaders/handle.fragment.js +3 -1
  225. package/3D/materials/handle/shaders/handle.fragment.js.map +1 -1
  226. package/3D/materials/handle/shaders/handle.vertex.d.ts +1 -1
  227. package/3D/materials/handle/shaders/handle.vertex.js +4 -2
  228. package/3D/materials/handle/shaders/handle.vertex.js.map +1 -1
  229. package/3D/materials/index.js.map +1 -1
  230. package/3D/materials/mrdl/index.js.map +1 -1
  231. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +15 -15
  232. package/3D/materials/mrdl/mrdlBackplateMaterial.js +42 -15
  233. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  234. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +16 -16
  235. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +88 -23
  236. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  237. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +17 -17
  238. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +89 -24
  239. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  240. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +1 -1
  241. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +4 -2
  242. package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -1
  243. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +1 -1
  244. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +4 -2
  245. package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -1
  246. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +1 -1
  247. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +4 -2
  248. package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -1
  249. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +1 -1
  250. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +4 -2
  251. package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -1
  252. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +1 -1
  253. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +4 -2
  254. package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -1
  255. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +1 -1
  256. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +4 -2
  257. package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -1
  258. package/3D/vector3WithInfo.d.ts +1 -1
  259. package/3D/vector3WithInfo.js.map +1 -1
  260. package/index.js.map +1 -1
  261. package/legacy/legacy.d.ts +1 -1
  262. package/legacy/legacy.js +3 -3
  263. package/legacy/legacy.js.map +1 -1
  264. package/package.json +21 -328
  265. package/readme.md +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"colorpicker.js","sourceRoot":"","sources":["../../../../sourceES6/gui/src/2D/controls/colorpicker.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"@babylonjs/core/Misc/observable\";\nimport { Vector2 } from \"@babylonjs/core/Maths/math.vector\";\n\nimport { Control } from \"./control\";\nimport { Measure } from \"../measure\";\nimport { InputText } from \"./inputText\";\nimport { Rectangle } from \"./rectangle\";\nimport { Button } from \"./button\";\nimport { Grid } from \"./grid\";\nimport { AdvancedDynamicTexture } from \"../advancedDynamicTexture\";\nimport { TextBlock } from \"../controls/textBlock\";\nimport { RegisterClass } from '@babylonjs/core/Misc/typeStore';\nimport { Color3 } from '@babylonjs/core/Maths/math.color';\nimport { PointerInfoBase } from '@babylonjs/core/Events/pointerEvents';\nimport { serialize } from '@babylonjs/core/Misc/decorators';\nimport { ICanvas, ICanvasRenderingContext } from \"@babylonjs/core/Engines/ICanvas\";\nimport { EngineStore } from \"@babylonjs/core/Engines/engineStore\";\n\n/** Class used to create color pickers */\nexport class ColorPicker extends Control {\n private static _Epsilon = 0.000001;\n private _colorWheelCanvas: ICanvas;\n\n private _value: Color3 = Color3.Red();\n private _tmpColor = new Color3();\n\n private _pointerStartedOnSquare = false;\n private _pointerStartedOnWheel = false;\n\n private _squareLeft = 0;\n private _squareTop = 0;\n private _squareSize = 0;\n\n private _h = 360;\n private _s = 1;\n private _v = 1;\n\n private _lastPointerDownId = -1;\n\n /**\n * Observable raised when the value changes\n */\n public onValueChangedObservable = new Observable<Color3>();\n\n /** Gets or sets the color of the color picker */\n @serialize()\n public get value(): Color3 {\n return this._value;\n }\n\n public set value(value: Color3) {\n if (this._value.equals(value)) {\n return;\n }\n\n this._value.copyFrom(value);\n\n this._value.toHSVToRef(this._tmpColor);\n\n this._h = this._tmpColor.r;\n this._s = Math.max(this._tmpColor.g, 0.00001);\n this._v = Math.max(this._tmpColor.b, 0.00001);\n\n this._markAsDirty();\n\n if (this._value.r <= ColorPicker._Epsilon) {\n this._value.r = 0;\n }\n\n if (this._value.g <= ColorPicker._Epsilon) {\n this._value.g = 0;\n }\n\n if (this._value.b <= ColorPicker._Epsilon) {\n this._value.b = 0;\n }\n\n if (this._value.r >= 1.0 - ColorPicker._Epsilon) {\n this._value.r = 1.0;\n }\n\n if (this._value.g >= 1.0 - ColorPicker._Epsilon) {\n this._value.g = 1.0;\n }\n\n if (this._value.b >= 1.0 - ColorPicker._Epsilon) {\n this._value.b = 1.0;\n }\n\n this.onValueChangedObservable.notifyObservers(this._value);\n }\n\n /**\n * Gets or sets control width\n * @see https://doc.babylonjs.com/how_to/gui#position-and-size\n */\n @serialize()\n public get width(): string | number {\n return this._width.toString(this._host);\n }\n\n public set width(value: string | number) {\n if (this._width.toString(this._host) === value) {\n return;\n }\n\n if (this._width.fromString(value)) {\n if (this._width.getValue(this._host) === 0) {\n value = '1px';\n this._width.fromString(value);\n }\n this._height.fromString(value);\n this._markAsDirty();\n }\n }\n\n /**\n * Gets or sets control height\n * @see https://doc.babylonjs.com/how_to/gui#position-and-size\n */\n @serialize()\n public get height(): string | number {\n return this._height.toString(this._host);\n }\n\n /** Gets or sets control height */\n public set height(value: string | number) {\n if (this._height.toString(this._host) === value) {\n return;\n }\n\n if (this._height.fromString(value)) {\n if (this._height.getValue(this._host) === 0) {\n value = '1px';\n this._height.fromString(value);\n }\n this._width.fromString(value);\n this._markAsDirty();\n }\n }\n\n /** Gets or sets control size */\n @serialize()\n public get size(): string | number {\n return this.width;\n }\n\n public set size(value: string | number) {\n this.width = value;\n }\n\n /**\n * Creates a new ColorPicker\n * @param name defines the control name\n */\n constructor(public name?: string) {\n super(name);\n this.value = new Color3(.88, .1, .1);\n this.size = \"200px\";\n this.isPointerBlocker = true;\n }\n\n protected _getTypeName(): string {\n return \"ColorPicker\";\n }\n\n /** @hidden */\n protected _preMeasure(parentMeasure: Measure, context: ICanvasRenderingContext): void {\n\n if (parentMeasure.width < parentMeasure.height) {\n this._currentMeasure.height = parentMeasure.width;\n } else {\n this._currentMeasure.width = parentMeasure.height;\n }\n }\n\n private _updateSquareProps(): void {\n var radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * .5;\n var wheelThickness = radius * .2;\n var innerDiameter = (radius - wheelThickness) * 2;\n var squareSize = innerDiameter / (Math.sqrt(2));\n var offset = radius - squareSize * .5;\n\n this._squareLeft = this._currentMeasure.left + offset;\n this._squareTop = this._currentMeasure.top + offset;\n this._squareSize = squareSize;\n }\n\n private _drawGradientSquare(hueValue: number, left: number, top: number, width: number, height: number, context: ICanvasRenderingContext) {\n var lgh = context.createLinearGradient(left, top, width + left, top);\n lgh.addColorStop(0, '#fff');\n lgh.addColorStop(1, 'hsl(' + hueValue + ', 100%, 50%)');\n\n context.fillStyle = lgh;\n context.fillRect(left, top, width, height);\n\n var lgv = context.createLinearGradient(left, top, left, height + top);\n lgv.addColorStop(0, 'rgba(0,0,0,0)');\n lgv.addColorStop(1, '#000');\n\n context.fillStyle = lgv;\n context.fillRect(left, top, width, height);\n }\n\n private _drawCircle(centerX: number, centerY: number, radius: number, context: ICanvasRenderingContext) {\n context.beginPath();\n context.arc(centerX, centerY, radius + 1, 0, 2 * Math.PI, false);\n context.lineWidth = 3;\n context.strokeStyle = '#333333';\n context.stroke();\n context.beginPath();\n context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);\n context.lineWidth = 3;\n context.strokeStyle = '#ffffff';\n context.stroke();\n }\n\n private _createColorWheelCanvas(radius: number, thickness: number): ICanvas {\n // Shoudl abstract platform instead of using LastCreatedEngine\n const engine = EngineStore.LastCreatedEngine;\n if (!engine) {\n throw new Error(\"Invalid engine. Unable to create a canvas.\");\n }\n var canvas = engine.createCanvas(radius * 2, radius * 2);\n var context = canvas.getContext(\"2d\");\n var image = context.getImageData(0, 0, radius * 2, radius * 2);\n var data = image.data;\n\n var color = this._tmpColor;\n var maxDistSq = radius * radius;\n var innerRadius = radius - thickness;\n var minDistSq = innerRadius * innerRadius;\n\n for (var x = -radius; x < radius; x++) {\n for (var y = -radius; y < radius; y++) {\n\n var distSq = x * x + y * y;\n\n if (distSq > maxDistSq || distSq < minDistSq) {\n continue;\n }\n\n var dist = Math.sqrt(distSq);\n var ang = Math.atan2(y, x);\n\n Color3.HSVtoRGBToRef(ang * 180 / Math.PI + 180, dist / radius, 1, color);\n\n var index = ((x + radius) + ((y + radius) * 2 * radius)) * 4;\n\n data[index] = color.r * 255;\n data[index + 1] = color.g * 255;\n data[index + 2] = color.b * 255;\n var alphaRatio = (dist - innerRadius) / (radius - innerRadius);\n\n //apply less alpha to bigger color pickers\n var alphaAmount = .2;\n var maxAlpha = .2;\n var minAlpha = .04;\n var lowerRadius = 50;\n var upperRadius = 150;\n\n if (radius < lowerRadius) {\n alphaAmount = maxAlpha;\n } else if (radius > upperRadius) {\n alphaAmount = minAlpha;\n } else {\n alphaAmount = (minAlpha - maxAlpha) * (radius - lowerRadius) / (upperRadius - lowerRadius) + maxAlpha;\n }\n\n var alphaRatio = (dist - innerRadius) / (radius - innerRadius);\n\n if (alphaRatio < alphaAmount) {\n data[index + 3] = 255 * (alphaRatio / alphaAmount);\n } else if (alphaRatio > 1 - alphaAmount) {\n data[index + 3] = 255 * (1.0 - ((alphaRatio - (1 - alphaAmount)) / alphaAmount));\n } else {\n data[index + 3] = 255;\n }\n\n }\n }\n\n context.putImageData(image, 0, 0);\n\n return canvas;\n }\n\n /** @hidden */\n public _draw(context: ICanvasRenderingContext): void {\n context.save();\n\n this._applyStates(context);\n\n var radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * .5;\n var wheelThickness = radius * .2;\n var left = this._currentMeasure.left;\n var top = this._currentMeasure.top;\n\n if (!this._colorWheelCanvas || this._colorWheelCanvas.width != radius * 2) {\n this._colorWheelCanvas = this._createColorWheelCanvas(radius, wheelThickness);\n }\n\n this._updateSquareProps();\n\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\n context.shadowColor = this.shadowColor;\n context.shadowBlur = this.shadowBlur;\n context.shadowOffsetX = this.shadowOffsetX;\n context.shadowOffsetY = this.shadowOffsetY;\n\n context.fillRect(this._squareLeft, this._squareTop, this._squareSize, this._squareSize);\n }\n\n context.drawImage(this._colorWheelCanvas, left, top);\n\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\n context.shadowBlur = 0;\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 0;\n }\n\n this._drawGradientSquare(this._h,\n this._squareLeft,\n this._squareTop,\n this._squareSize,\n this._squareSize,\n context);\n\n var cx = this._squareLeft + this._squareSize * this._s;\n var cy = this._squareTop + this._squareSize * (1 - this._v);\n\n this._drawCircle(cx, cy, radius * .04, context);\n\n var dist = radius - wheelThickness * .5;\n cx = left + radius + Math.cos((this._h - 180) * Math.PI / 180) * dist;\n cy = top + radius + Math.sin((this._h - 180) * Math.PI / 180) * dist;\n this._drawCircle(cx, cy, wheelThickness * .35, context);\n\n context.restore();\n }\n\n // Events\n private _pointerIsDown = false;\n\n private _updateValueFromPointer(x: number, y: number): void {\n if (this._pointerStartedOnWheel) {\n var radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * .5;\n var centerX = radius + this._currentMeasure.left;\n var centerY = radius + this._currentMeasure.top;\n this._h = Math.atan2(y - centerY, x - centerX) * 180 / Math.PI + 180;\n }\n else if (this._pointerStartedOnSquare) {\n this._updateSquareProps();\n this._s = (x - this._squareLeft) / this._squareSize;\n this._v = 1 - (y - this._squareTop) / this._squareSize;\n this._s = Math.min(this._s, 1);\n this._s = Math.max(this._s, ColorPicker._Epsilon);\n this._v = Math.min(this._v, 1);\n this._v = Math.max(this._v, ColorPicker._Epsilon);\n }\n\n Color3.HSVtoRGBToRef(this._h, this._s, this._v, this._tmpColor);\n\n this.value = this._tmpColor;\n }\n\n private _isPointOnSquare(x: number, y: number): boolean {\n this._updateSquareProps();\n\n var left = this._squareLeft;\n var top = this._squareTop;\n var size = this._squareSize;\n\n if (x >= left && x <= left + size &&\n y >= top && y <= top + size) {\n return true;\n }\n\n return false;\n }\n\n private _isPointOnWheel(x: number, y: number): boolean {\n var radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * .5;\n var centerX = radius + this._currentMeasure.left;\n var centerY = radius + this._currentMeasure.top;\n var wheelThickness = radius * .2;\n var innerRadius = radius - wheelThickness;\n var radiusSq = radius * radius;\n var innerRadiusSq = innerRadius * innerRadius;\n\n var dx = x - centerX;\n var dy = y - centerY;\n\n var distSq = dx * dx + dy * dy;\n\n if (distSq <= radiusSq && distSq >= innerRadiusSq) {\n return true;\n }\n\n return false;\n }\n\n public _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\n return false;\n }\n\n if (this.isReadOnly) {\n return true;\n }\n\n this._pointerIsDown = true;\n\n this._pointerStartedOnSquare = false;\n this._pointerStartedOnWheel = false;\n\n // Invert transform\n this._invertTransformMatrix.transformCoordinates(coordinates.x, coordinates.y, this._transformedPosition);\n\n let x = this._transformedPosition.x;\n let y = this._transformedPosition.y;\n\n if (this._isPointOnSquare(x, y)) {\n this._pointerStartedOnSquare = true;\n } else if (this._isPointOnWheel(x, y)) {\n this._pointerStartedOnWheel = true;\n }\n\n this._updateValueFromPointer(x, y);\n this._host._capturingControl[pointerId] = this;\n this._lastPointerDownId = pointerId;\n return true;\n }\n\n public _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\n // Only listen to pointer move events coming from the last pointer to click on the element (To support dual vr controller interaction)\n if (pointerId != this._lastPointerDownId) {\n return;\n }\n\n if (!this.isReadOnly) {\n // Invert transform\n this._invertTransformMatrix.transformCoordinates(coordinates.x, coordinates.y, this._transformedPosition);\n\n let x = this._transformedPosition.x;\n let y = this._transformedPosition.y;\n\n if (this._pointerIsDown) {\n this._updateValueFromPointer(x, y);\n }\n }\n\n super._onPointerMove(target, coordinates, pointerId, pi);\n }\n\n public _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean, pi: PointerInfoBase): void {\n this._pointerIsDown = false;\n\n delete this._host._capturingControl[pointerId];\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick, pi);\n }\n\n public _onCanvasBlur() {\n this._forcePointerUp();\n super._onCanvasBlur();\n }\n\n /**\n * This function expands the color picker by creating a color picker dialog with manual\n * color value input and the ability to save colors into an array to be used later in\n * subsequent launches of the dialogue.\n * @param advancedTexture defines the AdvancedDynamicTexture the dialog is assigned to\n * @param options defines size for dialog and options for saved colors. Also accepts last color picked as hex string and saved colors array as hex strings.\n * @returns picked color as a hex string and the saved colors array as hex strings.\n */\n public static ShowPickerDialogAsync(advancedTexture: AdvancedDynamicTexture,\n options: {\n pickerWidth?: string,\n pickerHeight?: string,\n headerHeight?: string,\n lastColor?: string,\n swatchLimit?: number,\n numSwatchesPerLine?: number,\n savedColors?: Array<string>\n }\n ): Promise<{\n savedColors?: string[],\n pickedColor: string\n }> {\n\n return new Promise((resolve, reject) => {\n // Default options\n options.pickerWidth = options.pickerWidth || \"640px\";\n options.pickerHeight = options.pickerHeight || \"400px\";\n options.headerHeight = options.headerHeight || \"35px\";\n options.lastColor = options.lastColor || \"#000000\";\n options.swatchLimit = options.swatchLimit || 20;\n options.numSwatchesPerLine = options.numSwatchesPerLine || 10;\n\n // Window size settings\n var drawerMaxRows: number = options.swatchLimit / options.numSwatchesPerLine;\n var rawSwatchSize: number = parseFloat(<string>options.pickerWidth) / options.numSwatchesPerLine;\n var gutterSize: number = Math.floor(rawSwatchSize * 0.25);\n var colGutters: number = gutterSize * (options.numSwatchesPerLine + 1);\n var swatchSize: number = Math.floor((parseFloat(<string>options.pickerWidth) - colGutters) / options.numSwatchesPerLine);\n var drawerMaxSize: number = (swatchSize * drawerMaxRows) + (gutterSize * (drawerMaxRows + 1));\n var containerSize: string = (parseInt(options.pickerHeight) + drawerMaxSize + Math.floor(swatchSize * 0.25)).toString() + \"px\";\n\n // Button Colors\n var buttonColor: string = \"#c0c0c0\";\n var buttonBackgroundColor: string = \"#535353\";\n var buttonBackgroundHoverColor: string = \"#414141\";\n var buttonBackgroundClickColor: string = \"515151\";\n var buttonDisabledColor: string = \"#555555\";\n var buttonDisabledBackgroundColor: string = \"#454545\";\n var currentSwatchesOutlineColor: string = \"#404040\";\n var luminanceLimitColor: Color3 = Color3.FromHexString(\"#dddddd\");\n var luminanceLimit: number = luminanceLimitColor.r + luminanceLimitColor.g + luminanceLimitColor.b;\n var iconColorDark: string = \"#aaaaaa\";\n var iconColorLight: string = \"#ffffff\";\n var closeIconColor: Color3;\n\n // Button settings\n var buttonFontSize: number;\n var butEdit: Button;\n var buttonWidth: string;\n var buttonHeight: string;\n\n // Input Text Colors\n var inputFieldLabels: string[] = [\"R\", \"G\", \"B\"];\n var inputTextBackgroundColor: string = \"#454545\";\n var inputTextColor: string = \"#f0f0f0\";\n\n // This is the current color as set by either the picker or by entering a value\n var currentColor: Color3;\n\n // This int is used for naming swatches and serves as the index for calling them from the list\n var swatchNumber: number;\n\n // Menu Panel options. We need to know if the swatchDrawer exists so we can create it if needed.\n var swatchDrawer: Grid;\n var editSwatchMode: boolean = false;\n\n // Color InputText fields that will be updated upon value change\n var picker: ColorPicker;\n var rValInt: InputText;\n var gValInt: InputText;\n var bValInt: InputText;\n var rValDec: InputText;\n var gValDec: InputText;\n var bValDec: InputText;\n var hexVal: InputText;\n var newSwatch: Rectangle;\n var lastVal: string;\n var activeField: string;\n\n /**\n * Will update all values for InputText and ColorPicker controls based on the BABYLON.Color3 passed to this function.\n * Each InputText control and the ColorPicker control will be tested to see if they are the activeField and if they\n * are will receive no update. This is to prevent the input from the user being overwritten.\n */\n function updateValues(value: Color3, inputField: string) {\n activeField = inputField;\n var pickedColor: string = value.toHexString();\n newSwatch.background = pickedColor;\n if (rValInt.name != activeField) {\n rValInt.text = Math.floor(value.r * 255).toString();\n }\n if (gValInt.name != activeField) {\n gValInt.text = Math.floor(value.g * 255).toString();\n }\n if (bValInt.name != activeField) {\n bValInt.text = Math.floor(value.b * 255).toString();\n }\n if (rValDec.name != activeField) {\n rValDec.text = value.r.toString();\n }\n if (gValDec.name != activeField) {\n gValDec.text = value.g.toString();\n }\n if (bValDec.name != activeField) {\n bValDec.text = value.b.toString();\n }\n if (hexVal.name != activeField) {\n var minusPound: string[] = pickedColor.split(\"#\");\n hexVal.text = minusPound[1];\n }\n if (picker.name != activeField) {\n picker.value = value;\n }\n }\n\n // When the user enters an integer for R, G, or B we check to make sure it is a valid number and replace if not.\n function updateInt(field: InputText, channel: string) {\n var newValue: string = field.text;\n var checkVal: boolean = /[^0-9]/g.test(newValue);\n if (checkVal) {\n field.text = lastVal;\n return;\n }\n else {\n if (newValue != \"\") {\n if (Math.floor(parseInt(newValue)) < 0) {\n newValue = \"0\";\n }\n else if (Math.floor(parseInt(newValue)) > 255) {\n newValue = \"255\";\n }\n else if (isNaN(parseInt(newValue))) {\n newValue = \"0\";\n }\n }\n if (activeField == field.name) {\n lastVal = newValue;\n }\n }\n if (newValue != \"\") {\n newValue = parseInt(newValue).toString();\n field.text = newValue;\n var newSwatchRGB: Color3 = Color3.FromHexString(newSwatch.background);\n if (activeField == field.name) {\n if (channel == \"r\") {\n updateValues(new Color3((parseInt(newValue)) / 255, newSwatchRGB.g, newSwatchRGB.b), field.name);\n }\n else if (channel == \"g\") {\n updateValues(new Color3(newSwatchRGB.r, (parseInt(newValue)) / 255, newSwatchRGB.b), field.name);\n }\n else {\n updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, (parseInt(newValue)) / 255), field.name);\n }\n }\n }\n }\n\n // When the user enters a float for R, G, or B we check to make sure it is a valid number and replace if not.\n function updateFloat(field: InputText, channel: string) {\n var newValue: string = field.text;\n var checkVal: boolean = /[^0-9\\.]/g.test(newValue);\n if (checkVal) {\n field.text = lastVal;\n return;\n }\n else {\n if (newValue != \"\" && newValue != \".\" && parseFloat(newValue) != 0) {\n if (parseFloat(newValue) < 0.0) {\n newValue = \"0.0\";\n }\n else if (parseFloat(newValue) > 1.0) {\n newValue = \"1.0\";\n }\n else if (isNaN(parseFloat(newValue))) {\n newValue = \"0.0\";\n }\n }\n if (activeField == field.name) {\n lastVal = newValue;\n }\n }\n if (newValue != \"\" && newValue != \".\" && parseFloat(newValue) != 0) {\n newValue = parseFloat(newValue).toString();\n field.text = newValue;\n }\n else {\n newValue = \"0.0\";\n }\n var newSwatchRGB = Color3.FromHexString(newSwatch.background);\n if (activeField == field.name) {\n if (channel == \"r\") {\n updateValues(new Color3(parseFloat(newValue), newSwatchRGB.g, newSwatchRGB.b), field.name);\n }\n else if (channel == \"g\") {\n updateValues(new Color3(newSwatchRGB.r, parseFloat(newValue), newSwatchRGB.b), field.name);\n }\n else {\n updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseFloat(newValue)), field.name);\n }\n }\n\n }\n\n // Removes the current index from the savedColors array. Drawer can then be regenerated.\n function deleteSwatch(index: number) {\n if (options.savedColors) {\n options.savedColors.splice(index, 1);\n }\n if (options.savedColors && options.savedColors.length == 0) {\n setEditButtonVisibility(false);\n editSwatchMode = false;\n }\n }\n\n // Creates and styles an individual swatch when updateSwatches is called.\n function createSwatch() {\n if (options.savedColors && options.savedColors[swatchNumber]) {\n if (editSwatchMode) {\n var icon: string = \"b\";\n }\n else {\n var icon: string = \"\";\n }\n var swatch: Button = Button.CreateSimpleButton(\"Swatch_\" + swatchNumber, icon);\n swatch.fontFamily = \"BabylonJSglyphs\";\n var swatchColor: Color3 = Color3.FromHexString(options.savedColors[swatchNumber]);\n var swatchLuminence: number = swatchColor.r + swatchColor.g + swatchColor.b;\n\n // Set color of outline and textBlock based on luminance of the color swatch so feedback always visible\n if (swatchLuminence > luminanceLimit) {\n swatch.color = iconColorDark;\n }\n else {\n swatch.color = iconColorLight;\n }\n swatch.fontSize = Math.floor(swatchSize * 0.7);\n swatch.textBlock!.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\n swatch.height = swatch.width = (swatchSize).toString() + \"px\";\n swatch.background = options.savedColors[swatchNumber];\n swatch.thickness = 2;\n let metadata = swatchNumber;\n swatch.pointerDownAnimation = () => {\n swatch.thickness = 4;\n };\n swatch.pointerUpAnimation = () => {\n swatch.thickness = 3;\n };\n swatch.pointerEnterAnimation = () => {\n swatch.thickness = 3;\n };\n swatch.pointerOutAnimation = () => {\n swatch.thickness = 2;\n };\n swatch.onPointerClickObservable.add(() => {\n if (!editSwatchMode) {\n if (options.savedColors) {\n updateValues(Color3.FromHexString(options.savedColors[metadata]), swatch.name!);\n }\n }\n else {\n deleteSwatch(metadata);\n updateSwatches(\"\", butSave);\n }\n });\n return swatch;\n }\n else {\n return null;\n }\n }\n\n // Mode switch to render button text and close symbols on swatch controls\n function editSwatches(mode?: boolean) {\n if (mode !== undefined) {\n editSwatchMode = mode;\n }\n if (editSwatchMode) {\n for (var i = 0; i < swatchDrawer.children.length; i++) {\n var thisButton: Button = swatchDrawer.children[i] as Button;\n thisButton.textBlock!.text = \"b\";\n }\n if (butEdit !== undefined) {\n butEdit.textBlock!.text = \"Done\";\n }\n }\n else {\n for (var i = 0; i < swatchDrawer.children.length; i++) {\n var thisButton: Button = swatchDrawer.children[i] as Button;\n thisButton.textBlock!.text = \"\";\n }\n if (butEdit !== undefined) {\n butEdit.textBlock!.text = \"Edit\";\n }\n }\n }\n\n /**\n * When Save Color button is pressed this function will first create a swatch drawer if one is not already\n * made. Then all controls are removed from the drawer and we step through the savedColors array and\n * creates one swatch per color. It will also set the height of the drawer control based on how many\n * saved colors there are and how many can be stored per row.\n */\n function updateSwatches(color: string, button: Button) {\n if (options.savedColors) {\n\n if (color != \"\") {\n options.savedColors.push(color);\n }\n swatchNumber = 0;\n swatchDrawer.clearControls();\n var rowCount: number = Math.ceil(options.savedColors.length / options.numSwatchesPerLine!);\n if (rowCount == 0) {\n var gutterCount: number = 0;\n }\n else {\n var gutterCount: number = rowCount + 1;\n }\n if (swatchDrawer.rowCount != rowCount + gutterCount) {\n var currentRows: number = swatchDrawer.rowCount;\n for (var i = 0; i < currentRows; i++) {\n swatchDrawer.removeRowDefinition(0);\n }\n for (var i = 0; i < rowCount + gutterCount; i++) {\n if (i % 2) {\n swatchDrawer.addRowDefinition(swatchSize, true);\n }\n else {\n swatchDrawer.addRowDefinition(gutterSize, true);\n }\n }\n }\n swatchDrawer.height = ((swatchSize * rowCount) + (gutterCount * gutterSize)).toString() + \"px\";\n\n for (var y = 1, thisRow = 1; y < rowCount + gutterCount; y += 2, thisRow++) {\n\n // Determine number of buttons to create per row based on the button limit per row and number of saved colors\n if (options.savedColors.length > thisRow * options.numSwatchesPerLine!) {\n var totalButtonsThisRow = options.numSwatchesPerLine!;\n }\n else {\n var totalButtonsThisRow = options.savedColors.length - ((thisRow - 1) * options.numSwatchesPerLine!);\n }\n var buttonIterations: number = (Math.min(Math.max(totalButtonsThisRow, 0), options.numSwatchesPerLine!));\n for (var x = 0, w = 1; x < buttonIterations; x++) {\n if (x > options.numSwatchesPerLine!) {\n continue;\n }\n var swatch: Button | null = createSwatch();\n if (swatch != null) {\n swatchDrawer.addControl(swatch, y, w);\n w += 2;\n swatchNumber++;\n }\n else {\n continue;\n }\n }\n }\n if (options.savedColors.length >= options.swatchLimit!) {\n disableButton(button, true);\n }\n else {\n disableButton(button, false);\n }\n }\n }\n\n // Shows or hides edit swatches button depending on if there are saved swatches\n function setEditButtonVisibility(enableButton: boolean) {\n if (enableButton) {\n butEdit = Button.CreateSimpleButton(\"butEdit\", \"Edit\");\n butEdit.width = buttonWidth;\n butEdit.height = buttonHeight;\n butEdit.left = (Math.floor(parseInt(buttonWidth) * 0.1)).toString() + \"px\";\n butEdit.top = (parseFloat(butEdit.left) * -1).toString() + \"px\";\n butEdit.verticalAlignment = Control.VERTICAL_ALIGNMENT_BOTTOM;\n butEdit.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\n butEdit.thickness = 2;\n butEdit.color = buttonColor;\n butEdit.fontSize = buttonFontSize;\n butEdit.background = buttonBackgroundColor;\n butEdit.onPointerEnterObservable.add(() => {\n butEdit.background = buttonBackgroundHoverColor;\n });\n butEdit.onPointerOutObservable.add(() => {\n butEdit.background = buttonBackgroundColor;\n });\n butEdit.pointerDownAnimation = () => {\n butEdit.background = buttonBackgroundClickColor;\n };\n butEdit.pointerUpAnimation = () => {\n butEdit.background = buttonBackgroundHoverColor;\n };\n butEdit.onPointerClickObservable.add(() => {\n if (editSwatchMode) {\n editSwatchMode = false;\n }\n else {\n editSwatchMode = true;\n }\n editSwatches();\n });\n pickerGrid.addControl(butEdit, 1, 0);\n }\n else {\n pickerGrid.removeControl(butEdit);\n }\n }\n\n // Called when the user hits the limit of saved colors in the drawer.\n function disableButton(button: Button, disabled: boolean) {\n if (disabled) {\n button.color = buttonDisabledColor;\n button.background = buttonDisabledBackgroundColor;\n }\n else {\n button.color = buttonColor;\n button.background = buttonBackgroundColor;\n }\n }\n\n // Passes last chosen color back to scene and kills dialog by removing from AdvancedDynamicTexture\n function closePicker(color: string) {\n if (options.savedColors && options.savedColors.length > 0) {\n resolve({\n savedColors: options.savedColors,\n pickedColor: color\n });\n }\n else {\n resolve({\n pickedColor: color\n });\n }\n advancedTexture.removeControl(dialogContainer);\n }\n\n // Dialogue menu container which will contain both the main dialogue window and the swatch drawer which opens once a color is saved.\n var dialogContainer: Grid = new Grid();\n dialogContainer.name = \"Dialog Container\";\n dialogContainer.width = options.pickerWidth;\n if (options.savedColors) {\n dialogContainer.height = containerSize;\n var topRow: number = parseInt(options.pickerHeight) / parseInt(containerSize);\n dialogContainer.addRowDefinition(topRow, false);\n dialogContainer.addRowDefinition(1.0 - topRow, false);\n }\n else {\n dialogContainer.height = options.pickerHeight;\n dialogContainer.addRowDefinition(1.0, false);\n }\n advancedTexture.addControl(dialogContainer);\n\n // Swatch drawer which contains all saved color buttons\n if (options.savedColors) {\n swatchDrawer = new Grid();\n swatchDrawer.name = \"Swatch Drawer\";\n swatchDrawer.verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;\n swatchDrawer.background = buttonBackgroundColor;\n swatchDrawer.width = options.pickerWidth!;\n var initialRows: number = options.savedColors.length / options.numSwatchesPerLine;\n if (initialRows == 0) {\n var gutterCount: number = 0;\n }\n else {\n var gutterCount: number = initialRows + 1;\n }\n swatchDrawer.height = ((swatchSize * initialRows) + (gutterCount * gutterSize)).toString() + \"px\";\n swatchDrawer.top = Math.floor(swatchSize * 0.25).toString() + \"px\";\n for (var i = 0; i < (Math.ceil(options.savedColors.length / options.numSwatchesPerLine) * 2) + 1; i++) {\n if (i % 2 != 0) {\n swatchDrawer.addRowDefinition(swatchSize, true);\n }\n else {\n swatchDrawer.addRowDefinition(gutterSize, true);\n }\n }\n for (var i = 0; i < options.numSwatchesPerLine! * 2 + 1; i++) {\n if (i % 2 != 0) {\n swatchDrawer.addColumnDefinition(swatchSize, true);\n }\n else {\n swatchDrawer.addColumnDefinition(gutterSize, true);\n }\n }\n dialogContainer.addControl(swatchDrawer, 1, 0);\n }\n\n // Picker container\n var pickerPanel: Grid = new Grid();\n pickerPanel.name = \"Picker Panel\";\n pickerPanel.height = options.pickerHeight;\n var panelHead: number = parseInt(options.headerHeight) / parseInt(options.pickerHeight);\n var pickerPanelRows: number[] = [panelHead, 1.0 - panelHead];\n pickerPanel.addRowDefinition(pickerPanelRows[0], false);\n pickerPanel.addRowDefinition(pickerPanelRows[1], false);\n dialogContainer.addControl(pickerPanel, 0, 0);\n\n // Picker container header\n var header: Rectangle = new Rectangle();\n header.name = \"Dialogue Header Bar\";\n header.background = \"#cccccc\";\n header.thickness = 0;\n pickerPanel.addControl(header, 0, 0);\n\n // Header close button\n var closeButton: Button = Button.CreateSimpleButton(\"closeButton\", \"a\");\n closeButton.fontFamily = \"BabylonJSglyphs\";\n var headerColor3: Color3 = Color3.FromHexString(header.background);\n closeIconColor = new Color3(1.0 - headerColor3.r, 1.0 - headerColor3.g, 1.0 - headerColor3.b);\n closeButton.color = closeIconColor.toHexString();\n closeButton.fontSize = Math.floor(parseInt(options.headerHeight!) * 0.6);\n closeButton.textBlock!.textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\n closeButton.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_RIGHT;\n closeButton.height = closeButton.width = options.headerHeight;\n closeButton.background = header.background;\n closeButton.thickness = 0;\n closeButton.pointerDownAnimation = () => {\n };\n closeButton.pointerUpAnimation = () => {\n closeButton.background = header.background;\n };\n closeButton.pointerEnterAnimation = () => {\n closeButton.color = header.background;\n closeButton.background = \"red\";\n };\n closeButton.pointerOutAnimation = () => {\n closeButton.color = closeIconColor.toHexString();\n closeButton.background = header.background;\n };\n closeButton.onPointerClickObservable.add(() => {\n closePicker(currentSwatch.background);\n });\n pickerPanel.addControl(closeButton, 0, 0);\n\n // Dialog container body\n var dialogBody: Grid = new Grid();\n dialogBody.name = \"Dialogue Body\";\n dialogBody.background = buttonBackgroundColor;\n var dialogBodyCols: number[] = [0.4375, 0.5625];\n dialogBody.addRowDefinition(1.0, false);\n dialogBody.addColumnDefinition(dialogBodyCols[0], false);\n dialogBody.addColumnDefinition(dialogBodyCols[1], false);\n pickerPanel.addControl(dialogBody, 1, 0);\n\n // Picker grid\n var pickerGrid: Grid = new Grid();\n pickerGrid.name = \"Picker Grid\";\n pickerGrid.addRowDefinition(0.85, false);\n pickerGrid.addRowDefinition(0.15, false);\n dialogBody.addControl(pickerGrid, 0, 0);\n\n // Picker control\n picker = new ColorPicker();\n picker.name = \"GUI Color Picker\";\n if (options.pickerHeight < options.pickerWidth) {\n picker.width = 0.89;\n }\n else {\n picker.height = 0.89;\n }\n picker.value = Color3.FromHexString(options.lastColor);\n picker.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\n picker.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\n picker.onPointerDownObservable.add(() => {\n activeField = picker.name!;\n lastVal = \"\";\n editSwatches(false);\n });\n picker.onValueChangedObservable.add(function (value) { // value is a color3\n if (activeField == picker.name) {\n updateValues(value, picker.name);\n }\n });\n pickerGrid.addControl(picker, 0, 0);\n\n // Picker body right quarant\n var pickerBodyRight: Grid = new Grid();\n pickerBodyRight.name = \"Dialogue Right Half\";\n pickerBodyRight.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\n var pickerBodyRightRows: number[] = [0.514, 0.486];\n pickerBodyRight.addRowDefinition(pickerBodyRightRows[0], false);\n pickerBodyRight.addRowDefinition(pickerBodyRightRows[1], false);\n dialogBody.addControl(pickerBodyRight, 1, 1);\n\n // Picker container swatches and buttons\n var pickerSwatchesButtons: Grid = new Grid();\n pickerSwatchesButtons.name = \"Swatches and Buttons\";\n var pickerButtonsCol: number[] = [0.417, 0.583];\n pickerSwatchesButtons.addRowDefinition(1.0, false);\n pickerSwatchesButtons.addColumnDefinition(pickerButtonsCol[0], false);\n pickerSwatchesButtons.addColumnDefinition(pickerButtonsCol[1], false);\n pickerBodyRight.addControl(pickerSwatchesButtons, 0, 0);\n\n // Picker Swatches quadrant\n var pickerSwatches: Grid = new Grid();\n pickerSwatches.name = \"New and Current Swatches\";\n var pickeSwatchesRows: number[] = [0.04, 0.16, 0.64, 0.16];\n pickerSwatches.addRowDefinition(pickeSwatchesRows[0], false);\n pickerSwatches.addRowDefinition(pickeSwatchesRows[1], false);\n pickerSwatches.addRowDefinition(pickeSwatchesRows[2], false);\n pickerSwatches.addRowDefinition(pickeSwatchesRows[3], false);\n pickerSwatchesButtons.addControl(pickerSwatches, 0, 0);\n\n // Active swatches\n var activeSwatches: Grid = new Grid();\n activeSwatches.name = \"Active Swatches\";\n activeSwatches.width = 0.67;\n activeSwatches.addRowDefinition(0.5, false);\n activeSwatches.addRowDefinition(0.5, false);\n pickerSwatches.addControl(activeSwatches, 2, 0);\n\n var labelWidth: number = (Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[0] * 0.11));\n var labelHeight: number = (Math.floor(parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * pickeSwatchesRows[1] * 0.5));\n\n if (options.pickerWidth > options.pickerHeight) {\n var labelTextSize: number = labelHeight;\n }\n else {\n var labelTextSize: number = labelWidth;\n }\n // New color swatch and previous color button\n var newText: TextBlock = new TextBlock();\n newText.text = \"new\";\n newText.name = \"New Color Label\";\n newText.color = buttonColor;\n newText.fontSize = labelTextSize;\n pickerSwatches.addControl(newText, 1, 0);\n\n newSwatch = new Rectangle();\n newSwatch.name = \"New Color Swatch\";\n newSwatch.background = options.lastColor;\n newSwatch.thickness = 0;\n activeSwatches.addControl(newSwatch, 0, 0);\n\n var currentSwatch: Button = Button.CreateSimpleButton(\"currentSwatch\", \"\");\n currentSwatch.background = options.lastColor;\n currentSwatch.thickness = 0;\n currentSwatch.onPointerClickObservable.add(() => {\n var revertColor = Color3.FromHexString(currentSwatch.background);\n updateValues(revertColor, currentSwatch.name!);\n editSwatches(false);\n });\n currentSwatch.pointerDownAnimation = () => { };\n currentSwatch.pointerUpAnimation = () => { };\n currentSwatch.pointerEnterAnimation = () => { };\n currentSwatch.pointerOutAnimation = () => { };\n activeSwatches.addControl(currentSwatch, 1, 0);\n\n var swatchOutline: Rectangle = new Rectangle();\n swatchOutline.name = \"Swatch Outline\";\n swatchOutline.width = 0.67;\n swatchOutline.thickness = 2;\n swatchOutline.color = currentSwatchesOutlineColor;\n swatchOutline.isHitTestVisible = false;\n pickerSwatches.addControl(swatchOutline, 2, 0);\n\n var currentText: TextBlock = new TextBlock();\n currentText.name = \"Current Color Label\";\n currentText.text = \"current\";\n currentText.color = buttonColor;\n currentText.fontSize = labelTextSize;\n pickerSwatches.addControl(currentText, 3, 0);\n\n // Buttons grid\n var buttonGrid: Grid = new Grid();\n buttonGrid.name = \"Button Grid\";\n buttonGrid.height = 0.8;\n var buttonGridRows: number = 1 / 3;\n buttonGrid.addRowDefinition(buttonGridRows, false);\n buttonGrid.addRowDefinition(buttonGridRows, false);\n buttonGrid.addRowDefinition(buttonGridRows, false);\n pickerSwatchesButtons.addControl(buttonGrid, 0, 1);\n\n // Determine pixel width and height for all buttons from overall panel dimensions\n buttonWidth = (Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[1] * 0.67)).toString() + \"px\";\n buttonHeight = (Math.floor(parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * (parseFloat(buttonGrid.height.toString()) / 100) * buttonGridRows * 0.7)).toString() + \"px\";\n\n // Determine button type size\n if (parseFloat(buttonWidth) > parseFloat(buttonHeight)) {\n buttonFontSize = Math.floor(parseFloat(buttonHeight) * 0.45);\n }\n else {\n buttonFontSize = Math.floor(parseFloat(buttonWidth) * 0.11);\n }\n\n // Panel Buttons\n var butOK: Button = Button.CreateSimpleButton(\"butOK\", \"OK\");\n butOK.width = buttonWidth;\n butOK.height = buttonHeight;\n butOK.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\n butOK.thickness = 2;\n butOK.color = buttonColor;\n butOK.fontSize = buttonFontSize;\n butOK.background = buttonBackgroundColor;\n butOK.onPointerEnterObservable.add(() => { butOK.background = buttonBackgroundHoverColor; });\n butOK.onPointerOutObservable.add(() => { butOK.background = buttonBackgroundColor; });\n butOK.pointerDownAnimation = () => {\n butOK.background = buttonBackgroundClickColor;\n };\n butOK.pointerUpAnimation = () => {\n butOK.background = buttonBackgroundHoverColor;\n };\n butOK.onPointerClickObservable.add(() => {\n editSwatches(false);\n closePicker(newSwatch.background);\n });\n buttonGrid.addControl(butOK, 0, 0);\n\n var butCancel: Button = Button.CreateSimpleButton(\"butCancel\", \"Cancel\");\n butCancel.width = buttonWidth;\n butCancel.height = buttonHeight;\n butCancel.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\n butCancel.thickness = 2;\n butCancel.color = buttonColor;\n butCancel.fontSize = buttonFontSize;\n butCancel.background = buttonBackgroundColor;\n butCancel.onPointerEnterObservable.add(() => { butCancel.background = buttonBackgroundHoverColor; });\n butCancel.onPointerOutObservable.add(() => { butCancel.background = buttonBackgroundColor; });\n butCancel.pointerDownAnimation = () => {\n butCancel.background = buttonBackgroundClickColor;\n };\n butCancel.pointerUpAnimation = () => {\n butCancel.background = buttonBackgroundHoverColor;\n };\n butCancel.onPointerClickObservable.add(() => {\n editSwatches(false);\n closePicker(currentSwatch.background);\n });\n buttonGrid.addControl(butCancel, 1, 0);\n\n if (options.savedColors) {\n var butSave: Button = Button.CreateSimpleButton(\"butSave\", \"Save\");\n butSave.width = buttonWidth;\n butSave.height = buttonHeight;\n butSave.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\n butSave.thickness = 2;\n butSave.fontSize = buttonFontSize;\n if (options.savedColors.length < options.swatchLimit!) {\n butSave.color = buttonColor;\n butSave.background = buttonBackgroundColor;\n }\n else {\n disableButton(butSave, true);\n }\n butSave.onPointerEnterObservable.add(() => {\n if (options.savedColors) {\n if (options.savedColors.length < options.swatchLimit!) {\n butSave.background = buttonBackgroundHoverColor;\n }\n }\n });\n butSave.onPointerOutObservable.add(() => {\n if (options.savedColors) {\n if (options.savedColors.length < options.swatchLimit!) {\n butSave.background = buttonBackgroundColor;\n }\n }\n });\n butSave.pointerDownAnimation = () => {\n if (options.savedColors) {\n if (options.savedColors.length < options.swatchLimit!) {\n butSave.background = buttonBackgroundClickColor;\n }\n }\n };\n butSave.pointerUpAnimation = () => {\n if (options.savedColors) {\n if (options.savedColors.length < options.swatchLimit!) {\n butSave.background = buttonBackgroundHoverColor;\n }\n }\n };\n butSave.onPointerClickObservable.add(() => {\n if (options.savedColors) {\n if (options.savedColors.length == 0) {\n setEditButtonVisibility(true);\n }\n if (options.savedColors.length < options.swatchLimit!) {\n updateSwatches(newSwatch.background, butSave);\n }\n editSwatches(false);\n }\n });\n if (options.savedColors.length > 0) {\n setEditButtonVisibility(true);\n }\n buttonGrid.addControl(butSave, 2, 0);\n }\n\n // Picker color values input\n var pickerColorValues: Grid = new Grid();\n pickerColorValues.name = \"Dialog Lower Right\";\n pickerColorValues.addRowDefinition(0.02, false);\n pickerColorValues.addRowDefinition(0.63, false);\n pickerColorValues.addRowDefinition(0.21, false);\n pickerColorValues.addRowDefinition(0.14, false);\n pickerBodyRight.addControl(pickerColorValues, 1, 0);\n\n // RGB values text boxes\n currentColor = Color3.FromHexString(options.lastColor);\n var rgbValuesQuadrant: Grid = new Grid();\n rgbValuesQuadrant.name = \"RGB Values\";\n rgbValuesQuadrant.width = 0.82;\n rgbValuesQuadrant.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\n rgbValuesQuadrant.addColumnDefinition(0.1, false);\n rgbValuesQuadrant.addColumnDefinition(0.2, false);\n rgbValuesQuadrant.addColumnDefinition(0.7, false);\n pickerColorValues.addControl(rgbValuesQuadrant, 1, 0);\n\n for (var i = 0; i < inputFieldLabels.length; i++) {\n var labelText: TextBlock = new TextBlock();\n labelText.text = inputFieldLabels[i];\n labelText.color = buttonColor;\n labelText.fontSize = buttonFontSize;\n rgbValuesQuadrant.addControl(labelText, i, 0);\n }\n\n // Input fields for RGB values\n rValInt = new InputText();\n rValInt.width = 0.83;\n rValInt.height = 0.72;\n rValInt.name = \"rIntField\";\n rValInt.fontSize = buttonFontSize;\n rValInt.text = (currentColor.r * 255).toString();\n rValInt.color = inputTextColor;\n rValInt.background = inputTextBackgroundColor;\n rValInt.onFocusObservable.add(() => {\n activeField = rValInt.name!;\n lastVal = rValInt.text;\n editSwatches(false);\n });\n rValInt.onBlurObservable.add(() => {\n if (rValInt.text == \"\") {\n rValInt.text = \"0\";\n }\n updateInt(rValInt, \"r\");\n if (activeField == rValInt.name) {\n activeField = \"\";\n }\n });\n rValInt.onTextChangedObservable.add(() => {\n if (activeField == rValInt.name) {\n updateInt(rValInt, \"r\");\n }\n });\n rgbValuesQuadrant.addControl(rValInt, 0, 1);\n\n gValInt = new InputText();\n gValInt.width = 0.83;\n gValInt.height = 0.72;\n gValInt.name = \"gIntField\";\n gValInt.fontSize = buttonFontSize;\n gValInt.text = (currentColor.g * 255).toString();\n gValInt.color = inputTextColor;\n gValInt.background = inputTextBackgroundColor;\n gValInt.onFocusObservable.add(() => {\n activeField = gValInt.name!;\n lastVal = gValInt.text;\n editSwatches(false);\n });\n gValInt.onBlurObservable.add(() => {\n if (gValInt.text == \"\") {\n gValInt.text = \"0\";\n }\n updateInt(gValInt, \"g\");\n if (activeField == gValInt.name) {\n activeField = \"\";\n }\n });\n gValInt.onTextChangedObservable.add(() => {\n if (activeField == gValInt.name) {\n updateInt(gValInt, \"g\");\n }\n });\n rgbValuesQuadrant.addControl(gValInt, 1, 1);\n\n bValInt = new InputText();\n bValInt.width = 0.83;\n bValInt.height = 0.72;\n bValInt.name = \"bIntField\";\n bValInt.fontSize = buttonFontSize;\n bValInt.text = (currentColor.b * 255).toString();\n bValInt.color = inputTextColor;\n bValInt.background = inputTextBackgroundColor;\n bValInt.onFocusObservable.add(() => {\n activeField = bValInt.name!;\n lastVal = bValInt.text;\n editSwatches(false);\n });\n bValInt.onBlurObservable.add(() => {\n if (bValInt.text == \"\") {\n bValInt.text = \"0\";\n }\n updateInt(bValInt, \"b\");\n if (activeField == bValInt.name) {\n activeField = \"\";\n }\n });\n bValInt.onTextChangedObservable.add(() => {\n if (activeField == bValInt.name) {\n updateInt(bValInt, \"b\");\n }\n });\n rgbValuesQuadrant.addControl(bValInt, 2, 1);\n\n rValDec = new InputText();\n rValDec.width = 0.95;\n rValDec.height = 0.72;\n rValDec.name = \"rDecField\";\n rValDec.fontSize = buttonFontSize;\n rValDec.text = currentColor.r.toString();\n rValDec.color = inputTextColor;\n rValDec.background = inputTextBackgroundColor;\n rValDec.onFocusObservable.add(() => {\n activeField = rValDec.name!;\n lastVal = rValDec.text;\n editSwatches(false);\n });\n rValDec.onBlurObservable.add(() => {\n if (parseFloat(rValDec.text) == 0 || rValDec.text == \"\") {\n rValDec.text = \"0\";\n updateFloat(rValDec, \"r\");\n }\n if (activeField == rValDec.name) {\n activeField = \"\";\n }\n });\n rValDec.onTextChangedObservable.add(() => {\n if (activeField == rValDec.name) {\n updateFloat(rValDec, \"r\");\n }\n });\n rgbValuesQuadrant.addControl(rValDec, 0, 2);\n\n gValDec = new InputText();\n gValDec.width = 0.95;\n gValDec.height = 0.72;\n gValDec.name = \"gDecField\";\n gValDec.fontSize = buttonFontSize;\n gValDec.text = currentColor.g.toString();\n gValDec.color = inputTextColor;\n gValDec.background = inputTextBackgroundColor;\n gValDec.onFocusObservable.add(() => {\n activeField = gValDec.name!;\n lastVal = gValDec.text;\n editSwatches(false);\n });\n gValDec.onBlurObservable.add(() => {\n if (parseFloat(gValDec.text) == 0 || gValDec.text == \"\") {\n gValDec.text = \"0\";\n updateFloat(gValDec, \"g\");\n }\n if (activeField == gValDec.name) {\n activeField = \"\";\n }\n });\n gValDec.onTextChangedObservable.add(() => {\n if (activeField == gValDec.name) {\n updateFloat(gValDec, \"g\");\n }\n });\n rgbValuesQuadrant.addControl(gValDec, 1, 2);\n\n bValDec = new InputText();\n bValDec.width = 0.95;\n bValDec.height = 0.72;\n bValDec.name = \"bDecField\";\n bValDec.fontSize = buttonFontSize;\n bValDec.text = currentColor.b.toString();\n bValDec.color = inputTextColor;\n bValDec.background = inputTextBackgroundColor;\n bValDec.onFocusObservable.add(() => {\n activeField = bValDec.name!;\n lastVal = bValDec.text;\n editSwatches(false);\n });\n bValDec.onBlurObservable.add(() => {\n if (parseFloat(bValDec.text) == 0 || bValDec.text == \"\") {\n bValDec.text = \"0\";\n updateFloat(bValDec, \"b\");\n }\n if (activeField == bValDec.name) {\n activeField = \"\";\n }\n });\n bValDec.onTextChangedObservable.add(() => {\n if (activeField == bValDec.name) {\n updateFloat(bValDec, \"b\");\n }\n });\n rgbValuesQuadrant.addControl(bValDec, 2, 2);\n\n // Hex value input\n var hexValueQuadrant: Grid = new Grid();\n hexValueQuadrant.name = \"Hex Value\";\n hexValueQuadrant.width = 0.82;\n hexValueQuadrant.addRowDefinition(1.0, false);\n hexValueQuadrant.addColumnDefinition(0.1, false);\n hexValueQuadrant.addColumnDefinition(0.9, false);\n pickerColorValues.addControl(hexValueQuadrant, 2, 0);\n\n var labelText: TextBlock = new TextBlock();\n labelText.text = \"#\";\n labelText.color = buttonColor;\n labelText.fontSize = buttonFontSize;\n hexValueQuadrant.addControl(labelText, 0, 0);\n\n hexVal = new InputText();\n hexVal.width = 0.96;\n hexVal.height = 0.72;\n hexVal.name = \"hexField\";\n hexVal.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\n hexVal.fontSize = buttonFontSize;\n var minusPound = options.lastColor.split(\"#\");\n hexVal.text = minusPound[1];\n hexVal.color = inputTextColor;\n hexVal.background = inputTextBackgroundColor;\n hexVal.onFocusObservable.add(() => {\n activeField = hexVal.name!;\n lastVal = hexVal.text;\n editSwatches(false);\n });\n hexVal.onBlurObservable.add(() => {\n if (hexVal.text.length == 3) {\n var val = hexVal.text.split(\"\");\n hexVal.text = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\n }\n if (hexVal.text == \"\") {\n hexVal.text = \"000000\";\n updateValues(Color3.FromHexString(hexVal.text), \"b\");\n }\n if (activeField == hexVal.name) {\n activeField = \"\";\n }\n });\n hexVal.onTextChangedObservable.add(() => {\n var newHexValue: string = hexVal.text;\n var checkHex: boolean = /[^0-9A-F]/i.test(newHexValue);\n if ((hexVal.text.length > 6 || checkHex) && activeField == hexVal.name) {\n hexVal.text = lastVal;\n }\n else {\n if (hexVal.text.length < 6) {\n var leadingZero: Number = 6 - hexVal.text.length;\n for (var i = 0; i < leadingZero; i++) {\n newHexValue = \"0\" + newHexValue;\n }\n }\n if (hexVal.text.length == 3) {\n var val: string[] = hexVal.text.split(\"\");\n newHexValue = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\n }\n newHexValue = \"#\" + newHexValue;\n if (activeField == hexVal.name) {\n lastVal = hexVal.text;\n updateValues(Color3.FromHexString(newHexValue), hexVal.name);\n }\n }\n });\n hexValueQuadrant.addControl(hexVal, 0, 1);\n\n if (options.savedColors && options.savedColors.length > 0) {\n updateSwatches(\"\", butSave!);\n }\n });\n }\n}\nRegisterClass(\"BABYLON.GUI.ColorPicker\", ColorPicker);"]}
1
+ {"version":3,"file":"colorpicker.js","sourceRoot":"","sources":["../../../../../../lts/gui/generated/2D/controls/colorpicker.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,2CAA6B;AAGlD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,0CAA4B;AACpD,OAAO,EAAE,MAAM,EAAE,4CAA8B;AAE/C,OAAO,EAAE,SAAS,EAAE,2CAA6B;AAEjD,OAAO,EAAE,WAAW,EAAE,+CAAiC;AAEvD,yCAAyC;AACzC;IAAiC,+BAAO;IAoIpC;;;OAGG;IACH,qBAAmB,IAAa;QAAhC,YACI,kBAAM,IAAI,CAAC,SAId;QALkB,UAAI,GAAJ,IAAI,CAAS;QApIxB,YAAM,GAAW,MAAM,CAAC,GAAG,EAAE,CAAC;QAC9B,eAAS,GAAG,IAAI,MAAM,EAAE,CAAC;QAEzB,6BAAuB,GAAG,KAAK,CAAC;QAChC,4BAAsB,GAAG,KAAK,CAAC;QAE/B,iBAAW,GAAG,CAAC,CAAC;QAChB,gBAAU,GAAG,CAAC,CAAC;QACf,iBAAW,GAAG,CAAC,CAAC;QAEhB,QAAE,GAAG,GAAG,CAAC;QACT,QAAE,GAAG,CAAC,CAAC;QACP,QAAE,GAAG,CAAC,CAAC;QAEP,wBAAkB,GAAG,CAAC,CAAC,CAAC;QAEhC;;WAEG;QACI,8BAAwB,GAAG,IAAI,UAAU,EAAU,CAAC;QAyS3D,SAAS;QACD,oBAAc,GAAG,KAAK,CAAC;QAvL3B,KAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACxC,KAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACpB,KAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;;IACjC,CAAC;IAlHD,sBAAW,8BAAK;QAFhB,iDAAiD;aAEjD;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;aAED,UAAiB,KAAa;YAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC3B,OAAO;aACV;YAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAE5B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEvC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAE9C,IAAI,CAAC,YAAY,EAAE,CAAC;YAEpB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;gBACvC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;aACrB;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;gBACvC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;aACrB;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE;gBACvC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;aACrB;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE;gBAC7C,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC;aACvB;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE;gBAC7C,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC;aACvB;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE;gBAC7C,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC;aACvB;YAED,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;;;OA1CA;IAiDD,sBAAW,8BAAK;QALhB;;;WAGG;aAEH;YACI,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;aAED,UAAiB,KAAsB;YACnC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;gBAC5C,OAAO;aACV;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACxC,KAAK,GAAG,KAAK,CAAC;oBACd,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBACjC;gBACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB;QACL,CAAC;;;OAfA;IAsBD,sBAAW,+BAAM;QALjB;;;WAGG;aAEH;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,kCAAkC;aAClC,UAAkB,KAAsB;YACpC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;gBAC7C,OAAO;aACV;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBAChC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBACzC,KAAK,GAAG,KAAK,CAAC;oBACd,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBAClC;gBACD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB;QACL,CAAC;;;OAhBA;IAoBD,sBAAW,6BAAI;QAFf,gCAAgC;aAEhC;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;aAED,UAAgB,KAAsB;YAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;;;OAJA;IAiBS,kCAAY,GAAtB;QACI,OAAO,aAAa,CAAC;IACzB,CAAC;IAED;;;OAGG;IACO,iCAAW,GAArB,UAAsB,aAAsB;QACxC,IAAI,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE;YAC5C,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC;SACrD;aAAM;YACH,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC;SACrD;IACL,CAAC;IAEO,wCAAkB,GAA1B;QACI,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QACvF,IAAM,cAAc,GAAG,MAAM,GAAG,GAAG,CAAC;QACpC,IAAM,aAAa,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpD,IAAM,UAAU,GAAG,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChD,IAAM,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,GAAG,CAAC;QAEzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,MAAM,CAAC;QACtD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,MAAM,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAEO,yCAAmB,GAA3B,UAA4B,QAAgB,EAAE,IAAY,EAAE,GAAW,EAAE,KAAa,EAAE,MAAc,EAAE,OAAgC;QACpI,IAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;QACvE,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5B,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,cAAc,CAAC,CAAC;QAExD,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC;QACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAE3C,IAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;QACxE,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;QACrC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAE5B,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC;QACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEO,iCAAW,GAAnB,UAAoB,OAAe,EAAE,OAAe,EAAE,MAAc,EAAE,OAAgC;QAClG,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;QAChC,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;QAChC,OAAO,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IAEO,6CAAuB,GAA/B,UAAgC,MAAc,EAAE,SAAiB;QAC7D,8DAA8D;QAC9D,IAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;SACjE;QACD,IAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxC,IAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QACjE,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAExB,IAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,IAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;QAClC,IAAM,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;QACvC,IAAM,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;QAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAE7B,IAAI,MAAM,GAAG,SAAS,IAAI,MAAM,GAAG,SAAS,EAAE;oBAC1C,SAAS;iBACZ;gBAED,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/B,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAE7B,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;gBAE3E,IAAM,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAE3D,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC5B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;gBAChC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;gBAChC,IAAI,UAAU,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;gBAE/D,0CAA0C;gBAC1C,IAAI,WAAW,GAAG,GAAG,CAAC;gBACtB,IAAM,QAAQ,GAAG,GAAG,CAAC;gBACrB,IAAM,QAAQ,GAAG,IAAI,CAAC;gBACtB,IAAM,WAAW,GAAG,EAAE,CAAC;gBACvB,IAAM,WAAW,GAAG,GAAG,CAAC;gBAExB,IAAI,MAAM,GAAG,WAAW,EAAE;oBACtB,WAAW,GAAG,QAAQ,CAAC;iBAC1B;qBAAM,IAAI,MAAM,GAAG,WAAW,EAAE;oBAC7B,WAAW,GAAG,QAAQ,CAAC;iBAC1B;qBAAM;oBACH,WAAW,GAAG,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,QAAQ,CAAC;iBAC3G;gBAED,UAAU,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;gBAE3D,IAAI,UAAU,GAAG,WAAW,EAAE;oBAC1B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;iBACtD;qBAAM,IAAI,UAAU,GAAG,CAAC,GAAG,WAAW,EAAE;oBACrC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;iBAClF;qBAAM;oBACH,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;iBACzB;aACJ;SACJ;QAED,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAElC,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;OAGG;IACI,2BAAK,GAAZ,UAAa,OAAgC;QACzC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE3B,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QACvF,IAAM,cAAc,GAAG,MAAM,GAAG,GAAG,CAAC;QACpC,IAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QACvC,IAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAErC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE;YACvE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;SACjF;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE;YAC7D,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YACvC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACrC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YAC3C,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YAE3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;SAC3F;QAED,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAErD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE;YAC7D,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;YACvB,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;YAC1B,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;SAC7B;QAED,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAElH,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC;QACvD,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QAEjD,IAAM,IAAI,GAAG,MAAM,GAAG,cAAc,GAAG,GAAG,CAAC;QAC3C,EAAE,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QACxE,EAAE,GAAG,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QACvE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzD,OAAO,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;IAKO,6CAAuB,GAA/B,UAAgC,CAAS,EAAE,CAAS;QAChD,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;YACvF,IAAM,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACnD,IAAM,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YAClD,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;SAC1E;aAAM,IAAI,IAAI,CAAC,uBAAuB,EAAE;YACrC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;YACpD,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;YACvD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;SACrD;QAED,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEhE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;IAChC,CAAC;IAEO,sCAAgB,GAAxB,UAAyB,CAAS,EAAE,CAAS;QACzC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAC9B,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QAC5B,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAE9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE;YAC9D,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,qCAAe,GAAvB,UAAwB,CAAS,EAAE,CAAS;QACxC,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QACvF,IAAM,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QACnD,IAAM,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAClD,IAAM,cAAc,GAAG,MAAM,GAAG,GAAG,CAAC;QACpC,IAAM,WAAW,GAAG,MAAM,GAAG,cAAc,CAAC;QAC5C,IAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;QACjC,IAAM,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC;QAEhD,IAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;QACvB,IAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;QAEvB,IAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAEjC,IAAI,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,aAAa,EAAE;YAC/C,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,oCAAc,GAArB,UAAsB,MAAe,EAAE,WAAoB,EAAE,SAAiB,EAAE,WAAmB,EAAE,EAAmB;QACpH,IAAI,CAAC,iBAAM,cAAc,YAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE;YACxE,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO,IAAI,CAAC;SACf;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAE3B,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QAEpC,mBAAmB;QACnB,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAE1G,IAAM,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACtC,IAAM,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAEtC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YAC7B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;SACvC;aAAM,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACnC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;SACtC;QAED,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAC/C,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,oCAAc,GAArB,UAAsB,MAAe,EAAE,WAAoB,EAAE,SAAiB,EAAE,EAAmB;QAC/F,sIAAsI;QACtI,IAAI,SAAS,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACtC,OAAO;SACV;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,mBAAmB;YACnB,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAE1G,IAAM,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACtC,IAAM,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAEtC,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACtC;SACJ;QAED,iBAAM,cAAc,YAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAEM,kCAAY,GAAnB,UAAoB,MAAe,EAAE,WAAoB,EAAE,SAAiB,EAAE,WAAmB,EAAE,WAAoB,EAAE,EAAmB;QACxI,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAE5B,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC/C,iBAAM,YAAY,YAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IACrF,CAAC;IAEM,mCAAa,GAApB;QACI,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,iBAAM,aAAa,WAAE,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACW,iCAAqB,GAAnC,UACI,eAAuC,EACvC,OAQC;QAKD,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO;YACvB,kBAAkB;YAClB,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC;YACrD,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC;YACvD,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC;YACtD,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC;YACnD,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;YAChD,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC;YAE9D,uBAAuB;YACvB,IAAM,aAAa,GAAW,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAC/E,IAAM,aAAa,GAAW,UAAU,CAAS,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;YACnG,IAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;YAC5D,IAAM,UAAU,GAAW,UAAU,GAAG,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;YACzE,IAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAS,OAAO,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;YAC3H,IAAM,aAAa,GAAW,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;YAC5F,IAAM,aAAa,GAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;YAEjI,gBAAgB;YAChB,IAAM,WAAW,GAAW,SAAS,CAAC;YACtC,IAAM,qBAAqB,GAAW,SAAS,CAAC;YAChD,IAAM,0BAA0B,GAAW,SAAS,CAAC;YACrD,IAAM,0BAA0B,GAAW,QAAQ,CAAC;YACpD,IAAM,mBAAmB,GAAW,SAAS,CAAC;YAC9C,IAAM,6BAA6B,GAAW,SAAS,CAAC;YACxD,IAAM,2BAA2B,GAAW,SAAS,CAAC;YACtD,IAAM,mBAAmB,GAAW,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACpE,IAAM,cAAc,GAAW,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC;YACrG,IAAM,aAAa,GAAW,SAAS,CAAC;YACxC,IAAM,cAAc,GAAW,SAAS,CAAC;YAEzC,kBAAkB;YAClB,IAAI,cAAsB,CAAC;YAC3B,IAAI,OAAe,CAAC;YAEpB,oBAAoB;YACpB,IAAM,gBAAgB,GAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACnD,IAAM,wBAAwB,GAAW,SAAS,CAAC;YACnD,IAAM,cAAc,GAAW,SAAS,CAAC;YAEzC,8FAA8F;YAC9F,IAAI,YAAoB,CAAC;YAEzB,gGAAgG;YAChG,IAAI,YAAkB,CAAC;YACvB,IAAI,cAAc,GAAY,KAAK,CAAC;YAEpC,gEAAgE;YAChE,IAAI,OAAe,CAAC;YACpB,IAAI,OAAe,CAAC;YACpB,IAAI,WAAmB,CAAC;YAExB,kIAAkI;YAClI,IAAM,eAAe,GAAS,IAAI,IAAI,EAAE,CAAC;YACzC,eAAe,CAAC,IAAI,GAAG,kBAAkB,CAAC;YAC1C,eAAe,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;YAC5C,IAAI,OAAO,CAAC,WAAW,EAAE;gBACrB,eAAe,CAAC,MAAM,GAAG,aAAa,CAAC;gBACvC,IAAM,MAAM,GAAW,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAChF,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAChD,eAAe,CAAC,gBAAgB,CAAC,GAAG,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC;aACzD;iBAAM;gBACH,eAAe,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;gBAC9C,eAAe,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;aAChD;YACD,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAE5C,uDAAuD;YACvD,IAAI,OAAO,CAAC,WAAW,EAAE;gBACrB,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;gBAC1B,YAAY,CAAC,IAAI,GAAG,eAAe,CAAC;gBACpC,YAAY,CAAC,iBAAiB,GAAG,OAAO,CAAC,sBAAsB,CAAC;gBAChE,YAAY,CAAC,UAAU,GAAG,qBAAqB,CAAC;gBAChD,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC,WAAY,CAAC;gBAC1C,IAAM,WAAW,GAAW,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;gBACpF,IAAI,WAAW,SAAQ,CAAC;gBACxB,IAAI,WAAW,IAAI,CAAC,EAAE;oBAClB,WAAW,GAAG,CAAC,CAAC;iBACnB;qBAAM;oBACH,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;iBACjC;gBACD,YAAY,CAAC,MAAM,GAAG,CAAC,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;gBAC9F,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;gBACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACjG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBACZ,YAAY,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;qBACnD;yBAAM;wBACH,YAAY,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;qBACnD;iBACJ;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAmB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBACZ,YAAY,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;qBACtD;yBAAM;wBACH,YAAY,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;qBACtD;iBACJ;gBACD,eAAe,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAClD;YAED,mBAAmB;YACnB,IAAM,WAAW,GAAS,IAAI,IAAI,EAAE,CAAC;YACrC,WAAW,CAAC,IAAI,GAAG,cAAc,CAAC;YAClC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;YAC1C,IAAM,SAAS,GAAW,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC1F,IAAM,eAAe,GAAa,CAAC,SAAS,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC;YAC/D,WAAW,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACxD,WAAW,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACxD,eAAe,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE9C,0BAA0B;YAC1B,IAAM,MAAM,GAAc,IAAI,SAAS,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,GAAG,qBAAqB,CAAC;YACpC,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;YAC9B,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;YACrB,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAErC,sBAAsB;YACtB,IAAM,WAAW,GAAW,MAAM,CAAC,kBAAkB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YAC1E,WAAW,CAAC,UAAU,GAAG,YAAY,CAAC;YACtC,IAAM,YAAY,GAAW,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrE,IAAM,cAAc,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACpG,WAAW,CAAC,KAAK,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;YACjD,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAa,CAAC,GAAG,GAAG,CAAC,CAAC;YACzE,WAAW,CAAC,SAAU,CAAC,qBAAqB,GAAG,OAAO,CAAC,yBAAyB,CAAC;YACjF,WAAW,CAAC,mBAAmB,GAAG,OAAO,CAAC,0BAA0B,CAAC;YACrE,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;YAC9D,WAAW,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YAC3C,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC;YAC1B,WAAW,CAAC,oBAAoB,GAAG,cAAO,CAAC,CAAC;YAC5C,WAAW,CAAC,kBAAkB,GAAG;gBAC7B,WAAW,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YAC/C,CAAC,CAAC;YACF,WAAW,CAAC,qBAAqB,GAAG;gBAChC,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;gBACtC,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC;YACnC,CAAC,CAAC;YACF,WAAW,CAAC,mBAAmB,GAAG;gBAC9B,WAAW,CAAC,KAAK,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;gBACjD,WAAW,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YAC/C,CAAC,CAAC;YACF,WAAW,CAAC,wBAAwB,CAAC,GAAG,CAAC;gBACrC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,WAAW,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE1C,wBAAwB;YACxB,IAAM,UAAU,GAAS,IAAI,IAAI,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,GAAG,eAAe,CAAC;YAClC,UAAU,CAAC,UAAU,GAAG,qBAAqB,CAAC;YAC9C,IAAM,cAAc,GAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAClD,UAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxC,UAAU,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACzD,UAAU,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACzD,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEzC,cAAc;YACd,IAAM,UAAU,GAAS,IAAI,IAAI,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,GAAG,aAAa,CAAC;YAChC,UAAU,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACzC,UAAU,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACzC,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAExC,kBAAkB;YAClB,IAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,GAAG,kBAAkB,CAAC;YACjC,IAAI,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE;gBAC5C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;aACvB;iBAAM;gBACH,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;aACxB;YACD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACvD,MAAM,CAAC,mBAAmB,GAAG,OAAO,CAAC,2BAA2B,CAAC;YACjE,MAAM,CAAC,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC;YAC7D,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAC/B,WAAW,GAAG,MAAM,CAAC,IAAK,CAAC;gBAC3B,OAAO,GAAG,EAAE,CAAC;gBACb,YAAY,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,KAAK;gBAC/C,oBAAoB;gBACpB,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE;oBAC5B,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;iBACpC;YACL,CAAC,CAAC,CAAC;YACH,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEpC,4BAA4B;YAC5B,IAAM,eAAe,GAAS,IAAI,IAAI,EAAE,CAAC;YACzC,eAAe,CAAC,IAAI,GAAG,qBAAqB,CAAC;YAC7C,eAAe,CAAC,mBAAmB,GAAG,OAAO,CAAC,yBAAyB,CAAC;YACxE,IAAM,mBAAmB,GAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACrD,eAAe,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAChE,eAAe,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAChE,UAAU,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE7C,wCAAwC;YACxC,IAAM,qBAAqB,GAAS,IAAI,IAAI,EAAE,CAAC;YAC/C,qBAAqB,CAAC,IAAI,GAAG,sBAAsB,CAAC;YACpD,IAAM,gBAAgB,GAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAClD,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACnD,qBAAqB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACtE,qBAAqB,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACtE,eAAe,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAExD,2BAA2B;YAC3B,IAAM,cAAc,GAAS,IAAI,IAAI,EAAE,CAAC;YACxC,cAAc,CAAC,IAAI,GAAG,0BAA0B,CAAC;YACjD,IAAM,iBAAiB,GAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7D,cAAc,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7D,cAAc,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7D,cAAc,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7D,cAAc,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7D,qBAAqB,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEvD,kBAAkB;YAClB,IAAM,cAAc,GAAS,IAAI,IAAI,EAAE,CAAC;YACxC,cAAc,CAAC,IAAI,GAAG,iBAAiB,CAAC;YACxC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;YAC5B,cAAc,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5C,cAAc,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5C,cAAc,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEhD,IAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACtH,IAAM,WAAW,GAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAElJ,IAAI,aAAqB,CAAC;YAC1B,IAAI,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE;gBAC5C,aAAa,GAAG,WAAW,CAAC;aAC/B;iBAAM;gBACH,aAAa,GAAG,UAAU,CAAC;aAC9B;YACD,6CAA6C;YAC7C,IAAM,OAAO,GAAc,IAAI,SAAS,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;YACrB,OAAO,CAAC,IAAI,GAAG,iBAAiB,CAAC;YACjC,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;YAC5B,OAAO,CAAC,QAAQ,GAAG,aAAa,CAAC;YACjC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEzC,IAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;YAClC,SAAS,CAAC,IAAI,GAAG,kBAAkB,CAAC;YACpC,SAAS,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;YACzC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;YACxB,cAAc,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE3C,IAAM,aAAa,GAAW,MAAM,CAAC,kBAAkB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YAC7E,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;YAC7C,aAAa,CAAC,SAAS,GAAG,CAAC,CAAC;YAC5B,aAAa,CAAC,wBAAwB,CAAC,GAAG,CAAC;gBACvC,IAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBACnE,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,IAAK,CAAC,CAAC;gBAC/C,YAAY,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,aAAa,CAAC,oBAAoB,GAAG,cAAO,CAAC,CAAC;YAC9C,aAAa,CAAC,kBAAkB,GAAG,cAAO,CAAC,CAAC;YAC5C,aAAa,CAAC,qBAAqB,GAAG,cAAO,CAAC,CAAC;YAC/C,aAAa,CAAC,mBAAmB,GAAG,cAAO,CAAC,CAAC;YAC7C,cAAc,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE/C,IAAM,aAAa,GAAc,IAAI,SAAS,EAAE,CAAC;YACjD,aAAa,CAAC,IAAI,GAAG,gBAAgB,CAAC;YACtC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC;YAC3B,aAAa,CAAC,SAAS,GAAG,CAAC,CAAC;YAC5B,aAAa,CAAC,KAAK,GAAG,2BAA2B,CAAC;YAClD,aAAa,CAAC,gBAAgB,GAAG,KAAK,CAAC;YACvC,cAAc,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE/C,IAAM,WAAW,GAAc,IAAI,SAAS,EAAE,CAAC;YAC/C,WAAW,CAAC,IAAI,GAAG,qBAAqB,CAAC;YACzC,WAAW,CAAC,IAAI,GAAG,SAAS,CAAC;YAC7B,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC;YAChC,WAAW,CAAC,QAAQ,GAAG,aAAa,CAAC;YACrC,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE7C,eAAe;YACf,IAAM,UAAU,GAAS,IAAI,IAAI,EAAE,CAAC;YACpC,UAAU,CAAC,IAAI,GAAG,aAAa,CAAC;YAChC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC;YACxB,IAAM,cAAc,GAAW,CAAC,GAAG,CAAC,CAAC;YACrC,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACnD,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACnD,UAAU,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACnD,qBAAqB,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEnD,iFAAiF;YACjF,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;YACjI,IAAM,YAAY,GACd,IAAI,CAAC,KAAK,CACN,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,cAAc,GAAG,GAAG,CACzJ,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;YAExB,6BAA6B;YAC7B,IAAI,UAAU,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,EAAE;gBACpD,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;aAChE;iBAAM;gBACH,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;aAC/D;YAED,gBAAgB;YAChB,IAAM,KAAK,GAAW,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC/D,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC;YAC1B,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;YAC5B,KAAK,CAAC,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC;YAC5D,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YACpB,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC;YAC1B,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC;YAChC,KAAK,CAAC,UAAU,GAAG,qBAAqB,CAAC;YACzC,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC;gBAC/B,KAAK,CAAC,UAAU,GAAG,0BAA0B,CAAC;YAClD,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,sBAAsB,CAAC,GAAG,CAAC;gBAC7B,KAAK,CAAC,UAAU,GAAG,qBAAqB,CAAC;YAC7C,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,oBAAoB,GAAG;gBACzB,KAAK,CAAC,UAAU,GAAG,0BAA0B,CAAC;YAClD,CAAC,CAAC;YACF,KAAK,CAAC,kBAAkB,GAAG;gBACvB,KAAK,CAAC,UAAU,GAAG,0BAA0B,CAAC;YAClD,CAAC,CAAC;YACF,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC;gBAC/B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YACH,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEnC,IAAM,SAAS,GAAW,MAAM,CAAC,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC3E,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC;YAC9B,SAAS,CAAC,MAAM,GAAG,YAAY,CAAC;YAChC,SAAS,CAAC,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC;YAChE,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;YACxB,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC;YAC9B,SAAS,CAAC,QAAQ,GAAG,cAAc,CAAC;YACpC,SAAS,CAAC,UAAU,GAAG,qBAAqB,CAAC;YAC7C,SAAS,CAAC,wBAAwB,CAAC,GAAG,CAAC;gBACnC,SAAS,CAAC,UAAU,GAAG,0BAA0B,CAAC;YACtD,CAAC,CAAC,CAAC;YACH,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC;gBACjC,SAAS,CAAC,UAAU,GAAG,qBAAqB,CAAC;YACjD,CAAC,CAAC,CAAC;YACH,SAAS,CAAC,oBAAoB,GAAG;gBAC7B,SAAS,CAAC,UAAU,GAAG,0BAA0B,CAAC;YACtD,CAAC,CAAC;YACF,SAAS,CAAC,kBAAkB,GAAG;gBAC3B,SAAS,CAAC,UAAU,GAAG,0BAA0B,CAAC;YACtD,CAAC,CAAC;YACF,SAAS,CAAC,wBAAwB,CAAC,GAAG,CAAC;gBACnC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEvC,IAAI,OAAO,CAAC,WAAW,EAAE;gBACrB,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBACvD,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;gBAC5B,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC;gBAC9B,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC;gBAC9D,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;gBACtB,OAAO,CAAC,QAAQ,GAAG,cAAc,CAAC;gBAClC,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,WAAY,EAAE;oBACnD,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;oBAC5B,OAAO,CAAC,UAAU,GAAG,qBAAqB,CAAC;iBAC9C;qBAAM;oBACH,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;iBAChC;gBACD,OAAO,CAAC,wBAAwB,CAAC,GAAG,CAAC;oBACjC,IAAI,OAAO,CAAC,WAAW,EAAE;wBACrB,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,WAAY,EAAE;4BACnD,OAAO,CAAC,UAAU,GAAG,0BAA0B,CAAC;yBACnD;qBACJ;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,sBAAsB,CAAC,GAAG,CAAC;oBAC/B,IAAI,OAAO,CAAC,WAAW,EAAE;wBACrB,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,WAAY,EAAE;4BACnD,OAAO,CAAC,UAAU,GAAG,qBAAqB,CAAC;yBAC9C;qBACJ;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,oBAAoB,GAAG;oBAC3B,IAAI,OAAO,CAAC,WAAW,EAAE;wBACrB,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,WAAY,EAAE;4BACnD,OAAO,CAAC,UAAU,GAAG,0BAA0B,CAAC;yBACnD;qBACJ;gBACL,CAAC,CAAC;gBACF,OAAO,CAAC,kBAAkB,GAAG;oBACzB,IAAI,OAAO,CAAC,WAAW,EAAE;wBACrB,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,WAAY,EAAE;4BACnD,OAAO,CAAC,UAAU,GAAG,0BAA0B,CAAC;yBACnD;qBACJ;gBACL,CAAC,CAAC;gBACF,OAAO,CAAC,wBAAwB,CAAC,GAAG,CAAC;oBACjC,IAAI,OAAO,CAAC,WAAW,EAAE;wBACrB,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;4BACjC,uBAAuB,CAAC,IAAI,CAAC,CAAC;yBACjC;wBACD,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,WAAY,EAAE;4BACnD,cAAc,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;yBACjD;wBACD,YAAY,CAAC,KAAK,CAAC,CAAC;qBACvB;gBACL,CAAC,CAAC,CAAC;gBACH,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oBAChC,uBAAuB,CAAC,IAAI,CAAC,CAAC;iBACjC;gBACD,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aACxC;YAED,4BAA4B;YAC5B,IAAM,iBAAiB,GAAS,IAAI,IAAI,EAAE,CAAC;YAC3C,iBAAiB,CAAC,IAAI,GAAG,oBAAoB,CAAC;YAC9C,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChD,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChD,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChD,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChD,eAAe,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEpD,wBAAwB;YACxB,IAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC7D,IAAM,iBAAiB,GAAS,IAAI,IAAI,EAAE,CAAC;YAC3C,iBAAiB,CAAC,IAAI,GAAG,YAAY,CAAC;YACtC,iBAAiB,CAAC,KAAK,GAAG,IAAI,CAAC;YAC/B,iBAAiB,CAAC,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC;YACxE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YACjD,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YACjD,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YACjD,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAClD,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAClD,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAClD,iBAAiB,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC9C,IAAM,WAAS,GAAc,IAAI,SAAS,EAAE,CAAC;gBAC7C,WAAS,CAAC,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACrC,WAAS,CAAC,KAAK,GAAG,WAAW,CAAC;gBAC9B,WAAS,CAAC,QAAQ,GAAG,cAAc,CAAC;gBACpC,iBAAiB,CAAC,UAAU,CAAC,WAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aACjD;YAED,8BAA8B;YAC9B,IAAM,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;YAC3B,OAAO,CAAC,QAAQ,GAAG,cAAc,CAAC;YAClC,OAAO,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjD,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC;YAC/B,OAAO,CAAC,UAAU,GAAG,wBAAwB,CAAC;YAC9C,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC;gBAC1B,WAAW,GAAG,OAAO,CAAC,IAAK,CAAC;gBAC5B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;gBACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBACzB,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE;oBACpB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;iBACtB;gBACD,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxB,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC7B,WAAW,GAAG,EAAE,CAAC;iBACpB;YACL,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAChC,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC7B,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;iBAC3B;YACL,CAAC,CAAC,CAAC;YACH,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE5C,IAAM,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;YAC3B,OAAO,CAAC,QAAQ,GAAG,cAAc,CAAC;YAClC,OAAO,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjD,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC;YAC/B,OAAO,CAAC,UAAU,GAAG,wBAAwB,CAAC;YAC9C,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC;gBAC1B,WAAW,GAAG,OAAO,CAAC,IAAK,CAAC;gBAC5B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;gBACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBACzB,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE;oBACpB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;iBACtB;gBACD,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxB,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC7B,WAAW,GAAG,EAAE,CAAC;iBACpB;YACL,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAChC,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC7B,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;iBAC3B;YACL,CAAC,CAAC,CAAC;YACH,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE5C,IAAM,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;YAC3B,OAAO,CAAC,QAAQ,GAAG,cAAc,CAAC;YAClC,OAAO,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjD,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC;YAC/B,OAAO,CAAC,UAAU,GAAG,wBAAwB,CAAC;YAC9C,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC;gBAC1B,WAAW,GAAG,OAAO,CAAC,IAAK,CAAC;gBAC5B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;gBACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBACzB,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE;oBACpB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;iBACtB;gBACD,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxB,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC7B,WAAW,GAAG,EAAE,CAAC;iBACpB;YACL,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAChC,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC7B,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;iBAC3B;YACL,CAAC,CAAC,CAAC;YACH,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE5C,IAAM,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;YAC3B,OAAO,CAAC,QAAQ,GAAG,cAAc,CAAC;YAClC,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzC,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC;YAC/B,OAAO,CAAC,UAAU,GAAG,wBAAwB,CAAC;YAC9C,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC;gBAC1B,WAAW,GAAG,OAAO,CAAC,IAAK,CAAC;gBAC5B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;gBACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBACzB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE;oBACrD,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;oBACnB,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;iBAC7B;gBACD,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC7B,WAAW,GAAG,EAAE,CAAC;iBACpB;YACL,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAChC,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC7B,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;iBAC7B;YACL,CAAC,CAAC,CAAC;YACH,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE5C,IAAM,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;YAC3B,OAAO,CAAC,QAAQ,GAAG,cAAc,CAAC;YAClC,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzC,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC;YAC/B,OAAO,CAAC,UAAU,GAAG,wBAAwB,CAAC;YAC9C,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC;gBAC1B,WAAW,GAAG,OAAO,CAAC,IAAK,CAAC;gBAC5B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;gBACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBACzB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE;oBACrD,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;oBACnB,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;iBAC7B;gBACD,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC7B,WAAW,GAAG,EAAE,CAAC;iBACpB;YACL,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAChC,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC7B,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;iBAC7B;YACL,CAAC,CAAC,CAAC;YACH,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE5C,IAAM,OAAO,GAAG,IAAI,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;YAC3B,OAAO,CAAC,QAAQ,GAAG,cAAc,CAAC;YAClC,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzC,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC;YAC/B,OAAO,CAAC,UAAU,GAAG,wBAAwB,CAAC;YAC9C,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC;gBAC1B,WAAW,GAAG,OAAO,CAAC,IAAK,CAAC;gBAC5B,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;gBACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBACzB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE;oBACrD,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;oBACnB,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;iBAC7B;gBACD,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC7B,WAAW,GAAG,EAAE,CAAC;iBACpB;YACL,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAChC,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE;oBAC7B,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;iBAC7B;YACL,CAAC,CAAC,CAAC;YACH,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE5C,kBAAkB;YAClB,IAAM,gBAAgB,GAAS,IAAI,IAAI,EAAE,CAAC;YAC1C,gBAAgB,CAAC,IAAI,GAAG,WAAW,CAAC;YACpC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC;YAC9B,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9C,gBAAgB,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACjD,gBAAgB,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACjD,iBAAiB,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAErD,IAAM,SAAS,GAAc,IAAI,SAAS,EAAE,CAAC;YAC7C,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC;YACrB,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC;YAC9B,SAAS,CAAC,QAAQ,GAAG,cAAc,CAAC;YACpC,gBAAgB,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE7C,IAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACpB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;YACzB,MAAM,CAAC,mBAAmB,GAAG,OAAO,CAAC,2BAA2B,CAAC;YACjE,MAAM,CAAC,QAAQ,GAAG,cAAc,CAAC;YACjC,IAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,CAAC,KAAK,GAAG,cAAc,CAAC;YAC9B,MAAM,CAAC,UAAU,GAAG,wBAAwB,CAAC;YAC7C,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC;gBACzB,WAAW,GAAG,MAAM,CAAC,IAAK,CAAC;gBAC3B,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;gBACtB,YAAY,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBACxB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;oBACzB,IAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAClC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;iBACrE;gBACD,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE;oBACnB,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;oBACvB,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;iBACxD;gBACD,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE;oBAC5B,WAAW,GAAG,EAAE,CAAC;iBACpB;YACL,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAC/B,IAAI,WAAW,GAAW,MAAM,CAAC,IAAI,CAAC;gBACtC,IAAM,QAAQ,GAAY,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACzD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE;oBACpE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;iBACzB;qBAAM;oBACH,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;wBACxB,IAAM,WAAW,GAAW,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;wBACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;4BAClC,WAAW,GAAG,GAAG,GAAG,WAAW,CAAC;yBACnC;qBACJ;oBACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;wBACzB,IAAM,GAAG,GAAa,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAC5C,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;qBACrE;oBACD,WAAW,GAAG,GAAG,GAAG,WAAW,CAAC;oBAChC,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE;wBAC5B,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;wBACtB,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;qBAChE;iBACJ;YACL,CAAC,CAAC,CAAC;YACH,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE1C,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvD,cAAc,CAAC,EAAE,EAAE,OAAQ,CAAC,CAAC;aAChC;YAED;;;;;;eAMG;YACH,SAAS,YAAY,CAAC,KAAa,EAAE,UAAkB;gBACnD,WAAW,GAAG,UAAU,CAAC;gBACzB,IAAM,WAAW,GAAW,KAAK,CAAC,WAAW,EAAE,CAAC;gBAChD,SAAS,CAAC,UAAU,GAAG,WAAW,CAAC;gBACnC,IAAI,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE;oBAC7B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;iBACvD;gBACD,IAAI,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE;oBAC7B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;iBACvD;gBACD,IAAI,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE;oBAC7B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;iBACvD;gBACD,IAAI,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE;oBAC7B,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;iBACrC;gBACD,IAAI,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE;oBAC7B,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;iBACrC;gBACD,IAAI,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE;oBAC7B,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;iBACrC;gBACD,IAAI,MAAM,CAAC,IAAI,IAAI,WAAW,EAAE;oBAC5B,IAAM,YAAU,GAAa,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACpD,MAAM,CAAC,IAAI,GAAG,YAAU,CAAC,CAAC,CAAC,CAAC;iBAC/B;gBACD,IAAI,MAAM,CAAC,IAAI,IAAI,WAAW,EAAE;oBAC5B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;iBACxB;YACL,CAAC;YAED,gHAAgH;YAChH,SAAS,SAAS,CAAC,KAAgB,EAAE,OAAe;gBAChD,IAAI,QAAQ,GAAW,KAAK,CAAC,IAAI,CAAC;gBAClC,IAAM,QAAQ,GAAY,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnD,IAAI,QAAQ,EAAE;oBACV,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;oBACrB,OAAO;iBACV;qBAAM;oBACH,IAAI,QAAQ,IAAI,EAAE,EAAE;wBAChB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE;4BACpC,QAAQ,GAAG,GAAG,CAAC;yBAClB;6BAAM,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE;4BAC7C,QAAQ,GAAG,KAAK,CAAC;yBACpB;6BAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE;4BAClC,QAAQ,GAAG,GAAG,CAAC;yBAClB;qBACJ;oBACD,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE;wBAC3B,OAAO,GAAG,QAAQ,CAAC;qBACtB;iBACJ;gBACD,IAAI,QAAQ,IAAI,EAAE,EAAE;oBAChB,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACzC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;oBACtB,IAAM,YAAY,GAAW,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBACxE,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE;wBAC3B,IAAI,OAAO,IAAI,GAAG,EAAE;4BAChB,YAAY,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;yBAClG;6BAAM,IAAI,OAAO,IAAI,GAAG,EAAE;4BACvB,YAAY,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;yBAClG;6BAAM;4BACH,YAAY,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;yBAClG;qBACJ;iBACJ;YACL,CAAC;YAED,6GAA6G;YAC7G,SAAS,WAAW,CAAC,KAAgB,EAAE,OAAe;gBAClD,IAAI,QAAQ,GAAW,KAAK,CAAC,IAAI,CAAC;gBAClC,IAAM,QAAQ,GAAY,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpD,IAAI,QAAQ,EAAE;oBACV,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;oBACrB,OAAO;iBACV;qBAAM;oBACH,IAAI,QAAQ,IAAI,EAAE,IAAI,QAAQ,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;wBAChE,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,EAAE;4BAC5B,QAAQ,GAAG,KAAK,CAAC;yBACpB;6BAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,EAAE;4BACnC,QAAQ,GAAG,KAAK,CAAC;yBACpB;6BAAM,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE;4BACpC,QAAQ,GAAG,KAAK,CAAC;yBACpB;qBACJ;oBACD,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE;wBAC3B,OAAO,GAAG,QAAQ,CAAC;qBACtB;iBACJ;gBACD,IAAI,QAAQ,IAAI,EAAE,IAAI,QAAQ,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBAChE,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAC3C,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;iBACzB;qBAAM;oBACH,QAAQ,GAAG,KAAK,CAAC;iBACpB;gBACD,IAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBAChE,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE;oBAC3B,IAAI,OAAO,IAAI,GAAG,EAAE;wBAChB,YAAY,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;qBAC9F;yBAAM,IAAI,OAAO,IAAI,GAAG,EAAE;wBACvB,YAAY,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;qBAC9F;yBAAM;wBACH,YAAY,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;qBAC9F;iBACJ;YACL,CAAC;YAED,wFAAwF;YACxF,SAAS,YAAY,CAAC,KAAa;gBAC/B,IAAI,OAAO,CAAC,WAAW,EAAE;oBACrB,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBACxC;gBACD,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;oBACxD,uBAAuB,CAAC,KAAK,CAAC,CAAC;oBAC/B,cAAc,GAAG,KAAK,CAAC;iBAC1B;YACL,CAAC;YAED,yEAAyE;YACzE,SAAS,YAAY;gBACjB,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE;oBAC1D,IAAI,IAAI,SAAQ,CAAC;oBACjB,IAAI,cAAc,EAAE;wBAChB,IAAI,GAAG,GAAG,CAAC;qBACd;yBAAM;wBACH,IAAI,GAAG,EAAE,CAAC;qBACb;oBACD,IAAM,QAAM,GAAW,MAAM,CAAC,kBAAkB,CAAC,SAAS,GAAG,YAAY,EAAE,IAAI,CAAC,CAAC;oBACjF,QAAM,CAAC,UAAU,GAAG,YAAY,CAAC;oBACjC,IAAM,WAAW,GAAW,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;oBACpF,IAAM,eAAe,GAAW,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;oBAE9E,uGAAuG;oBACvG,IAAI,eAAe,GAAG,cAAc,EAAE;wBAClC,QAAM,CAAC,KAAK,GAAG,aAAa,CAAC;qBAChC;yBAAM;wBACH,QAAM,CAAC,KAAK,GAAG,cAAc,CAAC;qBACjC;oBACD,QAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;oBAC/C,QAAM,CAAC,SAAU,CAAC,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC;oBACxE,QAAM,CAAC,MAAM,GAAG,QAAM,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;oBAC5D,QAAM,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;oBACtD,QAAM,CAAC,SAAS,GAAG,CAAC,CAAC;oBACrB,IAAM,UAAQ,GAAG,YAAY,CAAC;oBAC9B,QAAM,CAAC,oBAAoB,GAAG;wBAC1B,QAAM,CAAC,SAAS,GAAG,CAAC,CAAC;oBACzB,CAAC,CAAC;oBACF,QAAM,CAAC,kBAAkB,GAAG;wBACxB,QAAM,CAAC,SAAS,GAAG,CAAC,CAAC;oBACzB,CAAC,CAAC;oBACF,QAAM,CAAC,qBAAqB,GAAG;wBAC3B,QAAM,CAAC,SAAS,GAAG,CAAC,CAAC;oBACzB,CAAC,CAAC;oBACF,QAAM,CAAC,mBAAmB,GAAG;wBACzB,QAAM,CAAC,SAAS,GAAG,CAAC,CAAC;oBACzB,CAAC,CAAC;oBACF,QAAM,CAAC,wBAAwB,CAAC,GAAG,CAAC;wBAChC,IAAI,CAAC,cAAc,EAAE;4BACjB,IAAI,OAAO,CAAC,WAAW,EAAE;gCACrB,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,UAAQ,CAAC,CAAC,EAAE,QAAM,CAAC,IAAK,CAAC,CAAC;6BACnF;yBACJ;6BAAM;4BACH,YAAY,CAAC,UAAQ,CAAC,CAAC;4BACvB,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;yBAC/B;oBACL,CAAC,CAAC,CAAC;oBACH,OAAO,QAAM,CAAC;iBACjB;qBAAM;oBACH,OAAO,IAAI,CAAC;iBACf;YACL,CAAC;YAED,yEAAyE;YACzE,SAAS,YAAY,CAAC,IAAc;gBAChC,IAAI,IAAI,KAAK,SAAS,EAAE;oBACpB,cAAc,GAAG,IAAI,CAAC;iBACzB;gBACD,IAAI,UAAkB,CAAC;gBACvB,IAAI,cAAc,EAAE;oBAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACnD,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAW,CAAC;wBAChD,UAAU,CAAC,SAAU,CAAC,IAAI,GAAG,GAAG,CAAC;qBACpC;oBACD,IAAI,OAAO,KAAK,SAAS,EAAE;wBACvB,OAAO,CAAC,SAAU,CAAC,IAAI,GAAG,MAAM,CAAC;qBACpC;iBACJ;qBAAM;oBACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACnD,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAW,CAAC;wBAChD,UAAU,CAAC,SAAU,CAAC,IAAI,GAAG,EAAE,CAAC;qBACnC;oBACD,IAAI,OAAO,KAAK,SAAS,EAAE;wBACvB,OAAO,CAAC,SAAU,CAAC,IAAI,GAAG,MAAM,CAAC;qBACpC;iBACJ;YACL,CAAC;YAED;;;;;;;eAOG;YACH,SAAS,cAAc,CAAC,KAAa,EAAE,MAAc;gBACjD,IAAI,OAAO,CAAC,WAAW,EAAE;oBACrB,IAAI,KAAK,IAAI,EAAE,EAAE;wBACb,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACnC;oBACD,YAAY,GAAG,CAAC,CAAC;oBACjB,YAAY,CAAC,aAAa,EAAE,CAAC;oBAC7B,IAAM,QAAQ,GAAW,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,kBAAmB,CAAC,CAAC;oBAC7F,IAAI,WAAW,SAAQ,CAAC;oBACxB,IAAI,QAAQ,IAAI,CAAC,EAAE;wBACf,WAAW,GAAG,CAAC,CAAC;qBACnB;yBAAM;wBACH,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC;qBAC9B;oBACD,IAAI,YAAY,CAAC,QAAQ,IAAI,QAAQ,GAAG,WAAW,EAAE;wBACjD,IAAM,WAAW,GAAW,YAAY,CAAC,QAAQ,CAAC;wBAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;4BAClC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;yBACvC;wBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;4BAC7C,IAAI,CAAC,GAAG,CAAC,EAAE;gCACP,YAAY,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;6BACnD;iCAAM;gCACH,YAAY,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;6BACnD;yBACJ;qBACJ;oBACD,YAAY,CAAC,MAAM,GAAG,CAAC,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;oBAE3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE;wBACxE,6GAA6G;wBAC7G,IAAI,mBAAmB,SAAQ,CAAC;wBAChC,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,kBAAmB,EAAE;4BACpE,mBAAmB,GAAG,OAAO,CAAC,kBAAmB,CAAC;yBACrD;6BAAM;4BACH,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,kBAAmB,CAAC;yBAClG;wBACD,IAAM,gBAAgB,GAAW,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,kBAAmB,CAAC,CAAC;wBACzG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE;4BAC9C,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAmB,EAAE;gCACjC,SAAS;6BACZ;4BACD,IAAM,MAAM,GAAkB,YAAY,EAAE,CAAC;4BAC7C,IAAI,MAAM,IAAI,IAAI,EAAE;gCAChB,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gCACtC,CAAC,IAAI,CAAC,CAAC;gCACP,YAAY,EAAE,CAAC;6BAClB;iCAAM;gCACH,SAAS;6BACZ;yBACJ;qBACJ;oBACD,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,IAAI,OAAO,CAAC,WAAY,EAAE;wBACpD,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;qBAC/B;yBAAM;wBACH,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;qBAChC;iBACJ;YACL,CAAC;YAED,+EAA+E;YAC/E,SAAS,uBAAuB,CAAC,YAAqB;gBAClD,IAAI,YAAY,EAAE;oBACd,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;oBACvD,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;oBAC5B,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC;oBAC9B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;oBACzE,OAAO,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;oBAChE,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC;oBAC9D,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,yBAAyB,CAAC;oBAChE,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;oBACtB,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;oBAC5B,OAAO,CAAC,QAAQ,GAAG,cAAc,CAAC;oBAClC,OAAO,CAAC,UAAU,GAAG,qBAAqB,CAAC;oBAC3C,OAAO,CAAC,wBAAwB,CAAC,GAAG,CAAC;wBACjC,OAAO,CAAC,UAAU,GAAG,0BAA0B,CAAC;oBACpD,CAAC,CAAC,CAAC;oBACH,OAAO,CAAC,sBAAsB,CAAC,GAAG,CAAC;wBAC/B,OAAO,CAAC,UAAU,GAAG,qBAAqB,CAAC;oBAC/C,CAAC,CAAC,CAAC;oBACH,OAAO,CAAC,oBAAoB,GAAG;wBAC3B,OAAO,CAAC,UAAU,GAAG,0BAA0B,CAAC;oBACpD,CAAC,CAAC;oBACF,OAAO,CAAC,kBAAkB,GAAG;wBACzB,OAAO,CAAC,UAAU,GAAG,0BAA0B,CAAC;oBACpD,CAAC,CAAC;oBACF,OAAO,CAAC,wBAAwB,CAAC,GAAG,CAAC;wBACjC,IAAI,cAAc,EAAE;4BAChB,cAAc,GAAG,KAAK,CAAC;yBAC1B;6BAAM;4BACH,cAAc,GAAG,IAAI,CAAC;yBACzB;wBACD,YAAY,EAAE,CAAC;oBACnB,CAAC,CAAC,CAAC;oBACH,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;iBACxC;qBAAM;oBACH,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;iBACrC;YACL,CAAC;YAED,qEAAqE;YACrE,SAAS,aAAa,CAAC,MAAc,EAAE,QAAiB;gBACpD,IAAI,QAAQ,EAAE;oBACV,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;oBACnC,MAAM,CAAC,UAAU,GAAG,6BAA6B,CAAC;iBACrD;qBAAM;oBACH,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;oBAC3B,MAAM,CAAC,UAAU,GAAG,qBAAqB,CAAC;iBAC7C;YACL,CAAC;YAED,kGAAkG;YAClG,SAAS,WAAW,CAAC,KAAa;gBAC9B,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvD,OAAO,CAAC;wBACJ,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,WAAW,EAAE,KAAK;qBACrB,CAAC,CAAC;iBACN;qBAAM;oBACH,OAAO,CAAC;wBACJ,WAAW,EAAE,KAAK;qBACrB,CAAC,CAAC;iBACN;gBACD,eAAe,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IA39Cc,oBAAQ,GAAG,QAAQ,CAAC;IA0BnC;QADC,SAAS,EAAE;4CAGX;IAiDD;QADC,SAAS,EAAE;4CAGX;IAsBD;QADC,SAAS,EAAE;6CAGX;IAoBD;QADC,SAAS,EAAE;2CAGX;IA+1CL,kBAAC;CAAA,AA79CD,CAAiC,OAAO,GA69CvC;SA79CY,WAAW;AA89CxB,aAAa,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC","sourcesContent":["import { Observable } from \"core/Misc/observable\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\n\r\nimport { Control } from \"./control\";\r\nimport { Measure } from \"../measure\";\r\nimport { InputText } from \"./inputText\";\r\nimport { Rectangle } from \"./rectangle\";\r\nimport { Button } from \"./button\";\r\nimport { Grid } from \"./grid\";\r\nimport { AdvancedDynamicTexture } from \"../advancedDynamicTexture\";\r\nimport { TextBlock } from \"../controls/textBlock\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { PointerInfoBase } from \"core/Events/pointerEvents\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport { ICanvas, ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\nimport { EngineStore } from \"core/Engines/engineStore\";\r\n\r\n/** Class used to create color pickers */\r\nexport class ColorPicker extends Control {\r\n private static _Epsilon = 0.000001;\r\n private _colorWheelCanvas: ICanvas;\r\n\r\n private _value: Color3 = Color3.Red();\r\n private _tmpColor = new Color3();\r\n\r\n private _pointerStartedOnSquare = false;\r\n private _pointerStartedOnWheel = false;\r\n\r\n private _squareLeft = 0;\r\n private _squareTop = 0;\r\n private _squareSize = 0;\r\n\r\n private _h = 360;\r\n private _s = 1;\r\n private _v = 1;\r\n\r\n private _lastPointerDownId = -1;\r\n\r\n /**\r\n * Observable raised when the value changes\r\n */\r\n public onValueChangedObservable = new Observable<Color3>();\r\n\r\n /** Gets or sets the color of the color picker */\r\n @serialize()\r\n public get value(): Color3 {\r\n return this._value;\r\n }\r\n\r\n public set value(value: Color3) {\r\n if (this._value.equals(value)) {\r\n return;\r\n }\r\n\r\n this._value.copyFrom(value);\r\n\r\n this._value.toHSVToRef(this._tmpColor);\r\n\r\n this._h = this._tmpColor.r;\r\n this._s = Math.max(this._tmpColor.g, 0.00001);\r\n this._v = Math.max(this._tmpColor.b, 0.00001);\r\n\r\n this._markAsDirty();\r\n\r\n if (this._value.r <= ColorPicker._Epsilon) {\r\n this._value.r = 0;\r\n }\r\n\r\n if (this._value.g <= ColorPicker._Epsilon) {\r\n this._value.g = 0;\r\n }\r\n\r\n if (this._value.b <= ColorPicker._Epsilon) {\r\n this._value.b = 0;\r\n }\r\n\r\n if (this._value.r >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.r = 1.0;\r\n }\r\n\r\n if (this._value.g >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.g = 1.0;\r\n }\r\n\r\n if (this._value.b >= 1.0 - ColorPicker._Epsilon) {\r\n this._value.b = 1.0;\r\n }\r\n\r\n this.onValueChangedObservable.notifyObservers(this._value);\r\n }\r\n\r\n /**\r\n * Gets or sets control width\r\n * @see https://doc.babylonjs.com/how_to/gui#position-and-size\r\n */\r\n @serialize()\r\n public get width(): string | number {\r\n return this._width.toString(this._host);\r\n }\r\n\r\n public set width(value: string | number) {\r\n if (this._width.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._width.fromString(value)) {\r\n if (this._width.getValue(this._host) === 0) {\r\n value = \"1px\";\r\n this._width.fromString(value);\r\n }\r\n this._height.fromString(value);\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets control height\r\n * @see https://doc.babylonjs.com/how_to/gui#position-and-size\r\n */\r\n @serialize()\r\n public get height(): string | number {\r\n return this._height.toString(this._host);\r\n }\r\n\r\n /** Gets or sets control height */\r\n public set height(value: string | number) {\r\n if (this._height.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._height.fromString(value)) {\r\n if (this._height.getValue(this._host) === 0) {\r\n value = \"1px\";\r\n this._height.fromString(value);\r\n }\r\n this._width.fromString(value);\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets control size */\r\n @serialize()\r\n public get size(): string | number {\r\n return this.width;\r\n }\r\n\r\n public set size(value: string | number) {\r\n this.width = value;\r\n }\r\n\r\n /**\r\n * Creates a new ColorPicker\r\n * @param name defines the control name\r\n */\r\n constructor(public name?: string) {\r\n super(name);\r\n this.value = new Color3(0.88, 0.1, 0.1);\r\n this.size = \"200px\";\r\n this.isPointerBlocker = true;\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"ColorPicker\";\r\n }\r\n\r\n /**\r\n * @param parentMeasure\r\n * @hidden\r\n */\r\n protected _preMeasure(parentMeasure: Measure): void {\r\n if (parentMeasure.width < parentMeasure.height) {\r\n this._currentMeasure.height = parentMeasure.width;\r\n } else {\r\n this._currentMeasure.width = parentMeasure.height;\r\n }\r\n }\r\n\r\n private _updateSquareProps(): void {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const wheelThickness = radius * 0.2;\r\n const innerDiameter = (radius - wheelThickness) * 2;\r\n const squareSize = innerDiameter / Math.sqrt(2);\r\n const offset = radius - squareSize * 0.5;\r\n\r\n this._squareLeft = this._currentMeasure.left + offset;\r\n this._squareTop = this._currentMeasure.top + offset;\r\n this._squareSize = squareSize;\r\n }\r\n\r\n private _drawGradientSquare(hueValue: number, left: number, top: number, width: number, height: number, context: ICanvasRenderingContext) {\r\n const lgh = context.createLinearGradient(left, top, width + left, top);\r\n lgh.addColorStop(0, \"#fff\");\r\n lgh.addColorStop(1, \"hsl(\" + hueValue + \", 100%, 50%)\");\r\n\r\n context.fillStyle = lgh;\r\n context.fillRect(left, top, width, height);\r\n\r\n const lgv = context.createLinearGradient(left, top, left, height + top);\r\n lgv.addColorStop(0, \"rgba(0,0,0,0)\");\r\n lgv.addColorStop(1, \"#000\");\r\n\r\n context.fillStyle = lgv;\r\n context.fillRect(left, top, width, height);\r\n }\r\n\r\n private _drawCircle(centerX: number, centerY: number, radius: number, context: ICanvasRenderingContext) {\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius + 1, 0, 2 * Math.PI, false);\r\n context.lineWidth = 3;\r\n context.strokeStyle = \"#333333\";\r\n context.stroke();\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);\r\n context.lineWidth = 3;\r\n context.strokeStyle = \"#ffffff\";\r\n context.stroke();\r\n }\r\n\r\n private _createColorWheelCanvas(radius: number, thickness: number): ICanvas {\r\n // Shoudl abstract platform instead of using LastCreatedEngine\r\n const engine = EngineStore.LastCreatedEngine;\r\n if (!engine) {\r\n throw new Error(\"Invalid engine. Unable to create a canvas.\");\r\n }\r\n const canvas = engine.createCanvas(radius * 2, radius * 2);\r\n const context = canvas.getContext(\"2d\");\r\n const image = context.getImageData(0, 0, radius * 2, radius * 2);\r\n const data = image.data;\r\n\r\n const color = this._tmpColor;\r\n const maxDistSq = radius * radius;\r\n const innerRadius = radius - thickness;\r\n const minDistSq = innerRadius * innerRadius;\r\n\r\n for (let x = -radius; x < radius; x++) {\r\n for (let y = -radius; y < radius; y++) {\r\n const distSq = x * x + y * y;\r\n\r\n if (distSq > maxDistSq || distSq < minDistSq) {\r\n continue;\r\n }\r\n\r\n const dist = Math.sqrt(distSq);\r\n const ang = Math.atan2(y, x);\r\n\r\n Color3.HSVtoRGBToRef((ang * 180) / Math.PI + 180, dist / radius, 1, color);\r\n\r\n const index = (x + radius + (y + radius) * 2 * radius) * 4;\r\n\r\n data[index] = color.r * 255;\r\n data[index + 1] = color.g * 255;\r\n data[index + 2] = color.b * 255;\r\n let alphaRatio = (dist - innerRadius) / (radius - innerRadius);\r\n\r\n //apply less alpha to bigger color pickers\r\n let alphaAmount = 0.2;\r\n const maxAlpha = 0.2;\r\n const minAlpha = 0.04;\r\n const lowerRadius = 50;\r\n const upperRadius = 150;\r\n\r\n if (radius < lowerRadius) {\r\n alphaAmount = maxAlpha;\r\n } else if (radius > upperRadius) {\r\n alphaAmount = minAlpha;\r\n } else {\r\n alphaAmount = ((minAlpha - maxAlpha) * (radius - lowerRadius)) / (upperRadius - lowerRadius) + maxAlpha;\r\n }\r\n\r\n alphaRatio = (dist - innerRadius) / (radius - innerRadius);\r\n\r\n if (alphaRatio < alphaAmount) {\r\n data[index + 3] = 255 * (alphaRatio / alphaAmount);\r\n } else if (alphaRatio > 1 - alphaAmount) {\r\n data[index + 3] = 255 * (1.0 - (alphaRatio - (1 - alphaAmount)) / alphaAmount);\r\n } else {\r\n data[index + 3] = 255;\r\n }\r\n }\r\n }\r\n\r\n context.putImageData(image, 0, 0);\r\n\r\n return canvas;\r\n }\r\n\r\n /**\r\n * @param context\r\n * @hidden\r\n */\r\n public _draw(context: ICanvasRenderingContext): void {\r\n context.save();\r\n\r\n this._applyStates(context);\r\n\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const wheelThickness = radius * 0.2;\r\n const left = this._currentMeasure.left;\r\n const top = this._currentMeasure.top;\r\n\r\n if (!this._colorWheelCanvas || this._colorWheelCanvas.width != radius * 2) {\r\n this._colorWheelCanvas = this._createColorWheelCanvas(radius, wheelThickness);\r\n }\r\n\r\n this._updateSquareProps();\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowColor = this.shadowColor;\r\n context.shadowBlur = this.shadowBlur;\r\n context.shadowOffsetX = this.shadowOffsetX;\r\n context.shadowOffsetY = this.shadowOffsetY;\r\n\r\n context.fillRect(this._squareLeft, this._squareTop, this._squareSize, this._squareSize);\r\n }\r\n\r\n context.drawImage(this._colorWheelCanvas, left, top);\r\n\r\n if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {\r\n context.shadowBlur = 0;\r\n context.shadowOffsetX = 0;\r\n context.shadowOffsetY = 0;\r\n }\r\n\r\n this._drawGradientSquare(this._h, this._squareLeft, this._squareTop, this._squareSize, this._squareSize, context);\r\n\r\n let cx = this._squareLeft + this._squareSize * this._s;\r\n let cy = this._squareTop + this._squareSize * (1 - this._v);\r\n\r\n this._drawCircle(cx, cy, radius * 0.04, context);\r\n\r\n const dist = radius - wheelThickness * 0.5;\r\n cx = left + radius + Math.cos(((this._h - 180) * Math.PI) / 180) * dist;\r\n cy = top + radius + Math.sin(((this._h - 180) * Math.PI) / 180) * dist;\r\n this._drawCircle(cx, cy, wheelThickness * 0.35, context);\r\n\r\n context.restore();\r\n }\r\n\r\n // Events\r\n private _pointerIsDown = false;\r\n\r\n private _updateValueFromPointer(x: number, y: number): void {\r\n if (this._pointerStartedOnWheel) {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const centerX = radius + this._currentMeasure.left;\r\n const centerY = radius + this._currentMeasure.top;\r\n this._h = (Math.atan2(y - centerY, x - centerX) * 180) / Math.PI + 180;\r\n } else if (this._pointerStartedOnSquare) {\r\n this._updateSquareProps();\r\n this._s = (x - this._squareLeft) / this._squareSize;\r\n this._v = 1 - (y - this._squareTop) / this._squareSize;\r\n this._s = Math.min(this._s, 1);\r\n this._s = Math.max(this._s, ColorPicker._Epsilon);\r\n this._v = Math.min(this._v, 1);\r\n this._v = Math.max(this._v, ColorPicker._Epsilon);\r\n }\r\n\r\n Color3.HSVtoRGBToRef(this._h, this._s, this._v, this._tmpColor);\r\n\r\n this.value = this._tmpColor;\r\n }\r\n\r\n private _isPointOnSquare(x: number, y: number): boolean {\r\n this._updateSquareProps();\r\n\r\n const left = this._squareLeft;\r\n const top = this._squareTop;\r\n const size = this._squareSize;\r\n\r\n if (x >= left && x <= left + size && y >= top && y <= top + size) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _isPointOnWheel(x: number, y: number): boolean {\r\n const radius = Math.min(this._currentMeasure.width, this._currentMeasure.height) * 0.5;\r\n const centerX = radius + this._currentMeasure.left;\r\n const centerY = radius + this._currentMeasure.top;\r\n const wheelThickness = radius * 0.2;\r\n const innerRadius = radius - wheelThickness;\r\n const radiusSq = radius * radius;\r\n const innerRadiusSq = innerRadius * innerRadius;\r\n\r\n const dx = x - centerX;\r\n const dy = y - centerY;\r\n\r\n const distSq = dx * dx + dy * dy;\r\n\r\n if (distSq <= radiusSq && distSq >= innerRadiusSq) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n this._pointerIsDown = true;\r\n\r\n this._pointerStartedOnSquare = false;\r\n this._pointerStartedOnWheel = false;\r\n\r\n // Invert transform\r\n this._invertTransformMatrix.transformCoordinates(coordinates.x, coordinates.y, this._transformedPosition);\r\n\r\n const x = this._transformedPosition.x;\r\n const y = this._transformedPosition.y;\r\n\r\n if (this._isPointOnSquare(x, y)) {\r\n this._pointerStartedOnSquare = true;\r\n } else if (this._isPointOnWheel(x, y)) {\r\n this._pointerStartedOnWheel = true;\r\n }\r\n\r\n this._updateValueFromPointer(x, y);\r\n this._host._capturingControl[pointerId] = this;\r\n this._lastPointerDownId = pointerId;\r\n return true;\r\n }\r\n\r\n public _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\r\n // Only listen to pointer move events coming from the last pointer to click on the element (To support dual vr controller interaction)\r\n if (pointerId != this._lastPointerDownId) {\r\n return;\r\n }\r\n\r\n if (!this.isReadOnly) {\r\n // Invert transform\r\n this._invertTransformMatrix.transformCoordinates(coordinates.x, coordinates.y, this._transformedPosition);\r\n\r\n const x = this._transformedPosition.x;\r\n const y = this._transformedPosition.y;\r\n\r\n if (this._pointerIsDown) {\r\n this._updateValueFromPointer(x, y);\r\n }\r\n }\r\n\r\n super._onPointerMove(target, coordinates, pointerId, pi);\r\n }\r\n\r\n public _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean, pi: PointerInfoBase): void {\r\n this._pointerIsDown = false;\r\n\r\n delete this._host._capturingControl[pointerId];\r\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick, pi);\r\n }\r\n\r\n public _onCanvasBlur() {\r\n this._forcePointerUp();\r\n super._onCanvasBlur();\r\n }\r\n\r\n /**\r\n * This function expands the color picker by creating a color picker dialog with manual\r\n * color value input and the ability to save colors into an array to be used later in\r\n * subsequent launches of the dialogue.\r\n * @param advancedTexture defines the AdvancedDynamicTexture the dialog is assigned to\r\n * @param options defines size for dialog and options for saved colors. Also accepts last color picked as hex string and saved colors array as hex strings.\r\n * @param options.pickerWidth\r\n * @param options.pickerHeight\r\n * @param options.headerHeight\r\n * @param options.lastColor\r\n * @param options.swatchLimit\r\n * @param options.numSwatchesPerLine\r\n * @param options.savedColors\r\n * @returns picked color as a hex string and the saved colors array as hex strings.\r\n */\r\n public static ShowPickerDialogAsync(\r\n advancedTexture: AdvancedDynamicTexture,\r\n options: {\r\n pickerWidth?: string;\r\n pickerHeight?: string;\r\n headerHeight?: string;\r\n lastColor?: string;\r\n swatchLimit?: number;\r\n numSwatchesPerLine?: number;\r\n savedColors?: Array<string>;\r\n }\r\n ): Promise<{\r\n savedColors?: string[];\r\n pickedColor: string;\r\n }> {\r\n return new Promise((resolve) => {\r\n // Default options\r\n options.pickerWidth = options.pickerWidth || \"640px\";\r\n options.pickerHeight = options.pickerHeight || \"400px\";\r\n options.headerHeight = options.headerHeight || \"35px\";\r\n options.lastColor = options.lastColor || \"#000000\";\r\n options.swatchLimit = options.swatchLimit || 20;\r\n options.numSwatchesPerLine = options.numSwatchesPerLine || 10;\r\n\r\n // Window size settings\r\n const drawerMaxRows: number = options.swatchLimit / options.numSwatchesPerLine;\r\n const rawSwatchSize: number = parseFloat(<string>options.pickerWidth) / options.numSwatchesPerLine;\r\n const gutterSize: number = Math.floor(rawSwatchSize * 0.25);\r\n const colGutters: number = gutterSize * (options.numSwatchesPerLine + 1);\r\n const swatchSize: number = Math.floor((parseFloat(<string>options.pickerWidth) - colGutters) / options.numSwatchesPerLine);\r\n const drawerMaxSize: number = swatchSize * drawerMaxRows + gutterSize * (drawerMaxRows + 1);\r\n const containerSize: string = (parseInt(options.pickerHeight) + drawerMaxSize + Math.floor(swatchSize * 0.25)).toString() + \"px\";\r\n\r\n // Button Colors\r\n const buttonColor: string = \"#c0c0c0\";\r\n const buttonBackgroundColor: string = \"#535353\";\r\n const buttonBackgroundHoverColor: string = \"#414141\";\r\n const buttonBackgroundClickColor: string = \"515151\";\r\n const buttonDisabledColor: string = \"#555555\";\r\n const buttonDisabledBackgroundColor: string = \"#454545\";\r\n const currentSwatchesOutlineColor: string = \"#404040\";\r\n const luminanceLimitColor: Color3 = Color3.FromHexString(\"#dddddd\");\r\n const luminanceLimit: number = luminanceLimitColor.r + luminanceLimitColor.g + luminanceLimitColor.b;\r\n const iconColorDark: string = \"#aaaaaa\";\r\n const iconColorLight: string = \"#ffffff\";\r\n\r\n // Button settings\r\n let buttonFontSize: number;\r\n let butEdit: Button;\r\n\r\n // Input Text Colors\r\n const inputFieldLabels: string[] = [\"R\", \"G\", \"B\"];\r\n const inputTextBackgroundColor: string = \"#454545\";\r\n const inputTextColor: string = \"#f0f0f0\";\r\n\r\n // This int is used for naming swatches and serves as the index for calling them from the list\r\n let swatchNumber: number;\r\n\r\n // Menu Panel options. We need to know if the swatchDrawer exists so we can create it if needed.\r\n let swatchDrawer: Grid;\r\n let editSwatchMode: boolean = false;\r\n\r\n // Color InputText fields that will be updated upon value change\r\n let butSave: Button;\r\n let lastVal: string;\r\n let activeField: string;\r\n\r\n // Dialog menu container which will contain both the main dialogue window and the swatch drawer which opens once a color is saved.\r\n const dialogContainer: Grid = new Grid();\r\n dialogContainer.name = \"Dialog Container\";\r\n dialogContainer.width = options.pickerWidth;\r\n if (options.savedColors) {\r\n dialogContainer.height = containerSize;\r\n const topRow: number = parseInt(options.pickerHeight) / parseInt(containerSize);\r\n dialogContainer.addRowDefinition(topRow, false);\r\n dialogContainer.addRowDefinition(1.0 - topRow, false);\r\n } else {\r\n dialogContainer.height = options.pickerHeight;\r\n dialogContainer.addRowDefinition(1.0, false);\r\n }\r\n advancedTexture.addControl(dialogContainer);\r\n\r\n // Swatch drawer which contains all saved color buttons\r\n if (options.savedColors) {\r\n swatchDrawer = new Grid();\r\n swatchDrawer.name = \"Swatch Drawer\";\r\n swatchDrawer.verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;\r\n swatchDrawer.background = buttonBackgroundColor;\r\n swatchDrawer.width = options.pickerWidth!;\r\n const initialRows: number = options.savedColors.length / options.numSwatchesPerLine;\r\n let gutterCount: number;\r\n if (initialRows == 0) {\r\n gutterCount = 0;\r\n } else {\r\n gutterCount = initialRows + 1;\r\n }\r\n swatchDrawer.height = (swatchSize * initialRows + gutterCount * gutterSize).toString() + \"px\";\r\n swatchDrawer.top = Math.floor(swatchSize * 0.25).toString() + \"px\";\r\n for (let i = 0; i < Math.ceil(options.savedColors.length / options.numSwatchesPerLine) * 2 + 1; i++) {\r\n if (i % 2 != 0) {\r\n swatchDrawer.addRowDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addRowDefinition(gutterSize, true);\r\n }\r\n }\r\n for (let i = 0; i < options.numSwatchesPerLine! * 2 + 1; i++) {\r\n if (i % 2 != 0) {\r\n swatchDrawer.addColumnDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addColumnDefinition(gutterSize, true);\r\n }\r\n }\r\n dialogContainer.addControl(swatchDrawer, 1, 0);\r\n }\r\n\r\n // Picker container\r\n const pickerPanel: Grid = new Grid();\r\n pickerPanel.name = \"Picker Panel\";\r\n pickerPanel.height = options.pickerHeight;\r\n const panelHead: number = parseInt(options.headerHeight) / parseInt(options.pickerHeight);\r\n const pickerPanelRows: number[] = [panelHead, 1.0 - panelHead];\r\n pickerPanel.addRowDefinition(pickerPanelRows[0], false);\r\n pickerPanel.addRowDefinition(pickerPanelRows[1], false);\r\n dialogContainer.addControl(pickerPanel, 0, 0);\r\n\r\n // Picker container header\r\n const header: Rectangle = new Rectangle();\r\n header.name = \"Dialogue Header Bar\";\r\n header.background = \"#cccccc\";\r\n header.thickness = 0;\r\n pickerPanel.addControl(header, 0, 0);\r\n\r\n // Header close button\r\n const closeButton: Button = Button.CreateSimpleButton(\"closeButton\", \"a\");\r\n closeButton.fontFamily = \"coreglyphs\";\r\n const headerColor3: Color3 = Color3.FromHexString(header.background);\r\n const closeIconColor = new Color3(1.0 - headerColor3.r, 1.0 - headerColor3.g, 1.0 - headerColor3.b);\r\n closeButton.color = closeIconColor.toHexString();\r\n closeButton.fontSize = Math.floor(parseInt(options.headerHeight!) * 0.6);\r\n closeButton.textBlock!.textVerticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n closeButton.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_RIGHT;\r\n closeButton.height = closeButton.width = options.headerHeight;\r\n closeButton.background = header.background;\r\n closeButton.thickness = 0;\r\n closeButton.pointerDownAnimation = () => {};\r\n closeButton.pointerUpAnimation = () => {\r\n closeButton.background = header.background;\r\n };\r\n closeButton.pointerEnterAnimation = () => {\r\n closeButton.color = header.background;\r\n closeButton.background = \"red\";\r\n };\r\n closeButton.pointerOutAnimation = () => {\r\n closeButton.color = closeIconColor.toHexString();\r\n closeButton.background = header.background;\r\n };\r\n closeButton.onPointerClickObservable.add(() => {\r\n closePicker(currentSwatch.background);\r\n });\r\n pickerPanel.addControl(closeButton, 0, 0);\r\n\r\n // Dialog container body\r\n const dialogBody: Grid = new Grid();\r\n dialogBody.name = \"Dialogue Body\";\r\n dialogBody.background = buttonBackgroundColor;\r\n const dialogBodyCols: number[] = [0.4375, 0.5625];\r\n dialogBody.addRowDefinition(1.0, false);\r\n dialogBody.addColumnDefinition(dialogBodyCols[0], false);\r\n dialogBody.addColumnDefinition(dialogBodyCols[1], false);\r\n pickerPanel.addControl(dialogBody, 1, 0);\r\n\r\n // Picker grid\r\n const pickerGrid: Grid = new Grid();\r\n pickerGrid.name = \"Picker Grid\";\r\n pickerGrid.addRowDefinition(0.85, false);\r\n pickerGrid.addRowDefinition(0.15, false);\r\n dialogBody.addControl(pickerGrid, 0, 0);\r\n\r\n // Picker control\r\n const picker = new ColorPicker();\r\n picker.name = \"GUI Color Picker\";\r\n if (options.pickerHeight < options.pickerWidth) {\r\n picker.width = 0.89;\r\n } else {\r\n picker.height = 0.89;\r\n }\r\n picker.value = Color3.FromHexString(options.lastColor);\r\n picker.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n picker.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n picker.onPointerDownObservable.add(() => {\r\n activeField = picker.name!;\r\n lastVal = \"\";\r\n editSwatches(false);\r\n });\r\n picker.onValueChangedObservable.add(function (value) {\r\n // value is a color3\r\n if (activeField == picker.name) {\r\n updateValues(value, picker.name);\r\n }\r\n });\r\n pickerGrid.addControl(picker, 0, 0);\r\n\r\n // Picker body right quarant\r\n const pickerBodyRight: Grid = new Grid();\r\n pickerBodyRight.name = \"Dialogue Right Half\";\r\n pickerBodyRight.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n const pickerBodyRightRows: number[] = [0.514, 0.486];\r\n pickerBodyRight.addRowDefinition(pickerBodyRightRows[0], false);\r\n pickerBodyRight.addRowDefinition(pickerBodyRightRows[1], false);\r\n dialogBody.addControl(pickerBodyRight, 1, 1);\r\n\r\n // Picker container swatches and buttons\r\n const pickerSwatchesButtons: Grid = new Grid();\r\n pickerSwatchesButtons.name = \"Swatches and Buttons\";\r\n const pickerButtonsCol: number[] = [0.417, 0.583];\r\n pickerSwatchesButtons.addRowDefinition(1.0, false);\r\n pickerSwatchesButtons.addColumnDefinition(pickerButtonsCol[0], false);\r\n pickerSwatchesButtons.addColumnDefinition(pickerButtonsCol[1], false);\r\n pickerBodyRight.addControl(pickerSwatchesButtons, 0, 0);\r\n\r\n // Picker Swatches quadrant\r\n const pickerSwatches: Grid = new Grid();\r\n pickerSwatches.name = \"New and Current Swatches\";\r\n const pickeSwatchesRows: number[] = [0.04, 0.16, 0.64, 0.16];\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[0], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[1], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[2], false);\r\n pickerSwatches.addRowDefinition(pickeSwatchesRows[3], false);\r\n pickerSwatchesButtons.addControl(pickerSwatches, 0, 0);\r\n\r\n // Active swatches\r\n const activeSwatches: Grid = new Grid();\r\n activeSwatches.name = \"Active Swatches\";\r\n activeSwatches.width = 0.67;\r\n activeSwatches.addRowDefinition(0.5, false);\r\n activeSwatches.addRowDefinition(0.5, false);\r\n pickerSwatches.addControl(activeSwatches, 2, 0);\r\n\r\n const labelWidth: number = Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[0] * 0.11);\r\n const labelHeight: number = Math.floor(parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * pickeSwatchesRows[1] * 0.5);\r\n\r\n let labelTextSize: number;\r\n if (options.pickerWidth > options.pickerHeight) {\r\n labelTextSize = labelHeight;\r\n } else {\r\n labelTextSize = labelWidth;\r\n }\r\n // New color swatch and previous color button\r\n const newText: TextBlock = new TextBlock();\r\n newText.text = \"new\";\r\n newText.name = \"New Color Label\";\r\n newText.color = buttonColor;\r\n newText.fontSize = labelTextSize;\r\n pickerSwatches.addControl(newText, 1, 0);\r\n\r\n const newSwatch = new Rectangle();\r\n newSwatch.name = \"New Color Swatch\";\r\n newSwatch.background = options.lastColor;\r\n newSwatch.thickness = 0;\r\n activeSwatches.addControl(newSwatch, 0, 0);\r\n\r\n const currentSwatch: Button = Button.CreateSimpleButton(\"currentSwatch\", \"\");\r\n currentSwatch.background = options.lastColor;\r\n currentSwatch.thickness = 0;\r\n currentSwatch.onPointerClickObservable.add(() => {\r\n const revertColor = Color3.FromHexString(currentSwatch.background);\r\n updateValues(revertColor, currentSwatch.name!);\r\n editSwatches(false);\r\n });\r\n currentSwatch.pointerDownAnimation = () => {};\r\n currentSwatch.pointerUpAnimation = () => {};\r\n currentSwatch.pointerEnterAnimation = () => {};\r\n currentSwatch.pointerOutAnimation = () => {};\r\n activeSwatches.addControl(currentSwatch, 1, 0);\r\n\r\n const swatchOutline: Rectangle = new Rectangle();\r\n swatchOutline.name = \"Swatch Outline\";\r\n swatchOutline.width = 0.67;\r\n swatchOutline.thickness = 2;\r\n swatchOutline.color = currentSwatchesOutlineColor;\r\n swatchOutline.isHitTestVisible = false;\r\n pickerSwatches.addControl(swatchOutline, 2, 0);\r\n\r\n const currentText: TextBlock = new TextBlock();\r\n currentText.name = \"Current Color Label\";\r\n currentText.text = \"current\";\r\n currentText.color = buttonColor;\r\n currentText.fontSize = labelTextSize;\r\n pickerSwatches.addControl(currentText, 3, 0);\r\n\r\n // Buttons grid\r\n const buttonGrid: Grid = new Grid();\r\n buttonGrid.name = \"Button Grid\";\r\n buttonGrid.height = 0.8;\r\n const buttonGridRows: number = 1 / 3;\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n buttonGrid.addRowDefinition(buttonGridRows, false);\r\n pickerSwatchesButtons.addControl(buttonGrid, 0, 1);\r\n\r\n // Determine pixel width and height for all buttons from overall panel dimensions\r\n const buttonWidth = Math.floor(parseInt(options.pickerWidth) * dialogBodyCols[1] * pickerButtonsCol[1] * 0.67).toString() + \"px\";\r\n const buttonHeight =\r\n Math.floor(\r\n parseInt(options.pickerHeight) * pickerPanelRows[1] * pickerBodyRightRows[0] * (parseFloat(buttonGrid.height.toString()) / 100) * buttonGridRows * 0.7\r\n ).toString() + \"px\";\r\n\r\n // Determine button type size\r\n if (parseFloat(buttonWidth) > parseFloat(buttonHeight)) {\r\n buttonFontSize = Math.floor(parseFloat(buttonHeight) * 0.45);\r\n } else {\r\n buttonFontSize = Math.floor(parseFloat(buttonWidth) * 0.11);\r\n }\r\n\r\n // Panel Buttons\r\n const butOK: Button = Button.CreateSimpleButton(\"butOK\", \"OK\");\r\n butOK.width = buttonWidth;\r\n butOK.height = buttonHeight;\r\n butOK.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butOK.thickness = 2;\r\n butOK.color = buttonColor;\r\n butOK.fontSize = buttonFontSize;\r\n butOK.background = buttonBackgroundColor;\r\n butOK.onPointerEnterObservable.add(() => {\r\n butOK.background = buttonBackgroundHoverColor;\r\n });\r\n butOK.onPointerOutObservable.add(() => {\r\n butOK.background = buttonBackgroundColor;\r\n });\r\n butOK.pointerDownAnimation = () => {\r\n butOK.background = buttonBackgroundClickColor;\r\n };\r\n butOK.pointerUpAnimation = () => {\r\n butOK.background = buttonBackgroundHoverColor;\r\n };\r\n butOK.onPointerClickObservable.add(() => {\r\n editSwatches(false);\r\n closePicker(newSwatch.background);\r\n });\r\n buttonGrid.addControl(butOK, 0, 0);\r\n\r\n const butCancel: Button = Button.CreateSimpleButton(\"butCancel\", \"Cancel\");\r\n butCancel.width = buttonWidth;\r\n butCancel.height = buttonHeight;\r\n butCancel.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butCancel.thickness = 2;\r\n butCancel.color = buttonColor;\r\n butCancel.fontSize = buttonFontSize;\r\n butCancel.background = buttonBackgroundColor;\r\n butCancel.onPointerEnterObservable.add(() => {\r\n butCancel.background = buttonBackgroundHoverColor;\r\n });\r\n butCancel.onPointerOutObservable.add(() => {\r\n butCancel.background = buttonBackgroundColor;\r\n });\r\n butCancel.pointerDownAnimation = () => {\r\n butCancel.background = buttonBackgroundClickColor;\r\n };\r\n butCancel.pointerUpAnimation = () => {\r\n butCancel.background = buttonBackgroundHoverColor;\r\n };\r\n butCancel.onPointerClickObservable.add(() => {\r\n editSwatches(false);\r\n closePicker(currentSwatch.background);\r\n });\r\n buttonGrid.addControl(butCancel, 1, 0);\r\n\r\n if (options.savedColors) {\r\n butSave = Button.CreateSimpleButton(\"butSave\", \"Save\");\r\n butSave.width = buttonWidth;\r\n butSave.height = buttonHeight;\r\n butSave.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n butSave.thickness = 2;\r\n butSave.fontSize = buttonFontSize;\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.color = buttonColor;\r\n butSave.background = buttonBackgroundColor;\r\n } else {\r\n disableButton(butSave, true);\r\n }\r\n butSave.onPointerEnterObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundHoverColor;\r\n }\r\n }\r\n });\r\n butSave.onPointerOutObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundColor;\r\n }\r\n }\r\n });\r\n butSave.pointerDownAnimation = () => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundClickColor;\r\n }\r\n }\r\n };\r\n butSave.pointerUpAnimation = () => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n butSave.background = buttonBackgroundHoverColor;\r\n }\r\n }\r\n };\r\n butSave.onPointerClickObservable.add(() => {\r\n if (options.savedColors) {\r\n if (options.savedColors.length == 0) {\r\n setEditButtonVisibility(true);\r\n }\r\n if (options.savedColors.length < options.swatchLimit!) {\r\n updateSwatches(newSwatch.background, butSave);\r\n }\r\n editSwatches(false);\r\n }\r\n });\r\n if (options.savedColors.length > 0) {\r\n setEditButtonVisibility(true);\r\n }\r\n buttonGrid.addControl(butSave, 2, 0);\r\n }\r\n\r\n // Picker color values input\r\n const pickerColorValues: Grid = new Grid();\r\n pickerColorValues.name = \"Dialog Lower Right\";\r\n pickerColorValues.addRowDefinition(0.02, false);\r\n pickerColorValues.addRowDefinition(0.63, false);\r\n pickerColorValues.addRowDefinition(0.21, false);\r\n pickerColorValues.addRowDefinition(0.14, false);\r\n pickerBodyRight.addControl(pickerColorValues, 1, 0);\r\n\r\n // RGB values text boxes\r\n const currentColor = Color3.FromHexString(options.lastColor);\r\n const rgbValuesQuadrant: Grid = new Grid();\r\n rgbValuesQuadrant.name = \"RGB Values\";\r\n rgbValuesQuadrant.width = 0.82;\r\n rgbValuesQuadrant.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addRowDefinition(1 / 3, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.1, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.2, false);\r\n rgbValuesQuadrant.addColumnDefinition(0.7, false);\r\n pickerColorValues.addControl(rgbValuesQuadrant, 1, 0);\r\n\r\n for (let i = 0; i < inputFieldLabels.length; i++) {\r\n const labelText: TextBlock = new TextBlock();\r\n labelText.text = inputFieldLabels[i];\r\n labelText.color = buttonColor;\r\n labelText.fontSize = buttonFontSize;\r\n rgbValuesQuadrant.addControl(labelText, i, 0);\r\n }\r\n\r\n // Input fields for RGB values\r\n const rValInt = new InputText();\r\n rValInt.width = 0.83;\r\n rValInt.height = 0.72;\r\n rValInt.name = \"rIntField\";\r\n rValInt.fontSize = buttonFontSize;\r\n rValInt.text = (currentColor.r * 255).toString();\r\n rValInt.color = inputTextColor;\r\n rValInt.background = inputTextBackgroundColor;\r\n rValInt.onFocusObservable.add(() => {\r\n activeField = rValInt.name!;\r\n lastVal = rValInt.text;\r\n editSwatches(false);\r\n });\r\n rValInt.onBlurObservable.add(() => {\r\n if (rValInt.text == \"\") {\r\n rValInt.text = \"0\";\r\n }\r\n updateInt(rValInt, \"r\");\r\n if (activeField == rValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n rValInt.onTextChangedObservable.add(() => {\r\n if (activeField == rValInt.name) {\r\n updateInt(rValInt, \"r\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(rValInt, 0, 1);\r\n\r\n const gValInt = new InputText();\r\n gValInt.width = 0.83;\r\n gValInt.height = 0.72;\r\n gValInt.name = \"gIntField\";\r\n gValInt.fontSize = buttonFontSize;\r\n gValInt.text = (currentColor.g * 255).toString();\r\n gValInt.color = inputTextColor;\r\n gValInt.background = inputTextBackgroundColor;\r\n gValInt.onFocusObservable.add(() => {\r\n activeField = gValInt.name!;\r\n lastVal = gValInt.text;\r\n editSwatches(false);\r\n });\r\n gValInt.onBlurObservable.add(() => {\r\n if (gValInt.text == \"\") {\r\n gValInt.text = \"0\";\r\n }\r\n updateInt(gValInt, \"g\");\r\n if (activeField == gValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n gValInt.onTextChangedObservable.add(() => {\r\n if (activeField == gValInt.name) {\r\n updateInt(gValInt, \"g\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(gValInt, 1, 1);\r\n\r\n const bValInt = new InputText();\r\n bValInt.width = 0.83;\r\n bValInt.height = 0.72;\r\n bValInt.name = \"bIntField\";\r\n bValInt.fontSize = buttonFontSize;\r\n bValInt.text = (currentColor.b * 255).toString();\r\n bValInt.color = inputTextColor;\r\n bValInt.background = inputTextBackgroundColor;\r\n bValInt.onFocusObservable.add(() => {\r\n activeField = bValInt.name!;\r\n lastVal = bValInt.text;\r\n editSwatches(false);\r\n });\r\n bValInt.onBlurObservable.add(() => {\r\n if (bValInt.text == \"\") {\r\n bValInt.text = \"0\";\r\n }\r\n updateInt(bValInt, \"b\");\r\n if (activeField == bValInt.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n bValInt.onTextChangedObservable.add(() => {\r\n if (activeField == bValInt.name) {\r\n updateInt(bValInt, \"b\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(bValInt, 2, 1);\r\n\r\n const rValDec = new InputText();\r\n rValDec.width = 0.95;\r\n rValDec.height = 0.72;\r\n rValDec.name = \"rDecField\";\r\n rValDec.fontSize = buttonFontSize;\r\n rValDec.text = currentColor.r.toString();\r\n rValDec.color = inputTextColor;\r\n rValDec.background = inputTextBackgroundColor;\r\n rValDec.onFocusObservable.add(() => {\r\n activeField = rValDec.name!;\r\n lastVal = rValDec.text;\r\n editSwatches(false);\r\n });\r\n rValDec.onBlurObservable.add(() => {\r\n if (parseFloat(rValDec.text) == 0 || rValDec.text == \"\") {\r\n rValDec.text = \"0\";\r\n updateFloat(rValDec, \"r\");\r\n }\r\n if (activeField == rValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n rValDec.onTextChangedObservable.add(() => {\r\n if (activeField == rValDec.name) {\r\n updateFloat(rValDec, \"r\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(rValDec, 0, 2);\r\n\r\n const gValDec = new InputText();\r\n gValDec.width = 0.95;\r\n gValDec.height = 0.72;\r\n gValDec.name = \"gDecField\";\r\n gValDec.fontSize = buttonFontSize;\r\n gValDec.text = currentColor.g.toString();\r\n gValDec.color = inputTextColor;\r\n gValDec.background = inputTextBackgroundColor;\r\n gValDec.onFocusObservable.add(() => {\r\n activeField = gValDec.name!;\r\n lastVal = gValDec.text;\r\n editSwatches(false);\r\n });\r\n gValDec.onBlurObservable.add(() => {\r\n if (parseFloat(gValDec.text) == 0 || gValDec.text == \"\") {\r\n gValDec.text = \"0\";\r\n updateFloat(gValDec, \"g\");\r\n }\r\n if (activeField == gValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n gValDec.onTextChangedObservable.add(() => {\r\n if (activeField == gValDec.name) {\r\n updateFloat(gValDec, \"g\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(gValDec, 1, 2);\r\n\r\n const bValDec = new InputText();\r\n bValDec.width = 0.95;\r\n bValDec.height = 0.72;\r\n bValDec.name = \"bDecField\";\r\n bValDec.fontSize = buttonFontSize;\r\n bValDec.text = currentColor.b.toString();\r\n bValDec.color = inputTextColor;\r\n bValDec.background = inputTextBackgroundColor;\r\n bValDec.onFocusObservable.add(() => {\r\n activeField = bValDec.name!;\r\n lastVal = bValDec.text;\r\n editSwatches(false);\r\n });\r\n bValDec.onBlurObservable.add(() => {\r\n if (parseFloat(bValDec.text) == 0 || bValDec.text == \"\") {\r\n bValDec.text = \"0\";\r\n updateFloat(bValDec, \"b\");\r\n }\r\n if (activeField == bValDec.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n bValDec.onTextChangedObservable.add(() => {\r\n if (activeField == bValDec.name) {\r\n updateFloat(bValDec, \"b\");\r\n }\r\n });\r\n rgbValuesQuadrant.addControl(bValDec, 2, 2);\r\n\r\n // Hex value input\r\n const hexValueQuadrant: Grid = new Grid();\r\n hexValueQuadrant.name = \"Hex Value\";\r\n hexValueQuadrant.width = 0.82;\r\n hexValueQuadrant.addRowDefinition(1.0, false);\r\n hexValueQuadrant.addColumnDefinition(0.1, false);\r\n hexValueQuadrant.addColumnDefinition(0.9, false);\r\n pickerColorValues.addControl(hexValueQuadrant, 2, 0);\r\n\r\n const labelText: TextBlock = new TextBlock();\r\n labelText.text = \"#\";\r\n labelText.color = buttonColor;\r\n labelText.fontSize = buttonFontSize;\r\n hexValueQuadrant.addControl(labelText, 0, 0);\r\n\r\n const hexVal = new InputText();\r\n hexVal.width = 0.96;\r\n hexVal.height = 0.72;\r\n hexVal.name = \"hexField\";\r\n hexVal.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;\r\n hexVal.fontSize = buttonFontSize;\r\n const minusPound = options.lastColor.split(\"#\");\r\n hexVal.text = minusPound[1];\r\n hexVal.color = inputTextColor;\r\n hexVal.background = inputTextBackgroundColor;\r\n hexVal.onFocusObservable.add(() => {\r\n activeField = hexVal.name!;\r\n lastVal = hexVal.text;\r\n editSwatches(false);\r\n });\r\n hexVal.onBlurObservable.add(() => {\r\n if (hexVal.text.length == 3) {\r\n const val = hexVal.text.split(\"\");\r\n hexVal.text = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\r\n }\r\n if (hexVal.text == \"\") {\r\n hexVal.text = \"000000\";\r\n updateValues(Color3.FromHexString(hexVal.text), \"b\");\r\n }\r\n if (activeField == hexVal.name) {\r\n activeField = \"\";\r\n }\r\n });\r\n hexVal.onTextChangedObservable.add(() => {\r\n let newHexValue: string = hexVal.text;\r\n const checkHex: boolean = /[^0-9A-F]/i.test(newHexValue);\r\n if ((hexVal.text.length > 6 || checkHex) && activeField == hexVal.name) {\r\n hexVal.text = lastVal;\r\n } else {\r\n if (hexVal.text.length < 6) {\r\n const leadingZero: Number = 6 - hexVal.text.length;\r\n for (let i = 0; i < leadingZero; i++) {\r\n newHexValue = \"0\" + newHexValue;\r\n }\r\n }\r\n if (hexVal.text.length == 3) {\r\n const val: string[] = hexVal.text.split(\"\");\r\n newHexValue = val[0] + val[0] + val[1] + val[1] + val[2] + val[2];\r\n }\r\n newHexValue = \"#\" + newHexValue;\r\n if (activeField == hexVal.name) {\r\n lastVal = hexVal.text;\r\n updateValues(Color3.FromHexString(newHexValue), hexVal.name);\r\n }\r\n }\r\n });\r\n hexValueQuadrant.addControl(hexVal, 0, 1);\r\n\r\n if (options.savedColors && options.savedColors.length > 0) {\r\n updateSwatches(\"\", butSave!);\r\n }\r\n\r\n /**\r\n * Will update all values for InputText and ColorPicker controls based on the BABYLON.Color3 passed to this function.\r\n * Each InputText control and the ColorPicker control will be tested to see if they are the activeField and if they\r\n * are will receive no update. This is to prevent the input from the user being overwritten.\r\n * @param value\r\n * @param inputField\r\n */\r\n function updateValues(value: Color3, inputField: string) {\r\n activeField = inputField;\r\n const pickedColor: string = value.toHexString();\r\n newSwatch.background = pickedColor;\r\n if (rValInt.name != activeField) {\r\n rValInt.text = Math.floor(value.r * 255).toString();\r\n }\r\n if (gValInt.name != activeField) {\r\n gValInt.text = Math.floor(value.g * 255).toString();\r\n }\r\n if (bValInt.name != activeField) {\r\n bValInt.text = Math.floor(value.b * 255).toString();\r\n }\r\n if (rValDec.name != activeField) {\r\n rValDec.text = value.r.toString();\r\n }\r\n if (gValDec.name != activeField) {\r\n gValDec.text = value.g.toString();\r\n }\r\n if (bValDec.name != activeField) {\r\n bValDec.text = value.b.toString();\r\n }\r\n if (hexVal.name != activeField) {\r\n const minusPound: string[] = pickedColor.split(\"#\");\r\n hexVal.text = minusPound[1];\r\n }\r\n if (picker.name != activeField) {\r\n picker.value = value;\r\n }\r\n }\r\n\r\n // When the user enters an integer for R, G, or B we check to make sure it is a valid number and replace if not.\r\n function updateInt(field: InputText, channel: string) {\r\n let newValue: string = field.text;\r\n const checkVal: boolean = /[^0-9]/g.test(newValue);\r\n if (checkVal) {\r\n field.text = lastVal;\r\n return;\r\n } else {\r\n if (newValue != \"\") {\r\n if (Math.floor(parseInt(newValue)) < 0) {\r\n newValue = \"0\";\r\n } else if (Math.floor(parseInt(newValue)) > 255) {\r\n newValue = \"255\";\r\n } else if (isNaN(parseInt(newValue))) {\r\n newValue = \"0\";\r\n }\r\n }\r\n if (activeField == field.name) {\r\n lastVal = newValue;\r\n }\r\n }\r\n if (newValue != \"\") {\r\n newValue = parseInt(newValue).toString();\r\n field.text = newValue;\r\n const newSwatchRGB: Color3 = Color3.FromHexString(newSwatch.background);\r\n if (activeField == field.name) {\r\n if (channel == \"r\") {\r\n updateValues(new Color3(parseInt(newValue) / 255, newSwatchRGB.g, newSwatchRGB.b), field.name);\r\n } else if (channel == \"g\") {\r\n updateValues(new Color3(newSwatchRGB.r, parseInt(newValue) / 255, newSwatchRGB.b), field.name);\r\n } else {\r\n updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseInt(newValue) / 255), field.name);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // When the user enters a float for R, G, or B we check to make sure it is a valid number and replace if not.\r\n function updateFloat(field: InputText, channel: string) {\r\n let newValue: string = field.text;\r\n const checkVal: boolean = /[^0-9.]/g.test(newValue);\r\n if (checkVal) {\r\n field.text = lastVal;\r\n return;\r\n } else {\r\n if (newValue != \"\" && newValue != \".\" && parseFloat(newValue) != 0) {\r\n if (parseFloat(newValue) < 0.0) {\r\n newValue = \"0.0\";\r\n } else if (parseFloat(newValue) > 1.0) {\r\n newValue = \"1.0\";\r\n } else if (isNaN(parseFloat(newValue))) {\r\n newValue = \"0.0\";\r\n }\r\n }\r\n if (activeField == field.name) {\r\n lastVal = newValue;\r\n }\r\n }\r\n if (newValue != \"\" && newValue != \".\" && parseFloat(newValue) != 0) {\r\n newValue = parseFloat(newValue).toString();\r\n field.text = newValue;\r\n } else {\r\n newValue = \"0.0\";\r\n }\r\n const newSwatchRGB = Color3.FromHexString(newSwatch.background);\r\n if (activeField == field.name) {\r\n if (channel == \"r\") {\r\n updateValues(new Color3(parseFloat(newValue), newSwatchRGB.g, newSwatchRGB.b), field.name);\r\n } else if (channel == \"g\") {\r\n updateValues(new Color3(newSwatchRGB.r, parseFloat(newValue), newSwatchRGB.b), field.name);\r\n } else {\r\n updateValues(new Color3(newSwatchRGB.r, newSwatchRGB.g, parseFloat(newValue)), field.name);\r\n }\r\n }\r\n }\r\n\r\n // Removes the current index from the savedColors array. Drawer can then be regenerated.\r\n function deleteSwatch(index: number) {\r\n if (options.savedColors) {\r\n options.savedColors.splice(index, 1);\r\n }\r\n if (options.savedColors && options.savedColors.length == 0) {\r\n setEditButtonVisibility(false);\r\n editSwatchMode = false;\r\n }\r\n }\r\n\r\n // Creates and styles an individual swatch when updateSwatches is called.\r\n function createSwatch() {\r\n if (options.savedColors && options.savedColors[swatchNumber]) {\r\n let icon: string;\r\n if (editSwatchMode) {\r\n icon = \"b\";\r\n } else {\r\n icon = \"\";\r\n }\r\n const swatch: Button = Button.CreateSimpleButton(\"Swatch_\" + swatchNumber, icon);\r\n swatch.fontFamily = \"coreglyphs\";\r\n const swatchColor: Color3 = Color3.FromHexString(options.savedColors[swatchNumber]);\r\n const swatchLuminence: number = swatchColor.r + swatchColor.g + swatchColor.b;\r\n\r\n // Set color of outline and textBlock based on luminance of the color swatch so feedback always visible\r\n if (swatchLuminence > luminanceLimit) {\r\n swatch.color = iconColorDark;\r\n } else {\r\n swatch.color = iconColorLight;\r\n }\r\n swatch.fontSize = Math.floor(swatchSize * 0.7);\r\n swatch.textBlock!.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;\r\n swatch.height = swatch.width = swatchSize.toString() + \"px\";\r\n swatch.background = options.savedColors[swatchNumber];\r\n swatch.thickness = 2;\r\n const metadata = swatchNumber;\r\n swatch.pointerDownAnimation = () => {\r\n swatch.thickness = 4;\r\n };\r\n swatch.pointerUpAnimation = () => {\r\n swatch.thickness = 3;\r\n };\r\n swatch.pointerEnterAnimation = () => {\r\n swatch.thickness = 3;\r\n };\r\n swatch.pointerOutAnimation = () => {\r\n swatch.thickness = 2;\r\n };\r\n swatch.onPointerClickObservable.add(() => {\r\n if (!editSwatchMode) {\r\n if (options.savedColors) {\r\n updateValues(Color3.FromHexString(options.savedColors[metadata]), swatch.name!);\r\n }\r\n } else {\r\n deleteSwatch(metadata);\r\n updateSwatches(\"\", butSave);\r\n }\r\n });\r\n return swatch;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n // Mode switch to render button text and close symbols on swatch controls\r\n function editSwatches(mode?: boolean) {\r\n if (mode !== undefined) {\r\n editSwatchMode = mode;\r\n }\r\n let thisButton: Button;\r\n if (editSwatchMode) {\r\n for (let i = 0; i < swatchDrawer.children.length; i++) {\r\n thisButton = swatchDrawer.children[i] as Button;\r\n thisButton.textBlock!.text = \"b\";\r\n }\r\n if (butEdit !== undefined) {\r\n butEdit.textBlock!.text = \"Done\";\r\n }\r\n } else {\r\n for (let i = 0; i < swatchDrawer.children.length; i++) {\r\n thisButton = swatchDrawer.children[i] as Button;\r\n thisButton.textBlock!.text = \"\";\r\n }\r\n if (butEdit !== undefined) {\r\n butEdit.textBlock!.text = \"Edit\";\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * When Save Color button is pressed this function will first create a swatch drawer if one is not already\r\n * made. Then all controls are removed from the drawer and we step through the savedColors array and\r\n * creates one swatch per color. It will also set the height of the drawer control based on how many\r\n * saved colors there are and how many can be stored per row.\r\n * @param color\r\n * @param button\r\n */\r\n function updateSwatches(color: string, button: Button) {\r\n if (options.savedColors) {\r\n if (color != \"\") {\r\n options.savedColors.push(color);\r\n }\r\n swatchNumber = 0;\r\n swatchDrawer.clearControls();\r\n const rowCount: number = Math.ceil(options.savedColors.length / options.numSwatchesPerLine!);\r\n let gutterCount: number;\r\n if (rowCount == 0) {\r\n gutterCount = 0;\r\n } else {\r\n gutterCount = rowCount + 1;\r\n }\r\n if (swatchDrawer.rowCount != rowCount + gutterCount) {\r\n const currentRows: number = swatchDrawer.rowCount;\r\n for (let i = 0; i < currentRows; i++) {\r\n swatchDrawer.removeRowDefinition(0);\r\n }\r\n for (let i = 0; i < rowCount + gutterCount; i++) {\r\n if (i % 2) {\r\n swatchDrawer.addRowDefinition(swatchSize, true);\r\n } else {\r\n swatchDrawer.addRowDefinition(gutterSize, true);\r\n }\r\n }\r\n }\r\n swatchDrawer.height = (swatchSize * rowCount + gutterCount * gutterSize).toString() + \"px\";\r\n\r\n for (let y = 1, thisRow = 1; y < rowCount + gutterCount; y += 2, thisRow++) {\r\n // Determine number of buttons to create per row based on the button limit per row and number of saved colors\r\n let totalButtonsThisRow: number;\r\n if (options.savedColors.length > thisRow * options.numSwatchesPerLine!) {\r\n totalButtonsThisRow = options.numSwatchesPerLine!;\r\n } else {\r\n totalButtonsThisRow = options.savedColors.length - (thisRow - 1) * options.numSwatchesPerLine!;\r\n }\r\n const buttonIterations: number = Math.min(Math.max(totalButtonsThisRow, 0), options.numSwatchesPerLine!);\r\n for (let x = 0, w = 1; x < buttonIterations; x++) {\r\n if (x > options.numSwatchesPerLine!) {\r\n continue;\r\n }\r\n const swatch: Button | null = createSwatch();\r\n if (swatch != null) {\r\n swatchDrawer.addControl(swatch, y, w);\r\n w += 2;\r\n swatchNumber++;\r\n } else {\r\n continue;\r\n }\r\n }\r\n }\r\n if (options.savedColors.length >= options.swatchLimit!) {\r\n disableButton(button, true);\r\n } else {\r\n disableButton(button, false);\r\n }\r\n }\r\n }\r\n\r\n // Shows or hides edit swatches button depending on if there are saved swatches\r\n function setEditButtonVisibility(enableButton: boolean) {\r\n if (enableButton) {\r\n butEdit = Button.CreateSimpleButton(\"butEdit\", \"Edit\");\r\n butEdit.width = buttonWidth;\r\n butEdit.height = buttonHeight;\r\n butEdit.left = Math.floor(parseInt(buttonWidth) * 0.1).toString() + \"px\";\r\n butEdit.top = (parseFloat(butEdit.left) * -1).toString() + \"px\";\r\n butEdit.verticalAlignment = Control.VERTICAL_ALIGNMENT_BOTTOM;\r\n butEdit.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n butEdit.thickness = 2;\r\n butEdit.color = buttonColor;\r\n butEdit.fontSize = buttonFontSize;\r\n butEdit.background = buttonBackgroundColor;\r\n butEdit.onPointerEnterObservable.add(() => {\r\n butEdit.background = buttonBackgroundHoverColor;\r\n });\r\n butEdit.onPointerOutObservable.add(() => {\r\n butEdit.background = buttonBackgroundColor;\r\n });\r\n butEdit.pointerDownAnimation = () => {\r\n butEdit.background = buttonBackgroundClickColor;\r\n };\r\n butEdit.pointerUpAnimation = () => {\r\n butEdit.background = buttonBackgroundHoverColor;\r\n };\r\n butEdit.onPointerClickObservable.add(() => {\r\n if (editSwatchMode) {\r\n editSwatchMode = false;\r\n } else {\r\n editSwatchMode = true;\r\n }\r\n editSwatches();\r\n });\r\n pickerGrid.addControl(butEdit, 1, 0);\r\n } else {\r\n pickerGrid.removeControl(butEdit);\r\n }\r\n }\r\n\r\n // Called when the user hits the limit of saved colors in the drawer.\r\n function disableButton(button: Button, disabled: boolean) {\r\n if (disabled) {\r\n button.color = buttonDisabledColor;\r\n button.background = buttonDisabledBackgroundColor;\r\n } else {\r\n button.color = buttonColor;\r\n button.background = buttonBackgroundColor;\r\n }\r\n }\r\n\r\n // Passes last chosen color back to scene and kills dialog by removing from AdvancedDynamicTexture\r\n function closePicker(color: string) {\r\n if (options.savedColors && options.savedColors.length > 0) {\r\n resolve({\r\n savedColors: options.savedColors,\r\n pickedColor: color,\r\n });\r\n } else {\r\n resolve({\r\n pickedColor: color,\r\n });\r\n }\r\n advancedTexture.removeControl(dialogContainer);\r\n }\r\n });\r\n }\r\n}\r\nRegisterClass(\"BABYLON.GUI.ColorPicker\", ColorPicker);\r\n"]}