@onerjs/gui 8.23.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/2D/FrameGraph/guiTask.d.ts +34 -0
- package/2D/FrameGraph/guiTask.js +62 -0
- package/2D/FrameGraph/guiTask.js.map +1 -0
- package/2D/FrameGraph/renderGraphGUIBlock.d.ts +43 -0
- package/2D/FrameGraph/renderGraphGUIBlock.js +66 -0
- package/2D/FrameGraph/renderGraphGUIBlock.js.map +1 -0
- package/2D/adtInstrumentation.d.ts +52 -0
- package/2D/adtInstrumentation.js +107 -0
- package/2D/adtInstrumentation.js.map +1 -0
- package/2D/advancedDynamicTexture.d.ts +548 -0
- package/2D/advancedDynamicTexture.js +1522 -0
- package/2D/advancedDynamicTexture.js.map +1 -0
- package/2D/controls/button.d.ts +109 -0
- package/2D/controls/button.js +246 -0
- package/2D/controls/button.js.map +1 -0
- package/2D/controls/checkbox.d.ts +53 -0
- package/2D/controls/checkbox.js +164 -0
- package/2D/controls/checkbox.js.map +1 -0
- package/2D/controls/colorpicker.d.ts +101 -0
- package/2D/controls/colorpicker.js +1396 -0
- package/2D/controls/colorpicker.js.map +1 -0
- package/2D/controls/container.d.ts +179 -0
- package/2D/controls/container.js +616 -0
- package/2D/controls/container.js.map +1 -0
- package/2D/controls/control.d.ts +943 -0
- package/2D/controls/control.js +2460 -0
- package/2D/controls/control.js.map +1 -0
- package/2D/controls/displayGrid.d.ts +53 -0
- package/2D/controls/displayGrid.js +202 -0
- package/2D/controls/displayGrid.js.map +1 -0
- package/2D/controls/ellipse.d.ts +25 -0
- package/2D/controls/ellipse.js +93 -0
- package/2D/controls/ellipse.js.map +1 -0
- package/2D/controls/focusableButton.d.ts +17 -0
- package/2D/controls/focusableButton.js +25 -0
- package/2D/controls/focusableButton.js.map +1 -0
- package/2D/controls/focusableControl.d.ts +43 -0
- package/2D/controls/focusableControl.js +2 -0
- package/2D/controls/focusableControl.js.map +1 -0
- package/2D/controls/gradient/BaseGradient.d.ts +69 -0
- package/2D/controls/gradient/BaseGradient.js +84 -0
- package/2D/controls/gradient/BaseGradient.js.map +1 -0
- package/2D/controls/gradient/LinearGradient.d.ts +45 -0
- package/2D/controls/gradient/LinearGradient.js +73 -0
- package/2D/controls/gradient/LinearGradient.js.map +1 -0
- package/2D/controls/gradient/RadialGradient.d.ts +53 -0
- package/2D/controls/gradient/RadialGradient.js +89 -0
- package/2D/controls/gradient/RadialGradient.js.map +1 -0
- package/2D/controls/grid.d.ts +151 -0
- package/2D/controls/grid.js +528 -0
- package/2D/controls/grid.js.map +1 -0
- package/2D/controls/image.d.ts +228 -0
- package/2D/controls/image.js +915 -0
- package/2D/controls/image.js.map +1 -0
- package/2D/controls/index.d.ts +34 -0
- package/2D/controls/index.js +35 -0
- package/2D/controls/index.js.map +1 -0
- package/2D/controls/inputPassword.d.ts +9 -0
- package/2D/controls/inputPassword.js +22 -0
- package/2D/controls/inputPassword.js.map +1 -0
- package/2D/controls/inputText.d.ts +197 -0
- package/2D/controls/inputText.js +1035 -0
- package/2D/controls/inputText.js.map +1 -0
- package/2D/controls/inputTextArea.d.ts +142 -0
- package/2D/controls/inputTextArea.js +1025 -0
- package/2D/controls/inputTextArea.js.map +1 -0
- package/2D/controls/line.d.ts +73 -0
- package/2D/controls/line.js +227 -0
- package/2D/controls/line.js.map +1 -0
- package/2D/controls/multiLine.d.ts +75 -0
- package/2D/controls/multiLine.js +237 -0
- package/2D/controls/multiLine.js.map +1 -0
- package/2D/controls/radioButton.d.ts +49 -0
- package/2D/controls/radioButton.js +185 -0
- package/2D/controls/radioButton.js.map +1 -0
- package/2D/controls/rectangle.d.ts +43 -0
- package/2D/controls/rectangle.js +204 -0
- package/2D/controls/rectangle.js.map +1 -0
- package/2D/controls/scrollViewers/scrollViewer.d.ts +178 -0
- package/2D/controls/scrollViewers/scrollViewer.js +587 -0
- package/2D/controls/scrollViewers/scrollViewer.js.map +1 -0
- package/2D/controls/scrollViewers/scrollViewerWindow.d.ts +51 -0
- package/2D/controls/scrollViewers/scrollViewerWindow.js +254 -0
- package/2D/controls/scrollViewers/scrollViewerWindow.js.map +1 -0
- package/2D/controls/selector.d.ts +237 -0
- package/2D/controls/selector.js +579 -0
- package/2D/controls/selector.js.map +1 -0
- package/2D/controls/sliders/baseSlider.d.ts +80 -0
- package/2D/controls/sliders/baseSlider.js +299 -0
- package/2D/controls/sliders/baseSlider.js.map +1 -0
- package/2D/controls/sliders/imageBasedSlider.d.ts +47 -0
- package/2D/controls/sliders/imageBasedSlider.js +168 -0
- package/2D/controls/sliders/imageBasedSlider.js.map +1 -0
- package/2D/controls/sliders/imageScrollBar.d.ts +67 -0
- package/2D/controls/sliders/imageScrollBar.js +248 -0
- package/2D/controls/sliders/imageScrollBar.js.map +1 -0
- package/2D/controls/sliders/scrollBar.d.ts +50 -0
- package/2D/controls/sliders/scrollBar.js +175 -0
- package/2D/controls/sliders/scrollBar.js.map +1 -0
- package/2D/controls/sliders/slider.d.ts +46 -0
- package/2D/controls/sliders/slider.js +281 -0
- package/2D/controls/sliders/slider.js.map +1 -0
- package/2D/controls/stackPanel.d.ts +64 -0
- package/2D/controls/stackPanel.js +244 -0
- package/2D/controls/stackPanel.js.map +1 -0
- package/2D/controls/statics.d.ts +6 -0
- package/2D/controls/statics.js +50 -0
- package/2D/controls/statics.js.map +1 -0
- package/2D/controls/textBlock.d.ts +219 -0
- package/2D/controls/textBlock.js +670 -0
- package/2D/controls/textBlock.js.map +1 -0
- package/2D/controls/textWrapper.d.ts +13 -0
- package/2D/controls/textWrapper.js +88 -0
- package/2D/controls/textWrapper.js.map +1 -0
- package/2D/controls/toggleButton.d.ts +93 -0
- package/2D/controls/toggleButton.js +229 -0
- package/2D/controls/toggleButton.js.map +1 -0
- package/2D/controls/virtualKeyboard.d.ts +102 -0
- package/2D/controls/virtualKeyboard.js +275 -0
- package/2D/controls/virtualKeyboard.js.map +1 -0
- package/2D/index.d.ts +11 -0
- package/2D/index.js +13 -0
- package/2D/index.js.map +1 -0
- package/2D/math2D.d.ts +136 -0
- package/2D/math2D.js +235 -0
- package/2D/math2D.js.map +1 -0
- package/2D/measure.d.ts +77 -0
- package/2D/measure.js +138 -0
- package/2D/measure.js.map +1 -0
- package/2D/multiLinePoint.d.ts +47 -0
- package/2D/multiLinePoint.js +110 -0
- package/2D/multiLinePoint.js.map +1 -0
- package/2D/style.d.ts +46 -0
- package/2D/style.js +80 -0
- package/2D/style.js.map +1 -0
- package/2D/valueAndUnit.d.ts +89 -0
- package/2D/valueAndUnit.js +194 -0
- package/2D/valueAndUnit.js.map +1 -0
- package/2D/xmlLoader.d.ts +60 -0
- package/2D/xmlLoader.js +348 -0
- package/2D/xmlLoader.js.map +1 -0
- package/3D/behaviors/defaultBehavior.d.ts +73 -0
- package/3D/behaviors/defaultBehavior.js +103 -0
- package/3D/behaviors/defaultBehavior.js.map +1 -0
- package/3D/controls/MRTK3/touchHolographicButton.d.ts +220 -0
- package/3D/controls/MRTK3/touchHolographicButton.js +868 -0
- package/3D/controls/MRTK3/touchHolographicButton.js.map +1 -0
- package/3D/controls/abstractButton3D.d.ts +15 -0
- package/3D/controls/abstractButton3D.js +22 -0
- package/3D/controls/abstractButton3D.js.map +1 -0
- package/3D/controls/button3D.d.ts +51 -0
- package/3D/controls/button3D.js +98 -0
- package/3D/controls/button3D.js.map +1 -0
- package/3D/controls/container3D.d.ts +72 -0
- package/3D/controls/container3D.js +126 -0
- package/3D/controls/container3D.js.map +1 -0
- package/3D/controls/contentDisplay3D.d.ts +42 -0
- package/3D/controls/contentDisplay3D.js +81 -0
- package/3D/controls/contentDisplay3D.js.map +1 -0
- package/3D/controls/control3D.d.ts +183 -0
- package/3D/controls/control3D.js +401 -0
- package/3D/controls/control3D.js.map +1 -0
- package/3D/controls/cylinderPanel.d.ts +17 -0
- package/3D/controls/cylinderPanel.js +57 -0
- package/3D/controls/cylinderPanel.js.map +1 -0
- package/3D/controls/handMenu.d.ts +28 -0
- package/3D/controls/handMenu.js +39 -0
- package/3D/controls/handMenu.js.map +1 -0
- package/3D/controls/holographicBackplate.d.ts +49 -0
- package/3D/controls/holographicBackplate.js +104 -0
- package/3D/controls/holographicBackplate.js.map +1 -0
- package/3D/controls/holographicButton.d.ts +84 -0
- package/3D/controls/holographicButton.js +300 -0
- package/3D/controls/holographicButton.js.map +1 -0
- package/3D/controls/holographicSlate.d.ts +134 -0
- package/3D/controls/holographicSlate.js +413 -0
- package/3D/controls/holographicSlate.js.map +1 -0
- package/3D/controls/index.d.ts +22 -0
- package/3D/controls/index.js +24 -0
- package/3D/controls/index.js.map +1 -0
- package/3D/controls/meshButton3D.d.ts +21 -0
- package/3D/controls/meshButton3D.js +58 -0
- package/3D/controls/meshButton3D.js.map +1 -0
- package/3D/controls/nearMenu.d.ts +44 -0
- package/3D/controls/nearMenu.js +103 -0
- package/3D/controls/nearMenu.js.map +1 -0
- package/3D/controls/planePanel.d.ts +9 -0
- package/3D/controls/planePanel.js +30 -0
- package/3D/controls/planePanel.js.map +1 -0
- package/3D/controls/scatterPanel.d.ts +18 -0
- package/3D/controls/scatterPanel.js +98 -0
- package/3D/controls/scatterPanel.js.map +1 -0
- package/3D/controls/slider3D.d.ts +95 -0
- package/3D/controls/slider3D.js +256 -0
- package/3D/controls/slider3D.js.map +1 -0
- package/3D/controls/spherePanel.d.ts +17 -0
- package/3D/controls/spherePanel.js +58 -0
- package/3D/controls/spherePanel.js.map +1 -0
- package/3D/controls/stackPanel3D.d.ts +22 -0
- package/3D/controls/stackPanel3D.js +95 -0
- package/3D/controls/stackPanel3D.js.map +1 -0
- package/3D/controls/touchButton3D.d.ts +77 -0
- package/3D/controls/touchButton3D.js +205 -0
- package/3D/controls/touchButton3D.js.map +1 -0
- package/3D/controls/touchHolographicButton.d.ts +110 -0
- package/3D/controls/touchHolographicButton.js +400 -0
- package/3D/controls/touchHolographicButton.js.map +1 -0
- package/3D/controls/touchHolographicMenu.d.ts +61 -0
- package/3D/controls/touchHolographicMenu.js +139 -0
- package/3D/controls/touchHolographicMenu.js.map +1 -0
- package/3D/controls/touchMeshButton3D.d.ts +21 -0
- package/3D/controls/touchMeshButton3D.js +58 -0
- package/3D/controls/touchMeshButton3D.js.map +1 -0
- package/3D/controls/volumeBasedPanel.d.ts +53 -0
- package/3D/controls/volumeBasedPanel.js +158 -0
- package/3D/controls/volumeBasedPanel.js.map +1 -0
- package/3D/gizmos/gizmoHandle.d.ts +108 -0
- package/3D/gizmos/gizmoHandle.js +175 -0
- package/3D/gizmos/gizmoHandle.js.map +1 -0
- package/3D/gizmos/index.d.ts +2 -0
- package/3D/gizmos/index.js +3 -0
- package/3D/gizmos/index.js.map +1 -0
- package/3D/gizmos/slateGizmo.d.ts +57 -0
- package/3D/gizmos/slateGizmo.js +353 -0
- package/3D/gizmos/slateGizmo.js.map +1 -0
- package/3D/gui3DManager.d.ts +94 -0
- package/3D/gui3DManager.js +233 -0
- package/3D/gui3DManager.js.map +1 -0
- package/3D/index.d.ts +5 -0
- package/3D/index.js +7 -0
- package/3D/index.js.map +1 -0
- package/3D/materials/fluent/fluentMaterial.d.ts +91 -0
- package/3D/materials/fluent/fluentMaterial.js +286 -0
- package/3D/materials/fluent/fluentMaterial.js.map +1 -0
- package/3D/materials/fluent/index.d.ts +1 -0
- package/3D/materials/fluent/index.js +2 -0
- package/3D/materials/fluent/index.js.map +1 -0
- package/3D/materials/fluent/shaders/fluent.fragment.d.ts +5 -0
- package/3D/materials/fluent/shaders/fluent.fragment.js +41 -0
- package/3D/materials/fluent/shaders/fluent.fragment.js.map +1 -0
- package/3D/materials/fluent/shaders/fluent.vertex.d.ts +5 -0
- package/3D/materials/fluent/shaders/fluent.vertex.js +40 -0
- package/3D/materials/fluent/shaders/fluent.vertex.js.map +1 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +155 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +466 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -0
- package/3D/materials/fluentBackplate/index.d.ts +1 -0
- package/3D/materials/fluentBackplate/index.js +2 -0
- package/3D/materials/fluentBackplate/index.js.map +1 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.d.ts +5 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js +60 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.fragment.js.map +1 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.d.ts +5 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js +127 -0
- package/3D/materials/fluentBackplate/shaders/fluentBackplate.vertex.js.map +1 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +190 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.js +536 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -0
- package/3D/materials/fluentButton/index.d.ts +1 -0
- package/3D/materials/fluentButton/index.js +2 -0
- package/3D/materials/fluentButton/index.js.map +1 -0
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.d.ts +5 -0
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.js +57 -0
- package/3D/materials/fluentButton/shaders/fluentButton.fragment.js.map +1 -0
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.d.ts +5 -0
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.js +162 -0
- package/3D/materials/fluentButton/shaders/fluentButton.vertex.js.map +1 -0
- package/3D/materials/fluentMaterial.d.ts +4 -0
- package/3D/materials/fluentMaterial.js +5 -0
- package/3D/materials/fluentMaterial.js.map +1 -0
- package/3D/materials/handle/handleMaterial.d.ts +68 -0
- package/3D/materials/handle/handleMaterial.js +114 -0
- package/3D/materials/handle/handleMaterial.js.map +1 -0
- package/3D/materials/handle/index.d.ts +1 -0
- package/3D/materials/handle/index.js +2 -0
- package/3D/materials/handle/index.js.map +1 -0
- package/3D/materials/handle/shaders/handle.fragment.d.ts +5 -0
- package/3D/materials/handle/shaders/handle.fragment.js +11 -0
- package/3D/materials/handle/shaders/handle.fragment.js.map +1 -0
- package/3D/materials/handle/shaders/handle.vertex.d.ts +5 -0
- package/3D/materials/handle/shaders/handle.vertex.js +11 -0
- package/3D/materials/handle/shaders/handle.vertex.js.map +1 -0
- package/3D/materials/index.d.ts +5 -0
- package/3D/materials/index.js +7 -0
- package/3D/materials/index.js.map +1 -0
- package/3D/materials/mrdl/index.d.ts +3 -0
- package/3D/materials/mrdl/index.js +4 -0
- package/3D/materials/mrdl/index.js.map +1 -0
- package/3D/materials/mrdl/mrdlBackglowMaterial.d.ts +87 -0
- package/3D/materials/mrdl/mrdlBackglowMaterial.js +302 -0
- package/3D/materials/mrdl/mrdlBackglowMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +148 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.js +433 -0
- package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlFrontplateMaterial.d.ts +186 -0
- package/3D/materials/mrdl/mrdlFrontplateMaterial.js +532 -0
- package/3D/materials/mrdl/mrdlFrontplateMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlInnerquadMaterial.d.ts +56 -0
- package/3D/materials/mrdl/mrdlInnerquadMaterial.js +230 -0
- package/3D/materials/mrdl/mrdlInnerquadMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +337 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js +855 -0
- package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +337 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +855 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlBackglow.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlBackglow.fragment.js +25 -0
- package/3D/materials/mrdl/shaders/mrdlBackglow.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlBackglow.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlBackglow.vertex.js +12 -0
- package/3D/materials/mrdl/shaders/mrdlBackglow.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js +88 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js +96 -0
- package/3D/materials/mrdl/shaders/mrdlBackplate.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlFrontplate.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlFrontplate.fragment.js +48 -0
- package/3D/materials/mrdl/shaders/mrdlFrontplate.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlFrontplate.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlFrontplate.vertex.js +158 -0
- package/3D/materials/mrdl/shaders/mrdlFrontplate.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlInnerquad.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlInnerquad.fragment.js +27 -0
- package/3D/materials/mrdl/shaders/mrdlInnerquad.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlInnerquad.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlInnerquad.vertex.js +13 -0
- package/3D/materials/mrdl/shaders/mrdlInnerquad.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js +236 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js +137 -0
- package/3D/materials/mrdl/shaders/mrdlSliderBar.vertex.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js +236 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.fragment.js.map +1 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.d.ts +5 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js +137 -0
- package/3D/materials/mrdl/shaders/mrdlSliderThumb.vertex.js.map +1 -0
- package/3D/vector3WithInfo.d.ts +16 -0
- package/3D/vector3WithInfo.js +18 -0
- package/3D/vector3WithInfo.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.js +4 -0
- package/index.js.map +1 -0
- package/legacy/legacy.d.ts +1 -0
- package/legacy/legacy.js +17 -0
- package/legacy/legacy.js.map +1 -0
- package/license.md +71 -0
- package/package.json +47 -0
- package/readme.md +31 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputTextArea.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/inputTextArea.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,2CAA6B;AAGlD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,0CAA4B;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC,OAAO,EAAE,SAAS,EAAE,2CAA6B;AAEjD;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAS;IAkCxC,wGAAwG;IAExG,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED,IAAW,iBAAiB,CAAC,KAAc;QACvC,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;YACpC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,IAAoB,MAAM,CAAC,KAAsB;QAC7C,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QAErC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;YAC9C,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IACpC,CAAC;IAGD,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,8DAA8D;IAC9D,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACzF,CAAC;IAED,IAAW,SAAS,CAAC,KAAsB;QACvC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC;YACjD,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,YACoB,IAAa,EAC7B,OAAe,EAAE;QAEjB,KAAK,CAAC,IAAI,CAAC,CAAC;QAHI,SAAI,GAAJ,IAAI,CAAS;QAxFzB,6BAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC;QAC7D,2BAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;QAExD,cAAS,GAAW,IAAI,CAAC,IAAI,CAAC;QAG9B,iBAAY,GAAiB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QACjD,eAAU,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAQlF;;WAEG;QACI,2BAAsB,GAAG,IAAI,UAAU,EAAiB,CAAC;QA2E5D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAEpE,IAAI,CAAC,oBAAoB,GAAG;YACxB,iBAAiB,EAAE,CAAC,CAAC;YACrB,yBAAyB,EAAE,CAAC,CAAC;YAC7B,gBAAgB,EAAE,CAAC,CAAC;SACvB,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG;YACf,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,CAAC;YACjB,gBAAgB,EAAE,CAAC;YACnB,kBAAkB,EAAE,CAAC;YACrB,gBAAgB,EAAE,CAAC;SACtB,CAAC;IACN,CAAC;IAEkB,YAAY;QAC3B,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACa,eAAe,CAAC,GAAmB;QAC/C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEnD,IAAI,CAAC,kCAAkC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;;OAOG;IACI,qBAAqB,CAAC,IAAY,EAAE,GAAY,EAAE,GAAoB;QACzE,uDAAuD;QACvD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;YACrF,OAAO;QACX,CAAC;QAED,iBAAiB;QACjB,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,QAAQ,EAAE,OAAO;gBAClB,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACtB,GAAG,CAAC,cAAc,EAAE,CAAC;gBACzB,CAAC;gBACD,MAAM;YACV,KAAK,WAAW,EAAE,YAAY;gBAC1B,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;oBACpE,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;oBACpE,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;gBACxC,CAAC;gBACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACxC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;gBAEjG,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;gBAEpE,IAAI,GAAG,EAAE,CAAC;oBACN,GAAG,CAAC,cAAc,EAAE,CAAC;gBACzB,CAAC;gBAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;gBAEhC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,MAAM;YACV,KAAK,QAAQ,EAAE,SAAS;gBACpB,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACjF,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC;gBAC5E,CAAC;gBACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACxC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;gBAEjG,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;gBAEpE,IAAI,GAAG,EAAE,CAAC;oBACN,GAAG,CAAC,cAAc,EAAE,CAAC;gBACzB,CAAC;gBAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;gBAEhC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,MAAM;YACV,KAAK,aAAa,CAAC,CAAC,eAAe;YACnC,KAAK,OAAO,EAAE,SAAS;gBACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACxC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;gBACvG,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;gBACpC,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;gBAEpE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;gBAEhC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,OAAO;YACX,KAAK,KAAK,EAAE,MAAM;gBACd,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACrD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;gBAChC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;YACX,KAAK,MAAM,EAAE,OAAO;gBAChB,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC;gBACtC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;gBAChC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;YACX,KAAK,WAAW,EAAE,OAAO;gBACrB,IAAI,CAAC,YAAY,EAAE,CAAC;gBAEpB,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACtB,wBAAwB;oBACxB,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;wBAC7B,iFAAiF;wBACjF,IAAI,CAAC,WAAW,CAAC,gBAAgB,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;wBACzE,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;oBAClF,CAAC;oBACD,2BAA2B;oBAC3B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC3B,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;wBAC/E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;wBAChF,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;wBAE1F,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;wBACpE,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;wBACpC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBACnC,CAAC;yBAAM,CAAC;wBACJ,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,CAAC;4BAChF,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;wBACtC,CAAC;6BAAM,CAAC;4BACJ,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;wBACxC,CAAC;oBACL,CAAC;oBACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBACzB,GAAG,CAAC,cAAc,EAAE,CAAC;oBACrB,OAAO;gBACX,CAAC;gBAED,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC1B,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;gBACxE,CAAC;qBAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7C,WAAW;oBACX,IAAI,CAAC,WAAW,CAAC,gBAAgB,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;oBACzE,GAAG,CAAC,cAAc,EAAE,CAAC;gBACzB,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;oBAC/C,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;gBACxC,CAAC;gBAED,oBAAoB;gBACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;gBAChC,OAAO;YACX,KAAK,YAAY,EAAE,QAAQ;gBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;gBAEpB,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACtB,wBAAwB;oBACxB,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;wBAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC;wBACtH,IAAI,CAAC,WAAW,CAAC,cAAc,IAAI,UAAU,CAAC;wBAC9C,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;oBACpF,CAAC;oBACD,2BAA2B;oBAC3B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC3B,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;wBAC/E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;wBAChF,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;wBAE1F,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;wBACpE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;wBAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBACnC,CAAC;yBAAM,CAAC;wBACJ,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,CAAC;4BAClF,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;wBACxC,CAAC;6BAAM,CAAC;4BACJ,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;wBACtC,CAAC;oBACL,CAAC;oBACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBACzB,GAAG,CAAC,cAAc,EAAE,CAAC;oBACrB,OAAO;gBACX,CAAC;gBACD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC1B,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;gBACxE,CAAC;qBAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7C,UAAU;oBACV,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;oBAClH,IAAI,CAAC,WAAW,CAAC,gBAAgB,IAAI,UAAU,CAAC;gBACpD,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC9D,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;gBACxC,CAAC;gBAED,oBAAoB;gBACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;gBAChC,OAAO;YACX,KAAK,SAAS,EAAE,KAAK;gBACjB,oBAAoB;gBACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAE1B,IAAI,GAAG,EAAE,CAAC;oBACN,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;wBACf,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;4BAC3B,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;4BAC/E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;4BAChF,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;wBAC9F,CAAC;wBACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;wBAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBAC7B,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;oBACpC,CAAC;oBACD,GAAG,CAAC,cAAc,EAAE,CAAC;gBACzB,CAAC;gBAED,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC;oBAC1C,aAAa;oBACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACJ,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;oBACnE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;oBAErE,IAAI,QAAQ,GAAG,CAAC,CAAC;oBACjB,IAAI,aAAa,GAAG,CAAC,CAAC;oBACtB,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,CAAC;wBAC7G,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;wBAC7C,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;oBACxD,CAAC;yBAAM,CAAC;wBACJ,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;wBAC3C,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;oBACtD,CAAC;oBAED,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;oBACjE,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;oBAE/E,IAAI,UAAU,GAAG,CAAC,CAAC;oBACnB,IAAI,aAAa,GAAG,CAAC,CAAC;oBAEtB,QAAQ,IAAI,aAAa,CAAC,CAAC,wBAAwB;oBACnD,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,sBAAsB;oBACvF,IAAI,sBAAsB,GAAG,CAAC,CAAC;oBAE/B,OAAO,UAAU,GAAG,YAAY,IAAI,sBAAsB,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACjF,QAAQ,EAAE,CAAC;wBACX,sBAAsB,EAAE,CAAC;wBACzB,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC;wBACpD,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC;oBACnH,CAAC;oBAED,oBAAoB;oBACpB,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,aAAa,IAAI,sBAAsB,GAAG,CAAC,EAAE,CAAC;wBACpF,QAAQ,EAAE,CAAC;oBACf,CAAC;oBAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC3B,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,QAAQ,CAAC;oBACjD,CAAC;yBAAM,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,IAAI,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,CAAC;wBACzF,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,QAAQ,CAAC;wBAC7C,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;wBAC9E,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC;oBAC5F,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,QAAQ,CAAC;oBAC/C,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;YACX,KAAK,WAAW,EAAE,OAAO;gBACrB,oBAAoB;gBACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAE1B,IAAI,GAAG,EAAE,CAAC;oBACN,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;wBACf,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;4BAC3B,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;4BAC/E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;4BAChF,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;wBAC9F,CAAC;wBAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;wBAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBAC7B,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;oBACpC,CAAC;oBACD,GAAG,CAAC,cAAc,EAAE,CAAC;gBACzB,CAAC;gBAED,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/D,YAAY;oBACZ,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzD,CAAC;qBAAM,CAAC;oBACJ,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;oBACnE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;oBAErE,IAAI,QAAQ,GAAG,CAAC,CAAC;oBACjB,IAAI,aAAa,GAAG,CAAC,CAAC;oBACtB,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,CAAC;wBAC7G,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;wBAC7C,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;oBACxD,CAAC;yBAAM,CAAC;wBACJ,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;wBAC3C,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;oBACtD,CAAC;oBAED,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;oBACjE,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;oBAE/E,IAAI,UAAU,GAAG,CAAC,CAAC;oBACnB,IAAI,aAAa,GAAG,CAAC,CAAC;oBAEtB,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,wBAAwB;oBAC7G,IAAI,sBAAsB,GAAG,CAAC,CAAC;oBAE/B,OAAO,UAAU,GAAG,YAAY,IAAI,sBAAsB,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACjF,QAAQ,EAAE,CAAC;wBACX,sBAAsB,EAAE,CAAC;wBACzB,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC;wBACpD,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC;oBACnH,CAAC;oBAED,oBAAoB;oBACpB,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,aAAa,IAAI,sBAAsB,GAAG,CAAC,EAAE,CAAC;wBACpF,QAAQ,EAAE,CAAC;oBACf,CAAC;oBAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC3B,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,QAAQ,CAAC;oBACjD,CAAC;yBAAM,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,CAAC;wBACxF,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,QAAQ,CAAC;wBAC7C,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;4BACtE,IAAI,CAAC,WAAW,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;4BACrE,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;4BACxG,IAAI,CAAC,WAAW,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;wBACzE,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,QAAQ,CAAC;wBAC3C,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;oBACpF,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;QACf,CAAC;QAED,qFAAqF;QACrF,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,GAAG,CAAC,cAAc,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,uBAAuB;QACvB,IAAI,GAAG,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YACpB,GAAG,EAAE,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;YACvB,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACpD,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;YACvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;gBAChC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACxC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;gBACtG,IAAI,CAAC,WAAW,CAAC,gBAAgB,IAAI,GAAG,CAAC,MAAM,CAAC;gBAChD,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;gBAEpE,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3B,CAAC;QACL,CAAC;IACL,CAAC;IAES,kBAAkB,CAAC,OAAe,EAAE,EAAE,KAAa,EAAE,OAAgC;QAC3F,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;YAChC,IAAI,SAAS,GAAG,KAAK,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACR,8CAA8C;oBAC9C,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;oBAC5C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;gBAClE,CAAC;gBAED,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAEhB,IAAI,WAAW,GAAG,EAAE,CAAC;gBAErB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACxB,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC;wBACxD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;wBACjG,WAAW,GAAG,EAAE,CAAC;oBACrB,CAAC;oBACD,WAAW,IAAI,IAAI,CAAC;gBACxB,CAAC,CAAC,CAAC;gBAEH,IAAI,GAAG,WAAW,CAAC;gBACnB,+BAA+B;gBAC/B,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACJ,SAAS,GAAG,SAAS,CAAC;gBACtB,IAAI,GAAG,QAAQ,CAAC;YACpB,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;QAE9D,OAAO,KAAK,CAAC;IACjB,CAAC;IAES,WAAW,CAAC,QAAgB,EAAE,OAAgC;QACpE,MAAM,KAAK,GAA0D,EAAE,CAAC;QACxE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YACrE,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;YAChD,CAAC;QACL,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;QAE1C,OAAO,KAAK,CAAC;IACjB,CAAC;IAES,UAAU,CAAC,OAAe,EAAE,EAAE,OAAgC;QACpE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IACnF,CAAC;IAED;;;;;;OAMG;IACgB,WAAW,CAAC,aAAsB,EAAE,OAAgC;QACnF,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAChG,CAAC;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;QAE1D,2CAA2C;QAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACjC,CAAC;QAED,gDAAgD;QAChD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;QAClD,gCAAgC;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEtF,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE;gBAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBACnD,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBACjD,OAAO,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC/C,CAAC,EAAE,EAAE,CAAC,CAAC;YAEP,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;YAClE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC;YAE/H,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;QAElG,gBAAgB;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAC9D,6CAA6C;QAC7C,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC;QAErC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAChE,MAAM,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC;YAE9G,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;QAErG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAEtC,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;YAC/I,IAAI,SAAS,GAAG,CAAC,CAAC;YAElB,OAAO,SAAS,GAAG,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;gBACjE,SAAS,IAAI,UAAU,CAAC;gBAExB,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7D,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;oBACpC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC/I,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEkB,eAAe;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACpE,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,CAAC,eAAe,EAAE,CAAC;IAC5B,CAAC;IAEO,cAAc;QAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC3H,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAE1H,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACjG,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;YAElH,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;YAChC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;QAC1C,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACzF,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC;YAEnD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;YAC9B,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;QACxC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACgB,qBAAqB;QACpC,wCAAwC;QACxC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAE1B,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAEO,SAAS,CAAC,IAAY,EAAE,SAAiB,EAAE,CAAS,EAAE,OAAgC;QAC1F,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QACzC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAqB,CAAC;QACnC,QAAQ,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACpC,KAAK,OAAO,CAAC,yBAAyB;gBAClC,CAAC,IAAI,CAAC,CAAC;gBACP,MAAM;YACV,KAAK,OAAO,CAAC,0BAA0B;gBACnC,CAAC,IAAI,KAAK,GAAG,SAAS,CAAC;gBACvB,MAAM;YACV,KAAK,OAAO,CAAC,2BAA2B;gBACpC,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC7B,MAAM;QACd,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9D,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;QAC/C,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACgB,WAAW,CAAC,EAAkB;QAC7C,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,mDAAmD;QACnD,IAAI,CAAC;YACD,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACtF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC,CAAC,MAAM;QACjB,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACrD,CAAC;IAED;;;;;OAKG;IACgB,UAAU,CAAC,EAAkB;QAC5C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QACD,mDAAmD;QACnD,IAAI,CAAC;YACD,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACtF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC,CAAC,MAAM;QAEjB,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAEjG,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACgB,YAAY,CAAC,EAAkB;QAC9C,IAAI,IAAI,GAAW,EAAE,CAAC;QACtB,IAAI,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1E,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,sDAAsD;YACtD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAEvG,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAEvG,IAAI,CAAC,WAAW,CAAC,gBAAgB,IAAI,UAAU,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;QACpE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAEhC,KAAK,CAAC,eAAe,EAAE,CAAC;IAC5B,CAAC;IAEe,KAAK,CAAC,OAAgC;QAClD,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;QAEvC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9D,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;QAC/C,CAAC;QAED,aAAa;QACb,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;gBAEpF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YACnI,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;YAE7E,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACnI,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9D,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;YACvB,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;YAC1B,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED,mEAAmE;QACnE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QACnC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QACzC,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,QAAQ,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAClC,KAAK,OAAO,CAAC,sBAAsB;gBAC/B,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBAChC,MAAM;YACV,KAAK,OAAO,CAAC,yBAAyB;gBAClC,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;gBAC/F,MAAM;YACV,KAAK,OAAO,CAAC,yBAAyB;gBAClC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9F,MAAM;QACd,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAClD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC/C,CAAC;QACD,gEAAgE;QAChE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;QACzG,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,OAAO;QACP,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC;QAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAE5B,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;gBACnD,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;oBAC5B,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpD,CAAC;qBAAM,CAAC;oBACJ,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBACxI,CAAC;YACL,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACtD,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACrC,CAAC;QAED,OAAO,CAAC,OAAO,EAAE,CAAC;QAElB,SAAS;QACT,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,gBAAgB;YAChB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAChD,IAAI,UAAU,GACV,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC;gBAExJ,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;oBAClC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;oBACpD,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;oBAChC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxB,CAAC;qBAAM,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;oBAChE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;oBAC3E,UAAU,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC;oBACvD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxB,CAAC;gBAED,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,6CAA6C;gBAE5I,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;oBAChC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;oBACjD,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;oBAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxB,CAAC;qBAAM,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;oBAC5I,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBACnG,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBAChF,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxB,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACxE,CAAC;YACL,CAAC;YAED,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,2BAA2B;YAC3B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAEjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;gBAEhH,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC9C,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC;gBAE7C,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;gBAC/G,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;gBAE7G,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,GAAG,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBAEhF,KAAK,IAAI,CAAC,GAAG,cAAc,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAE5B,IAAI,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC;oBACtC,QAAQ,IAAI,CAAC,wBAAwB,EAAE,CAAC;wBACpC,KAAK,OAAO,CAAC,yBAAyB;4BAClC,cAAc,IAAI,CAAC,CAAC;4BACpB,MAAM;wBACV,KAAK,OAAO,CAAC,0BAA0B;4BACnC,cAAc,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;4BACrC,MAAM;wBACV,KAAK,OAAO,CAAC,2BAA2B;4BACpC,cAAc,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BAC3C,MAAM;oBACd,CAAC;oBAED,MAAM,KAAK,GAAG,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7E,MAAM,GAAG,GAAG,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;oBAEtF,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;oBACjF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACrD,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;oBAEhE,OAAO,CAAC,QAAQ,CAAC,cAAc,GAAG,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBAE7G,cAAc,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC9C,CAAC;gBAED,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,KAAK,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;oBACxE,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC1B,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,CAAC,OAAO,EAAE,CAAC;QAElB,SAAS;QACT,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC5C,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;gBACrC,CAAC;YACL,CAAC;YAED,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;YAEpC,OAAO,CAAC,UAAU,CACd,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAC/C,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAC9C,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAC5C,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAChD,CAAC;QACN,CAAC;IACL,CAAC;IAEO,cAAc;QAClB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,GAAQ,UAAU,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;YACvC,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC,EAAE,GAAG,CAAC,CAAC;IACZ,CAAC;IAEe,cAAc,CAAC,MAAe,EAAE,WAAoB,EAAE,SAAiB,EAAE,WAAmB,EAAE,EAAmB;QAC7H,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC;YACzE,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,CAAC,CAAC;QAEzC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAC/C,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACrC,cAAc;YACd,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAEjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,oBAAoB;IACJ,cAAc,CAAC,MAAe,EAAE,WAAoB,EAAE,SAAiB,EAAE,EAAmB;QACxG,mFAAmF;QACnF,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;YACvD,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChF,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,CAAC,CAAC;YAEzC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC3B,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;gBAC/E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;gBAChF,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;gBAE1F,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACnC,CAAC;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACK,qBAAqB;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAClD,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACJ,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACvD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC3B,IAAI,CAAC,WAAW,GAAG;wBACf,gBAAgB,EAAE,CAAC;wBACnB,cAAc,EAAE,CAAC;wBACjB,kBAAkB,EAAE,CAAC;wBACrB,gBAAgB,EAAE,CAAC;wBACnB,gBAAgB,EAAE,CAAC;qBACtB,CAAC;gBACN,CAAC;gBAED,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,IAAI,aAAa,GAAG,CAAC,CAAC;gBAEtB,MAAM,sBAAsB,GAAG,IAAI,CAAC,mBAAmB,GAAI,IAAI,CAAC,UAAqB,CAAC;gBAEtF,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACzF,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAEvG,IAAI,WAAW,GAAG,CAAC,CAAC;gBAEpB,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;gBAE7E,IAAI,YAAY,GAAG,CAAC,CAAC;gBAErB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC;oBACrE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC7D,CAAC;gBAED,OAAO,WAAW,GAAG,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;oBACnH,aAAa,EAAE,CAAC;oBAChB,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,WAAW,CAAC,CAAC;oBACzD,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;gBAChJ,CAAC;gBAED,oBAAoB;gBACpB,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,YAAY,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;oBAChF,aAAa,EAAE,CAAC;gBACpB,CAAC;gBAED,WAAW,IAAI,aAAa,CAAC;gBAE7B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC3B,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,WAAW,CAAC;oBAChD,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,aAAa,CAAC;oBACpD,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;oBACpE,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACJ,IAAI,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,CAAC;wBAC5D,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,WAAW,CAAC;wBAChD,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,aAAa,CAAC;wBACpD,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;wBAC9E,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC;oBAC5F,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;wBAChF,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC;wBAC1F,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,WAAW,CAAC;wBAC9C,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,aAAa,CAAC;oBACtD,CAAC;gBACL,CAAC;gBAED,sCAAsC;gBACtC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC5C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;gBAChC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACJ,uFAAuF;gBACvF,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,CAAC,CAAC;gBACxC,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC;gBAEtC,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC/I,IAAI,SAAS,GAAG,CAAC,CAAC;gBAElB,OAAO,SAAS,GAAG,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;oBACjE,SAAS,IAAI,UAAU,CAAC;oBAExB,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC7D,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;wBACpC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;oBAC/I,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,SAAS,CAAC;gBAEpF,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC3B,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC;oBACxE,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;gBACxE,CAAC;qBAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,IAAI,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,CAAC;oBAChJ,6DAA6D;oBAC7D,OAAO,SAAS,GAAG,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;wBAC/D,SAAS,IAAI,UAAU,CAAC;wBAExB,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC7D,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;4BACpC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;wBAC/I,CAAC;oBACL,CAAC;oBAED,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,SAAS,CAAC;gBACpF,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,6DAA6D;IAC1C,2BAA2B,CAAC,MAAc;QACzD,0DAA0D;IAC9D,CAAC;IAED;;;;;OAKG;IACgB,gBAAgB,CAAC,IAAiB;QACjD,oFAAoF;QACpF,IAAI,QAAQ,EAAE,SAAS,CAAC;QACxB,GAAG,CAAC;YACA,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9J,SAAS;gBACL,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACxK,CAAC,QAAQ,QAAQ,IAAI,SAAS,EAAE;QAEhC,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;QAC/E,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;QAEhF,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAErD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,gBAAgB;IACA,aAAa;QACzB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC,oBAAoB,GAAG;YACxB,iBAAiB,EAAE,CAAC;YACpB,yBAAyB,EAAE,CAAC;YAC5B,gBAAgB,EAAE,CAAC;SACtB,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG;YACf,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;YACxC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;YACjE,kBAAkB,EAAE,CAAC;YACrB,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;SAC3C,CAAC;QAEF,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAEe,OAAO;QACnB,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;IACxC,CAAC;CACJ;AA1oCG;IADC,SAAS,EAAE;sDAGX;AA0BD;IADC,SAAS,EAAE;8CAGX;AA6mCL,aAAa,CAAC,2BAA2B,EAAE,aAAa,CAAC,CAAC","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { Vector2 } from \"core/Maths/math.vector\";\r\n\r\nimport { Control } from \"./control\";\r\nimport { ValueAndUnit } from \"../valueAndUnit\";\r\nimport type { VirtualKeyboard } from \"./virtualKeyboard\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport type { Measure } from \"../measure\";\r\nimport { InputText } from \"./inputText\";\r\nimport type { ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\nimport type { PointerInfo, PointerInfoBase } from \"core/Events/pointerEvents\";\r\nimport type { IKeyboardEvent } from \"core/Events/deviceInputEvents\";\r\n\r\nimport { serialize } from \"core/Misc/decorators\";\r\n\r\n/**\r\n * Class used to create input text control\r\n */\r\nexport class InputTextArea extends InputText {\r\n private _textHorizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n private _textVerticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;\r\n\r\n private _prevText: string = this.text;\r\n\r\n private _lines: any[];\r\n private _lineSpacing: ValueAndUnit = new ValueAndUnit(0);\r\n private _maxHeight = new ValueAndUnit(1, ValueAndUnit.UNITMODE_PERCENTAGE, false);\r\n\r\n private _clipTextTop: number;\r\n private _clipTextLeft: number;\r\n\r\n private _cursorInfo: { globalStartIndex: number; globalEndIndex: number; relativeStartIndex: number; relativeEndIndex: number; currentLineIndex: number };\r\n private _highlightCursorInfo: { initialStartIndex: number; initialRelativeStartIndex: number; initialLineIndex: number };\r\n\r\n /**\r\n * An event triggered after the text was broken up into lines\r\n */\r\n public onLinesReadyObservable = new Observable<InputTextArea>();\r\n\r\n /** @internal */\r\n public override _connectedVirtualKeyboard: Nullable<VirtualKeyboard>;\r\n private _contextForBreakLines: ICanvasRenderingContext;\r\n private _clickedCoordinateX: Nullable<number>;\r\n private _clickedCoordinateY: Nullable<number>;\r\n\r\n private _availableWidth: number;\r\n private _availableHeight: number;\r\n\r\n private _scrollTop: Nullable<number>;\r\n\r\n private _autoStretchHeight: boolean;\r\n\r\n /** Gets or sets a boolean indicating if the control can auto stretch its height to adapt to the text */\r\n @serialize()\r\n public get autoStretchHeight(): boolean {\r\n return this._autoStretchHeight;\r\n }\r\n\r\n public set autoStretchHeight(value: boolean) {\r\n if (this._autoStretchHeight === value) {\r\n return;\r\n }\r\n\r\n this._autoStretchHeight = value;\r\n this._markAsDirty();\r\n }\r\n\r\n public override set height(value: string | number) {\r\n this.fixedRatioMasterIsWidth = false;\r\n\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 this._markAsDirty();\r\n }\r\n\r\n this._autoStretchHeight = false;\r\n }\r\n\r\n @serialize()\r\n public get maxHeight(): string | number {\r\n return this._maxHeight.toString(this._host);\r\n }\r\n\r\n /** Gets the maximum width allowed by the control in pixels */\r\n public get maxHeightInPixels(): number {\r\n return this._maxHeight.getValueInPixel(this._host, this._cachedParentMeasure.height);\r\n }\r\n\r\n public set maxHeight(value: string | number) {\r\n if (this._maxHeight.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._maxHeight.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new InputTextArea\r\n * @param name defines the control name\r\n * @param text defines the text of the control\r\n */\r\n constructor(\r\n public override name?: string,\r\n text: string = \"\"\r\n ) {\r\n super(name);\r\n\r\n this.text = text;\r\n\r\n this.isPointerBlocker = true;\r\n\r\n this.onLinesReadyObservable.add(() => this._updateCursorPosition());\r\n\r\n this._highlightCursorInfo = {\r\n initialStartIndex: -1,\r\n initialRelativeStartIndex: -1,\r\n initialLineIndex: -1,\r\n };\r\n\r\n this._cursorInfo = {\r\n globalStartIndex: 0,\r\n globalEndIndex: 0,\r\n relativeEndIndex: 0,\r\n relativeStartIndex: 0,\r\n currentLineIndex: 0,\r\n };\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"InputTextArea\";\r\n }\r\n\r\n /**\r\n * Handles the keyboard event\r\n * @param evt Defines the KeyboardEvent\r\n */\r\n public override processKeyboard(evt: IKeyboardEvent): void {\r\n if (this.isReadOnly) {\r\n return;\r\n }\r\n\r\n // process pressed key\r\n this.alternativeProcessKey(evt.code, evt.key, evt);\r\n\r\n this.onKeyboardEventProcessedObservable.notifyObservers(evt);\r\n }\r\n\r\n /**\r\n * Process the last keyboard input\r\n *\r\n * @param code The ascii input number\r\n * @param key The key string representation\r\n * @param evt The keyboard event emits with input\r\n * @internal\r\n */\r\n public alternativeProcessKey(code: string, key?: string, evt?: IKeyboardEvent) {\r\n //return if clipboard event keys (i.e -ctr/cmd + c,v,x)\r\n if (evt && (evt.ctrlKey || evt.metaKey) && (key === \"c\" || key === \"v\" || key === \"x\")) {\r\n return;\r\n }\r\n\r\n // Specific cases\r\n switch (code) {\r\n case \"Period\": //SLASH\r\n if (evt && evt.shiftKey) {\r\n evt.preventDefault();\r\n }\r\n break;\r\n case \"Backspace\": // BACKSPACE\r\n if (!this._isTextHighlightOn && this._cursorInfo.globalStartIndex > 0) {\r\n this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex;\r\n this._cursorInfo.globalStartIndex--;\r\n }\r\n this._prevText = this._textWrapper.text;\r\n this._textWrapper.removePart(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex);\r\n\r\n this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex;\r\n\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n\r\n this._blinkIsEven = false;\r\n this._isTextHighlightOn = false;\r\n\r\n this._textHasChanged();\r\n break;\r\n case \"Delete\": // DELETE\r\n if (!this._isTextHighlightOn && this._cursorInfo.globalEndIndex < this.text.length) {\r\n this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex + 1;\r\n }\r\n this._prevText = this._textWrapper.text;\r\n this._textWrapper.removePart(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex);\r\n\r\n this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex;\r\n\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n\r\n this._blinkIsEven = false;\r\n this._isTextHighlightOn = false;\r\n\r\n this._textHasChanged();\r\n break;\r\n case \"NumpadEnter\": // NUMPAD ENTER\r\n case \"Enter\": // RETURN\r\n this._prevText = this._textWrapper.text;\r\n this._textWrapper.removePart(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex, \"\\n\");\r\n this._cursorInfo.globalStartIndex++;\r\n this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex;\r\n\r\n this._blinkIsEven = false;\r\n this._isTextHighlightOn = false;\r\n\r\n this._textHasChanged();\r\n return;\r\n case \"End\": // END\r\n this._cursorInfo.globalStartIndex = this.text.length;\r\n this._blinkIsEven = false;\r\n this._isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n case \"Home\": // HOME\r\n this._cursorInfo.globalStartIndex = 0;\r\n this._blinkIsEven = false;\r\n this._isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n case \"ArrowLeft\": // LEFT\r\n this._markAsDirty();\r\n\r\n if (evt && evt.shiftKey) {\r\n // shift + ctrl/cmd + <-\r\n if (evt.ctrlKey || evt.metaKey) {\r\n // Go to line's start by substract the relativeStartIndex to the globalStartIndex\r\n this._cursorInfo.globalStartIndex -= this._cursorInfo.relativeStartIndex;\r\n this._cursorInfo.globalEndIndex = this._highlightCursorInfo.initialStartIndex;\r\n }\r\n // store the starting point\r\n if (!this._isTextHighlightOn) {\r\n this._highlightCursorInfo.initialLineIndex = this._cursorInfo.currentLineIndex;\r\n this._highlightCursorInfo.initialStartIndex = this._cursorInfo.globalStartIndex;\r\n this._highlightCursorInfo.initialRelativeStartIndex = this._cursorInfo.relativeStartIndex;\r\n\r\n this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex;\r\n this._cursorInfo.globalStartIndex--;\r\n this._isTextHighlightOn = true;\r\n } else {\r\n if (this._cursorInfo.globalEndIndex > this._highlightCursorInfo.initialStartIndex) {\r\n this._cursorInfo.globalEndIndex--;\r\n } else {\r\n this._cursorInfo.globalStartIndex--;\r\n }\r\n }\r\n this._blinkIsEven = true;\r\n evt.preventDefault();\r\n return;\r\n }\r\n\r\n if (this._isTextHighlightOn) {\r\n this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex;\r\n } else if (evt && (evt.ctrlKey || evt.metaKey)) {\r\n // ctr + <-\r\n this._cursorInfo.globalStartIndex -= this._cursorInfo.relativeStartIndex;\r\n evt.preventDefault();\r\n } else if (this._cursorInfo.globalStartIndex > 0) {\r\n this._cursorInfo.globalStartIndex--;\r\n }\r\n\r\n // update the cursor\r\n this._blinkIsEven = false;\r\n this._isTextHighlightOn = false;\r\n return;\r\n case \"ArrowRight\": // RIGHT\r\n this._markAsDirty();\r\n\r\n if (evt && evt.shiftKey) {\r\n // shift + ctrl/cmd + ->\r\n if (evt.ctrlKey || evt.metaKey) {\r\n const rightDelta = this._lines[this._cursorInfo.currentLineIndex].text.length - this._cursorInfo.relativeEndIndex - 1;\r\n this._cursorInfo.globalEndIndex += rightDelta;\r\n this._cursorInfo.globalStartIndex = this._highlightCursorInfo.initialStartIndex;\r\n }\r\n // store the starting point\r\n if (!this._isTextHighlightOn) {\r\n this._highlightCursorInfo.initialLineIndex = this._cursorInfo.currentLineIndex;\r\n this._highlightCursorInfo.initialStartIndex = this._cursorInfo.globalStartIndex;\r\n this._highlightCursorInfo.initialRelativeStartIndex = this._cursorInfo.relativeStartIndex;\r\n\r\n this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex;\r\n this._cursorInfo.globalEndIndex++;\r\n this._isTextHighlightOn = true;\r\n } else {\r\n if (this._cursorInfo.globalStartIndex < this._highlightCursorInfo.initialStartIndex) {\r\n this._cursorInfo.globalStartIndex++;\r\n } else {\r\n this._cursorInfo.globalEndIndex++;\r\n }\r\n }\r\n this._blinkIsEven = true;\r\n evt.preventDefault();\r\n return;\r\n }\r\n if (this._isTextHighlightOn) {\r\n this._cursorInfo.globalStartIndex = this._cursorInfo.globalEndIndex;\r\n } else if (evt && (evt.ctrlKey || evt.metaKey)) {\r\n //ctr + ->\r\n const rightDelta = this._lines[this._cursorInfo.currentLineIndex].text.length - this._cursorInfo.relativeEndIndex;\r\n this._cursorInfo.globalStartIndex += rightDelta;\r\n } else if (this._cursorInfo.globalStartIndex < this.text.length) {\r\n this._cursorInfo.globalStartIndex++;\r\n }\r\n\r\n // update the cursor\r\n this._blinkIsEven = false;\r\n this._isTextHighlightOn = false;\r\n return;\r\n case \"ArrowUp\": // UP\r\n // update the cursor\r\n this._blinkIsEven = false;\r\n\r\n if (evt) {\r\n if (evt.shiftKey) {\r\n if (!this._isTextHighlightOn) {\r\n this._highlightCursorInfo.initialLineIndex = this._cursorInfo.currentLineIndex;\r\n this._highlightCursorInfo.initialStartIndex = this._cursorInfo.globalStartIndex;\r\n this._highlightCursorInfo.initialRelativeStartIndex = this._cursorInfo.relativeStartIndex;\r\n }\r\n this._isTextHighlightOn = true;\r\n this._blinkIsEven = true;\r\n } else {\r\n this._isTextHighlightOn = false;\r\n }\r\n evt.preventDefault();\r\n }\r\n\r\n if (this._cursorInfo.currentLineIndex === 0) {\r\n // First line\r\n this._cursorInfo.globalStartIndex = 0;\r\n } else {\r\n const currentLine = this._lines[this._cursorInfo.currentLineIndex];\r\n const upperLine = this._lines[this._cursorInfo.currentLineIndex - 1];\r\n\r\n let tmpIndex = 0;\r\n let relativeIndex = 0;\r\n if (!this._isTextHighlightOn || this._cursorInfo.currentLineIndex < this._highlightCursorInfo.initialLineIndex) {\r\n tmpIndex = this._cursorInfo.globalStartIndex;\r\n relativeIndex = this._cursorInfo.relativeStartIndex;\r\n } else {\r\n tmpIndex = this._cursorInfo.globalEndIndex;\r\n relativeIndex = this._cursorInfo.relativeEndIndex;\r\n }\r\n\r\n const currentText = currentLine.text.substring(0, relativeIndex);\r\n const currentWidth = this._contextForBreakLines.measureText(currentText).width;\r\n\r\n let upperWidth = 0;\r\n let previousWidth = 0;\r\n\r\n tmpIndex -= relativeIndex; // Start of current line\r\n tmpIndex -= upperLine.text.length + upperLine.lineEnding.length; // Start of upper line\r\n let upperLineRelativeIndex = 0;\r\n\r\n while (upperWidth < currentWidth && upperLineRelativeIndex < upperLine.text.length) {\r\n tmpIndex++;\r\n upperLineRelativeIndex++;\r\n previousWidth = Math.abs(currentWidth - upperWidth);\r\n upperWidth = this._contextForBreakLines.measureText(upperLine.text.substring(0, upperLineRelativeIndex)).width;\r\n }\r\n\r\n // Find closest move\r\n if (Math.abs(currentWidth - upperWidth) > previousWidth && upperLineRelativeIndex > 0) {\r\n tmpIndex--;\r\n }\r\n\r\n if (!this._isTextHighlightOn) {\r\n this._cursorInfo.globalStartIndex = tmpIndex;\r\n } else if (this._cursorInfo.currentLineIndex <= this._highlightCursorInfo.initialLineIndex) {\r\n this._cursorInfo.globalStartIndex = tmpIndex;\r\n this._cursorInfo.globalEndIndex = this._highlightCursorInfo.initialStartIndex;\r\n this._cursorInfo.relativeEndIndex = this._highlightCursorInfo.initialRelativeStartIndex;\r\n } else {\r\n this._cursorInfo.globalEndIndex = tmpIndex;\r\n }\r\n }\r\n\r\n this._markAsDirty();\r\n return;\r\n case \"ArrowDown\": // DOWN\r\n // update the cursor\r\n this._blinkIsEven = false;\r\n\r\n if (evt) {\r\n if (evt.shiftKey) {\r\n if (!this._isTextHighlightOn) {\r\n this._highlightCursorInfo.initialLineIndex = this._cursorInfo.currentLineIndex;\r\n this._highlightCursorInfo.initialStartIndex = this._cursorInfo.globalStartIndex;\r\n this._highlightCursorInfo.initialRelativeStartIndex = this._cursorInfo.relativeStartIndex;\r\n }\r\n\r\n this._isTextHighlightOn = true;\r\n this._blinkIsEven = true;\r\n } else {\r\n this._isTextHighlightOn = false;\r\n }\r\n evt.preventDefault();\r\n }\r\n\r\n if (this._cursorInfo.currentLineIndex === this._lines.length - 1) {\r\n // Last line\r\n this._cursorInfo.globalStartIndex = this.text.length;\r\n } else {\r\n const currentLine = this._lines[this._cursorInfo.currentLineIndex];\r\n const underLine = this._lines[this._cursorInfo.currentLineIndex + 1];\r\n\r\n let tmpIndex = 0;\r\n let relativeIndex = 0;\r\n if (!this._isTextHighlightOn || this._cursorInfo.currentLineIndex < this._highlightCursorInfo.initialLineIndex) {\r\n tmpIndex = this._cursorInfo.globalStartIndex;\r\n relativeIndex = this._cursorInfo.relativeStartIndex;\r\n } else {\r\n tmpIndex = this._cursorInfo.globalEndIndex;\r\n relativeIndex = this._cursorInfo.relativeEndIndex;\r\n }\r\n\r\n const currentText = currentLine.text.substring(0, relativeIndex);\r\n const currentWidth = this._contextForBreakLines.measureText(currentText).width;\r\n\r\n let underWidth = 0;\r\n let previousWidth = 0;\r\n\r\n tmpIndex += currentLine.text.length - relativeIndex + currentLine.lineEnding.length; // Start of current line\r\n let underLineRelativeIndex = 0;\r\n\r\n while (underWidth < currentWidth && underLineRelativeIndex < underLine.text.length) {\r\n tmpIndex++;\r\n underLineRelativeIndex++;\r\n previousWidth = Math.abs(currentWidth - underWidth);\r\n underWidth = this._contextForBreakLines.measureText(underLine.text.substring(0, underLineRelativeIndex)).width;\r\n }\r\n\r\n // Find closest move\r\n if (Math.abs(currentWidth - underWidth) > previousWidth && underLineRelativeIndex > 0) {\r\n tmpIndex--;\r\n }\r\n\r\n if (!this._isTextHighlightOn) {\r\n this._cursorInfo.globalStartIndex = tmpIndex;\r\n } else if (this._cursorInfo.currentLineIndex < this._highlightCursorInfo.initialLineIndex) {\r\n this._cursorInfo.globalStartIndex = tmpIndex;\r\n if (this._cursorInfo.globalStartIndex > this._cursorInfo.globalEndIndex) {\r\n this._cursorInfo.globalEndIndex += this._cursorInfo.globalStartIndex;\r\n this._cursorInfo.globalStartIndex = this._cursorInfo.globalEndIndex - this._cursorInfo.globalStartIndex;\r\n this._cursorInfo.globalEndIndex -= this._cursorInfo.globalStartIndex;\r\n }\r\n } else {\r\n this._cursorInfo.globalEndIndex = tmpIndex;\r\n this._cursorInfo.globalStartIndex = this._highlightCursorInfo.initialStartIndex;\r\n }\r\n }\r\n\r\n this._markAsDirty();\r\n return;\r\n }\r\n\r\n // special case - select all. Use key instead of code to support all keyboard layouts\r\n if (key === \"a\" && evt && (evt.ctrlKey || evt.metaKey)) {\r\n this.selectAllText();\r\n evt.preventDefault();\r\n return;\r\n }\r\n\r\n // Printable characters\r\n if (key?.length === 1) {\r\n evt?.preventDefault();\r\n this._currentKey = key;\r\n this.onBeforeKeyAddObservable.notifyObservers(this);\r\n key = this._currentKey;\r\n if (this._addKey) {\r\n this._isTextHighlightOn = false;\r\n this._blinkIsEven = false;\r\n this._prevText = this._textWrapper.text;\r\n this._textWrapper.removePart(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex, key);\r\n this._cursorInfo.globalStartIndex += key.length;\r\n this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex;\r\n\r\n this._textHasChanged();\r\n }\r\n }\r\n }\r\n\r\n protected _parseLineWordWrap(line: string = \"\", width: number, context: ICanvasRenderingContext): { text: string; width: number; lineEnding: string }[] {\r\n const lines = [];\r\n const words = line.split(\" \");\r\n let lineWidth = 0;\r\n\r\n for (let n = 0; n < words.length; n++) {\r\n const testLine = n > 0 ? line + \" \" + words[n] : words[0];\r\n const metrics = context.measureText(testLine);\r\n const testWidth = metrics.width;\r\n if (testWidth > width) {\r\n if (n > 0) {\r\n // Avoid first word duplication if of too long\r\n lineWidth = context.measureText(line).width;\r\n lines.push({ text: line, width: lineWidth, lineEnding: \" \" });\r\n }\r\n\r\n line = words[n];\r\n\r\n let flushedLine = \"\";\r\n\r\n line.split(\"\").map((char) => {\r\n if (context.measureText(flushedLine + char).width > width) {\r\n lines.push({ text: flushedLine, width: context.measureText(flushedLine).width, lineEnding: \"\" });\r\n flushedLine = \"\";\r\n }\r\n flushedLine += char;\r\n });\r\n\r\n line = flushedLine;\r\n // Measure remaining characters\r\n lineWidth = context.measureText(line).width;\r\n } else {\r\n lineWidth = testWidth;\r\n line = testLine;\r\n }\r\n }\r\n lines.push({ text: line, width: lineWidth, lineEnding: \" \" });\r\n\r\n return lines;\r\n }\r\n\r\n protected _breakLines(refWidth: number, context: ICanvasRenderingContext): object[] {\r\n const lines: { text: string; width: number; lineEnding: string }[] = [];\r\n const _lines = (this.text || this.placeholderText).split(\"\\n\");\r\n\r\n if (this.clipContent) {\r\n for (const _line of _lines) {\r\n lines.push(...this._parseLineWordWrap(_line, refWidth, context));\r\n }\r\n } else {\r\n for (const _line of _lines) {\r\n lines.push(this._parseLine(_line, context));\r\n }\r\n }\r\n\r\n lines[lines.length - 1].lineEnding = \"\\n\";\r\n\r\n return lines;\r\n }\r\n\r\n protected _parseLine(line: string = \"\", context: ICanvasRenderingContext): { text: string; width: number; lineEnding: string } {\r\n return { text: line, width: context.measureText(line).width, lineEnding: \" \" };\r\n }\r\n\r\n /**\r\n * Processing of child right before the parent measurement update\r\n *\r\n * @param parentMeasure The parent measure\r\n * @param context The rendering canvas\r\n * @internal\r\n */\r\n protected override _preMeasure(parentMeasure: Measure, context: ICanvasRenderingContext): void {\r\n if (!this._fontOffset || this._wasDirty) {\r\n this._fontOffset = Control._GetFontOffset(context.font, this._host.getScene()?.getEngine());\r\n }\r\n\r\n let text = this._beforeRenderText(this._textWrapper).text;\r\n\r\n // placeholder conditions and color setting\r\n if (!this.text && this._placeholderText) {\r\n text = this._placeholderText;\r\n }\r\n\r\n // measures the textlength -> this.measure.width\r\n this._textWidth = context.measureText(text).width;\r\n // we double up the margin width\r\n const marginWidth = this._margin.getValueInPixel(this._host, parentMeasure.width) * 2;\r\n\r\n if (this._autoStretchWidth) {\r\n const tmpLines = text.split(\"\\n\");\r\n const longerString = tmpLines.reduce((acc: string, val: string) => {\r\n const valueLength = context.measureText(val).width;\r\n const accLength = context.measureText(acc).width;\r\n return valueLength > accLength ? val : acc;\r\n }, \"\");\r\n\r\n const longerStringWidth = context.measureText(longerString).width;\r\n this.width = Math.min(this._maxWidth.getValueInPixel(this._host, parentMeasure.width), longerStringWidth + marginWidth) + \"px\";\r\n\r\n this.autoStretchWidth = true;\r\n }\r\n\r\n this._availableWidth = this._width.getValueInPixel(this._host, parentMeasure.width) - marginWidth;\r\n\r\n // Prepare lines\r\n this._lines = this._breakLines(this._availableWidth, context);\r\n // can we find a cleaner implementation here?\r\n this._contextForBreakLines = context;\r\n\r\n if (this._autoStretchHeight) {\r\n const textHeight = this._lines.length * this._fontOffset.height;\r\n const totalHeight = textHeight + this._margin.getValueInPixel(this._host, parentMeasure.height) * 2;\r\n this.height = Math.min(this._maxHeight.getValueInPixel(this._host, parentMeasure.height), totalHeight) + \"px\";\r\n\r\n this._autoStretchHeight = true;\r\n }\r\n\r\n this._availableHeight = this._height.getValueInPixel(this._host, parentMeasure.height) - marginWidth;\r\n\r\n if (this._isFocused) {\r\n this._cursorInfo.currentLineIndex = 0;\r\n\r\n let lineLength = this._lines[this._cursorInfo.currentLineIndex].text.length + this._lines[this._cursorInfo.currentLineIndex].lineEnding.length;\r\n let tmpLength = 0;\r\n\r\n while (tmpLength + lineLength <= this._cursorInfo.globalStartIndex) {\r\n tmpLength += lineLength;\r\n\r\n if (this._cursorInfo.currentLineIndex < this._lines.length - 1) {\r\n this._cursorInfo.currentLineIndex++;\r\n lineLength = this._lines[this._cursorInfo.currentLineIndex].text.length + this._lines[this._cursorInfo.currentLineIndex].lineEnding.length;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected override _textHasChanged() {\r\n if (!this._prevText && this._textWrapper.text && this.placeholderText) {\r\n this._cursorInfo.currentLineIndex = 0;\r\n this._cursorInfo.globalStartIndex = 1;\r\n this._cursorInfo.globalEndIndex = 1;\r\n this._cursorInfo.relativeStartIndex = 1;\r\n this._cursorInfo.relativeEndIndex = 1;\r\n }\r\n super._textHasChanged();\r\n }\r\n\r\n private _computeScroll() {\r\n this._clipTextLeft = this._currentMeasure.left + this._margin.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n this._clipTextTop = this._currentMeasure.top + this._margin.getValueInPixel(this._host, this._cachedParentMeasure.height);\r\n\r\n if (this._isFocused && this._lines[this._cursorInfo.currentLineIndex].width > this._availableWidth) {\r\n const textLeft = this._clipTextLeft - this._lines[this._cursorInfo.currentLineIndex].width + this._availableWidth;\r\n\r\n if (!this._scrollLeft) {\r\n this._scrollLeft = textLeft;\r\n }\r\n } else {\r\n this._scrollLeft = this._clipTextLeft;\r\n }\r\n\r\n if (this._isFocused) {\r\n const selectedHeight = (this._cursorInfo.currentLineIndex + 1) * this._fontOffset.height;\r\n const textTop = this._clipTextTop - selectedHeight;\r\n\r\n if (!this._scrollTop) {\r\n this._scrollTop = textTop;\r\n }\r\n } else {\r\n this._scrollTop = this._clipTextTop;\r\n }\r\n }\r\n\r\n /**\r\n * Processing of child after the parent measurement update\r\n *\r\n * @internal\r\n */\r\n protected override _additionalProcessing(): void {\r\n // Flush the highlighted text each frame\r\n this.highlightedText = \"\";\r\n\r\n this.onLinesReadyObservable.notifyObservers(this);\r\n }\r\n\r\n private _drawText(text: string, textWidth: number, y: number, context: ICanvasRenderingContext): void {\r\n const width = this._currentMeasure.width;\r\n let x = this._scrollLeft as number;\r\n switch (this._textHorizontalAlignment) {\r\n case Control.HORIZONTAL_ALIGNMENT_LEFT:\r\n x += 0;\r\n break;\r\n case Control.HORIZONTAL_ALIGNMENT_RIGHT:\r\n x += width - textWidth;\r\n break;\r\n case Control.HORIZONTAL_ALIGNMENT_CENTER:\r\n x += (width - textWidth) / 2;\r\n break;\r\n }\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\r\n if (this.outlineWidth) {\r\n context.strokeText(text, this._currentMeasure.left + x, y);\r\n }\r\n context.fillText(text, x, y);\r\n }\r\n\r\n /**\r\n * Copy the text in the clipboard\r\n *\r\n * @param ev The clipboard event\r\n * @internal\r\n */\r\n protected override _onCopyText(ev: ClipboardEvent): void {\r\n this._isTextHighlightOn = false;\r\n //when write permission to clipbaord data is denied\r\n try {\r\n ev.clipboardData && ev.clipboardData.setData(\"text/plain\", this._highlightedText);\r\n } catch {} //pass\r\n this._host.clipboardData = this._highlightedText;\r\n }\r\n\r\n /**\r\n * Cut the text and copy it in the clipboard\r\n *\r\n * @param ev The clipboard event\r\n * @internal\r\n */\r\n protected override _onCutText(ev: ClipboardEvent): void {\r\n if (!this._highlightedText) {\r\n return;\r\n }\r\n //when write permission to clipbaord data is denied\r\n try {\r\n ev.clipboardData && ev.clipboardData.setData(\"text/plain\", this._highlightedText);\r\n } catch {} //pass\r\n\r\n this._host.clipboardData = this._highlightedText;\r\n this._prevText = this._textWrapper.text;\r\n this._textWrapper.removePart(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex);\r\n\r\n this._textHasChanged();\r\n }\r\n\r\n /**\r\n * Paste the copied text from the clipboard\r\n *\r\n * @param ev The clipboard event\r\n * @internal\r\n */\r\n protected override _onPasteText(ev: ClipboardEvent): void {\r\n let data: string = \"\";\r\n if (ev.clipboardData && ev.clipboardData.types.indexOf(\"text/plain\") !== -1) {\r\n data = ev.clipboardData.getData(\"text/plain\");\r\n } else {\r\n //get the cached data; returns blank string by default\r\n data = this._host.clipboardData;\r\n }\r\n\r\n this._isTextHighlightOn = false;\r\n this._prevText = this._textWrapper.text;\r\n this._textWrapper.removePart(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex, data);\r\n\r\n const deltaIndex = data.length - (this._cursorInfo.globalEndIndex - this._cursorInfo.globalStartIndex);\r\n\r\n this._cursorInfo.globalStartIndex += deltaIndex;\r\n this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex;\r\n this._clickedCoordinateX = null;\r\n this._clickedCoordinateY = null;\r\n\r\n super._textHasChanged();\r\n }\r\n\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n this._computeScroll();\r\n\r\n this._scrollLeft = this._scrollLeft ?? 0;\r\n this._scrollTop = this._scrollTop ?? 0;\r\n\r\n context.save();\r\n\r\n this._applyStates(context);\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\r\n // Background\r\n if (this._isFocused) {\r\n if (this._focusedBackground) {\r\n context.fillStyle = this._isEnabled ? this._focusedBackground : this._disabledColor;\r\n\r\n context.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n }\r\n } else if (this._background) {\r\n context.fillStyle = this._isEnabled ? this._background : this._disabledColor;\r\n\r\n context.fillRect(this._currentMeasure.left, this._currentMeasure.top, this._currentMeasure.width, this._currentMeasure.height);\r\n }\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 // sets the color of the rectangle (border if background available)\r\n if (this.color) {\r\n context.fillStyle = this.color;\r\n }\r\n\r\n const height = this._currentMeasure.height;\r\n const width = this._currentMeasure.width;\r\n let rootY = 0;\r\n\r\n switch (this._textVerticalAlignment) {\r\n case Control.VERTICAL_ALIGNMENT_TOP:\r\n rootY = this._fontOffset.ascent;\r\n break;\r\n case Control.VERTICAL_ALIGNMENT_BOTTOM:\r\n rootY = height - this._fontOffset.height * (this._lines.length - 1) - this._fontOffset.descent;\r\n break;\r\n case Control.VERTICAL_ALIGNMENT_CENTER:\r\n rootY = this._fontOffset.ascent + (height - this._fontOffset.height * this._lines.length) / 2;\r\n break;\r\n }\r\n\r\n context.save();\r\n context.beginPath();\r\n context.fillStyle = this.fontStyle;\r\n if (!this._textWrapper.text && this.placeholderText) {\r\n context.fillStyle = this._placeholderColor;\r\n }\r\n // here we define the visible reactangle to clip it in next line\r\n context.rect(this._clipTextLeft, this._clipTextTop, this._availableWidth + 2, this._availableHeight + 2);\r\n context.clip();\r\n\r\n // Text\r\n rootY += this._scrollTop;\r\n\r\n for (let i = 0; i < this._lines.length; i++) {\r\n const line = this._lines[i];\r\n\r\n if (i !== 0 && this._lineSpacing.internalValue !== 0) {\r\n if (this._lineSpacing.isPixel) {\r\n rootY += this._lineSpacing.getValue(this._host);\r\n } else {\r\n rootY = rootY + this._lineSpacing.getValue(this._host) * this._height.getValueInPixel(this._host, this._cachedParentMeasure.height);\r\n }\r\n }\r\n\r\n this._drawText(line.text, line.width, rootY, context);\r\n rootY += this._fontOffset.height;\r\n }\r\n\r\n context.restore();\r\n\r\n // Cursor\r\n if (this._isFocused) {\r\n // Render cursor\r\n if (!this._blinkIsEven || this._isTextHighlightOn) {\r\n let cursorLeft =\r\n this._scrollLeft + context.measureText(this._lines[this._cursorInfo.currentLineIndex].text.substring(0, this._cursorInfo.relativeStartIndex)).width;\r\n\r\n if (cursorLeft < this._clipTextLeft) {\r\n this._scrollLeft += this._clipTextLeft - cursorLeft;\r\n cursorLeft = this._clipTextLeft;\r\n this._markAsDirty();\r\n } else if (cursorLeft > this._clipTextLeft + this._availableWidth) {\r\n this._scrollLeft += this._clipTextLeft + this._availableWidth - cursorLeft;\r\n cursorLeft = this._clipTextLeft + this._availableWidth;\r\n this._markAsDirty();\r\n }\r\n\r\n let cursorTop = this._scrollTop + this._cursorInfo.currentLineIndex * this._fontOffset.height; //cursorTop distance from top to cursor start\r\n\r\n if (cursorTop < this._clipTextTop) {\r\n this._scrollTop += this._clipTextTop - cursorTop;\r\n cursorTop = this._clipTextTop;\r\n this._markAsDirty();\r\n } else if (cursorTop + this._fontOffset.height > this._clipTextTop + this._availableHeight && this._availableHeight > this._fontOffset.height) {\r\n this._scrollTop += this._clipTextTop + this._availableHeight - cursorTop - this._fontOffset.height;\r\n cursorTop = this._clipTextTop + this._availableHeight - this._fontOffset.height;\r\n this._markAsDirty();\r\n }\r\n\r\n if (!this._isTextHighlightOn) {\r\n context.fillRect(cursorLeft, cursorTop, 2, this._fontOffset.height);\r\n }\r\n }\r\n\r\n this._resetBlinking();\r\n\r\n //show the highlighted text\r\n if (this._isTextHighlightOn) {\r\n clearTimeout(this._blinkTimeout);\r\n\r\n this._highlightedText = this.text.substring(this._cursorInfo.globalStartIndex, this._cursorInfo.globalEndIndex);\r\n\r\n context.globalAlpha = this._highligherOpacity;\r\n context.fillStyle = this._textHighlightColor;\r\n\r\n const startLineIndex = Math.min(this._cursorInfo.currentLineIndex, this._highlightCursorInfo.initialLineIndex);\r\n const endLineIndex = Math.max(this._cursorInfo.currentLineIndex, this._highlightCursorInfo.initialLineIndex);\r\n\r\n let highlightRootY = this._scrollTop + startLineIndex * this._fontOffset.height;\r\n\r\n for (let i = startLineIndex; i <= endLineIndex; i++) {\r\n const line = this._lines[i];\r\n\r\n let highlightRootX = this._scrollLeft;\r\n switch (this._textHorizontalAlignment) {\r\n case Control.HORIZONTAL_ALIGNMENT_LEFT:\r\n highlightRootX += 0;\r\n break;\r\n case Control.HORIZONTAL_ALIGNMENT_RIGHT:\r\n highlightRootX += width - line.width;\r\n break;\r\n case Control.HORIZONTAL_ALIGNMENT_CENTER:\r\n highlightRootX += (width - line.width) / 2;\r\n break;\r\n }\r\n\r\n const begin = i === startLineIndex ? this._cursorInfo.relativeStartIndex : 0;\r\n const end = i === endLineIndex ? this._cursorInfo.relativeEndIndex : line.text.length;\r\n\r\n const leftOffsetWidth = context.measureText(line.text.substring(0, begin)).width;\r\n const selectedText = line.text.substring(begin, end);\r\n const hightlightWidth = context.measureText(selectedText).width;\r\n\r\n context.fillRect(highlightRootX + leftOffsetWidth, highlightRootY, hightlightWidth, this._fontOffset.height);\r\n\r\n highlightRootY += this._fontOffset.height;\r\n }\r\n\r\n if (this._cursorInfo.globalEndIndex === this._cursorInfo.globalStartIndex) {\r\n this._resetBlinking();\r\n }\r\n }\r\n }\r\n\r\n context.restore();\r\n\r\n // Border\r\n if (this._thickness) {\r\n if (this._isFocused) {\r\n if (this.focusedColor) {\r\n context.strokeStyle = this.focusedColor;\r\n }\r\n } else {\r\n if (this.color) {\r\n context.strokeStyle = this.color;\r\n }\r\n }\r\n\r\n context.lineWidth = this._thickness;\r\n\r\n context.strokeRect(\r\n this._currentMeasure.left + this._thickness / 2,\r\n this._currentMeasure.top + this._thickness / 2,\r\n this._currentMeasure.width - this._thickness,\r\n this._currentMeasure.height - this._thickness\r\n );\r\n }\r\n }\r\n\r\n private _resetBlinking() {\r\n clearTimeout(this._blinkTimeout);\r\n this._blinkTimeout = <any>setTimeout(() => {\r\n this._blinkIsEven = !this._blinkIsEven;\r\n this._markAsDirty();\r\n }, 500);\r\n }\r\n\r\n public override _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n this._clickedCoordinateX = coordinates.x;\r\n this._clickedCoordinateY = coordinates.y;\r\n\r\n this._isTextHighlightOn = false;\r\n this._highlightedText = \"\";\r\n this._isPointerDown = true;\r\n this._host._capturingControl[pointerId] = this;\r\n if (this._host.focusedControl === this) {\r\n // Move cursor\r\n clearTimeout(this._blinkTimeout);\r\n this._markAsDirty();\r\n return true;\r\n }\r\n if (!this._isEnabled) {\r\n return false;\r\n }\r\n this._host.focusedControl = this;\r\n\r\n return true;\r\n }\r\n\r\n // for textselection\r\n public override _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\r\n // Avoid Chromium-like beahavior when this event is fired right after onPointerDown\r\n if (pi.event.movementX === 0 && pi.event.movementY === 0) {\r\n return;\r\n }\r\n\r\n if (this._host.focusedControl === this && this._isPointerDown && !this.isReadOnly) {\r\n this._clickedCoordinateX = coordinates.x;\r\n this._clickedCoordinateY = coordinates.y;\r\n\r\n if (!this._isTextHighlightOn) {\r\n this._highlightCursorInfo.initialLineIndex = this._cursorInfo.currentLineIndex;\r\n this._highlightCursorInfo.initialStartIndex = this._cursorInfo.globalStartIndex;\r\n this._highlightCursorInfo.initialRelativeStartIndex = this._cursorInfo.relativeStartIndex;\r\n\r\n this._isTextHighlightOn = true;\r\n }\r\n\r\n this._markAsDirty();\r\n }\r\n super._onPointerMove(target, coordinates, pointerId, pi);\r\n }\r\n\r\n /**\r\n * Apply the correct position of cursor according to current modification\r\n */\r\n private _updateCursorPosition() {\r\n if (!this._isFocused) {\r\n return;\r\n }\r\n\r\n if (!this._textWrapper.text && this.placeholderText) {\r\n this._cursorInfo.currentLineIndex = 0;\r\n this._cursorInfo.globalStartIndex = 0;\r\n this._cursorInfo.globalEndIndex = 0;\r\n this._cursorInfo.relativeStartIndex = 0;\r\n this._cursorInfo.relativeEndIndex = 0;\r\n } else {\r\n if (this._clickedCoordinateX && this._clickedCoordinateY) {\r\n if (!this._isTextHighlightOn) {\r\n this._cursorInfo = {\r\n globalStartIndex: 0,\r\n globalEndIndex: 0,\r\n relativeStartIndex: 0,\r\n relativeEndIndex: 0,\r\n currentLineIndex: 0,\r\n };\r\n }\r\n\r\n let globalIndex = 0;\r\n let relativeIndex = 0;\r\n\r\n const lastClickedCoordinateY = this._clickedCoordinateY - (this._scrollTop as number);\r\n\r\n const relativeCoordinateY = Math.floor(lastClickedCoordinateY / this._fontOffset.height);\r\n this._cursorInfo.currentLineIndex = Math.min(Math.max(relativeCoordinateY, 0), this._lines.length - 1);\r\n\r\n let currentSize = 0;\r\n\r\n const relativeXPosition = this._clickedCoordinateX - (this._scrollLeft ?? 0);\r\n\r\n let previousDist = 0;\r\n\r\n for (let index = 0; index < this._cursorInfo.currentLineIndex; index++) {\r\n const line = this._lines[index];\r\n globalIndex += line.text.length + line.lineEnding.length;\r\n }\r\n\r\n while (currentSize < relativeXPosition && this._lines[this._cursorInfo.currentLineIndex].text.length > relativeIndex) {\r\n relativeIndex++;\r\n previousDist = Math.abs(relativeXPosition - currentSize);\r\n currentSize = this._contextForBreakLines.measureText(this._lines[this._cursorInfo.currentLineIndex].text.substring(0, relativeIndex)).width;\r\n }\r\n\r\n // Find closest move\r\n if (Math.abs(relativeXPosition - currentSize) > previousDist && relativeIndex > 0) {\r\n relativeIndex--;\r\n }\r\n\r\n globalIndex += relativeIndex;\r\n\r\n if (!this._isTextHighlightOn) {\r\n this._cursorInfo.globalStartIndex = globalIndex;\r\n this._cursorInfo.relativeStartIndex = relativeIndex;\r\n this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex;\r\n this._cursorInfo.relativeEndIndex = this._cursorInfo.relativeStartIndex;\r\n } else {\r\n if (globalIndex < this._highlightCursorInfo.initialStartIndex) {\r\n this._cursorInfo.globalStartIndex = globalIndex;\r\n this._cursorInfo.relativeStartIndex = relativeIndex;\r\n this._cursorInfo.globalEndIndex = this._highlightCursorInfo.initialStartIndex;\r\n this._cursorInfo.relativeEndIndex = this._highlightCursorInfo.initialRelativeStartIndex;\r\n } else {\r\n this._cursorInfo.globalStartIndex = this._highlightCursorInfo.initialStartIndex;\r\n this._cursorInfo.relativeStartIndex = this._highlightCursorInfo.initialRelativeStartIndex;\r\n this._cursorInfo.globalEndIndex = globalIndex;\r\n this._cursorInfo.relativeEndIndex = relativeIndex;\r\n }\r\n }\r\n\r\n // Avoid the caret during highlighting\r\n this._blinkIsEven = this._isTextHighlightOn;\r\n this._clickedCoordinateX = null;\r\n this._clickedCoordinateY = null;\r\n } else {\r\n // Standard behavior same as Current line is at least above the initial highlight index\r\n this._cursorInfo.relativeStartIndex = 0;\r\n this._cursorInfo.currentLineIndex = 0;\r\n\r\n let lineLength = this._lines[this._cursorInfo.currentLineIndex].text.length + this._lines[this._cursorInfo.currentLineIndex].lineEnding.length;\r\n let tmpLength = 0;\r\n\r\n while (tmpLength + lineLength <= this._cursorInfo.globalStartIndex) {\r\n tmpLength += lineLength;\r\n\r\n if (this._cursorInfo.currentLineIndex < this._lines.length - 1) {\r\n this._cursorInfo.currentLineIndex++;\r\n lineLength = this._lines[this._cursorInfo.currentLineIndex].text.length + this._lines[this._cursorInfo.currentLineIndex].lineEnding.length;\r\n }\r\n }\r\n\r\n this._cursorInfo.relativeStartIndex = this._cursorInfo.globalStartIndex - tmpLength;\r\n\r\n if (!this._isTextHighlightOn) {\r\n this._cursorInfo.relativeEndIndex = this._cursorInfo.relativeStartIndex;\r\n this._cursorInfo.globalEndIndex = this._cursorInfo.globalStartIndex;\r\n } else if (this._highlightCursorInfo.initialStartIndex !== -1 && this._cursorInfo.globalStartIndex >= this._highlightCursorInfo.initialStartIndex) {\r\n // Current line is at least below the initial highlight index\r\n while (tmpLength + lineLength <= this._cursorInfo.globalEndIndex) {\r\n tmpLength += lineLength;\r\n\r\n if (this._cursorInfo.currentLineIndex < this._lines.length - 1) {\r\n this._cursorInfo.currentLineIndex++;\r\n lineLength = this._lines[this._cursorInfo.currentLineIndex].text.length + this._lines[this._cursorInfo.currentLineIndex].lineEnding.length;\r\n }\r\n }\r\n\r\n this._cursorInfo.relativeEndIndex = this._cursorInfo.globalEndIndex - tmpLength;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update all values of cursor information based on cursorIndex value\r\n *\r\n * @param offset The index to take care of\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected override _updateValueFromCursorIndex(offset: number) {\r\n // Override to avoid parent behavior during _onPointerMove\r\n }\r\n\r\n /**\r\n * Select the word immediatly under the cursor on double click\r\n *\r\n * @param _evt Pointer informations of double click\r\n * @internal\r\n */\r\n protected override _processDblClick(_evt: PointerInfo) {\r\n //pre-find the start and end index of the word under cursor, speeds up the rendering\r\n let moveLeft, moveRight;\r\n do {\r\n moveLeft = this._cursorInfo.globalStartIndex > 0 && this._textWrapper.isWord(this._cursorInfo.globalStartIndex - 1) ? --this._cursorInfo.globalStartIndex : 0;\r\n moveRight =\r\n this._cursorInfo.globalEndIndex < this._textWrapper.length && this._textWrapper.isWord(this._cursorInfo.globalEndIndex) ? ++this._cursorInfo.globalEndIndex : 0;\r\n } while (moveLeft || moveRight);\r\n\r\n this._highlightCursorInfo.initialLineIndex = this._cursorInfo.currentLineIndex;\r\n this._highlightCursorInfo.initialStartIndex = this._cursorInfo.globalStartIndex;\r\n\r\n this.onTextHighlightObservable.notifyObservers(this);\r\n\r\n this._isTextHighlightOn = true;\r\n this._blinkIsEven = true;\r\n this._markAsDirty();\r\n }\r\n\r\n /** @internal */\r\n public override selectAllText() {\r\n this._isTextHighlightOn = true;\r\n this._blinkIsEven = true;\r\n\r\n this._highlightCursorInfo = {\r\n initialStartIndex: 0,\r\n initialRelativeStartIndex: 0,\r\n initialLineIndex: 0,\r\n };\r\n\r\n this._cursorInfo = {\r\n globalStartIndex: 0,\r\n globalEndIndex: this._textWrapper.length,\r\n relativeEndIndex: this._lines[this._lines.length - 1].text.length,\r\n relativeStartIndex: 0,\r\n currentLineIndex: this._lines.length - 1,\r\n };\r\n\r\n this._markAsDirty();\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n\r\n this.onLinesReadyObservable.clear();\r\n }\r\n}\r\nRegisterClass(\"BABYLON.GUI.InputTextArea\", InputTextArea);\r\n"]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
2
|
+
import type { Scene } from "@babylonjs/core/scene.js";
|
|
3
|
+
import { Control } from "./control.js";
|
|
4
|
+
import { ValueAndUnit } from "../valueAndUnit.js";
|
|
5
|
+
import type { Measure } from "../measure.js";
|
|
6
|
+
import type { ICanvasRenderingContext } from "@babylonjs/core/Engines/ICanvas.js";
|
|
7
|
+
/** Class used to render 2D lines */
|
|
8
|
+
export declare class Line extends Control {
|
|
9
|
+
name?: string | undefined;
|
|
10
|
+
private _lineWidth;
|
|
11
|
+
/** @internal */
|
|
12
|
+
_x1: ValueAndUnit;
|
|
13
|
+
/** @internal */
|
|
14
|
+
_y1: ValueAndUnit;
|
|
15
|
+
/** @internal */
|
|
16
|
+
_x2: ValueAndUnit;
|
|
17
|
+
/** @internal */
|
|
18
|
+
_y2: ValueAndUnit;
|
|
19
|
+
private _dash;
|
|
20
|
+
private _connectedControl;
|
|
21
|
+
private _connectedControlDirtyObserver;
|
|
22
|
+
/** Gets or sets the dash pattern */
|
|
23
|
+
get dash(): Array<number>;
|
|
24
|
+
set dash(value: Array<number>);
|
|
25
|
+
/** Gets or sets the control connected with the line end */
|
|
26
|
+
get connectedControl(): Control;
|
|
27
|
+
set connectedControl(value: Control);
|
|
28
|
+
/** Gets or sets start coordinates on X axis */
|
|
29
|
+
get x1(): string | number;
|
|
30
|
+
set x1(value: string | number);
|
|
31
|
+
/** Gets or sets start coordinates on Y axis */
|
|
32
|
+
get y1(): string | number;
|
|
33
|
+
set y1(value: string | number);
|
|
34
|
+
/** Gets or sets end coordinates on X axis */
|
|
35
|
+
get x2(): string | number;
|
|
36
|
+
set x2(value: string | number);
|
|
37
|
+
/** Gets or sets end coordinates on Y axis */
|
|
38
|
+
get y2(): string | number;
|
|
39
|
+
set y2(value: string | number);
|
|
40
|
+
/** Gets or sets line width */
|
|
41
|
+
get lineWidth(): number;
|
|
42
|
+
set lineWidth(value: number);
|
|
43
|
+
/** Gets or sets horizontal alignment */
|
|
44
|
+
set horizontalAlignment(value: number);
|
|
45
|
+
/** Gets or sets vertical alignment */
|
|
46
|
+
set verticalAlignment(value: number);
|
|
47
|
+
/** @internal */
|
|
48
|
+
get _effectiveX2(): number;
|
|
49
|
+
/** @internal */
|
|
50
|
+
get _effectiveY2(): number;
|
|
51
|
+
/**
|
|
52
|
+
* Creates a new Line
|
|
53
|
+
* @param name defines the control name
|
|
54
|
+
*/
|
|
55
|
+
constructor(name?: string | undefined);
|
|
56
|
+
protected _getTypeName(): string;
|
|
57
|
+
_draw(context: ICanvasRenderingContext): void;
|
|
58
|
+
_measure(): void;
|
|
59
|
+
protected _computeAlignment(parentMeasure: Measure): void;
|
|
60
|
+
/**
|
|
61
|
+
* Move one end of the line given 3D cartesian coordinates.
|
|
62
|
+
* @param position Targeted world position
|
|
63
|
+
* @param scene Scene
|
|
64
|
+
* @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.
|
|
65
|
+
*/
|
|
66
|
+
moveToVector3(position: Vector3, scene: Scene, end?: boolean): void;
|
|
67
|
+
/**
|
|
68
|
+
* Move one end of the line to a position in screen absolute space.
|
|
69
|
+
* @param projectedPosition Position in screen absolute space (X, Y)
|
|
70
|
+
* @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.
|
|
71
|
+
*/
|
|
72
|
+
_moveToProjectedPosition(projectedPosition: Vector3, end?: boolean): void;
|
|
73
|
+
}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { __decorate } from "@babylonjs/core/tslib.es6.js";
|
|
2
|
+
import { Vector3, Matrix } from "@babylonjs/core/Maths/math.vector.js";
|
|
3
|
+
import { Tools } from "@babylonjs/core/Misc/tools.js";
|
|
4
|
+
import { Control } from "./control.js";
|
|
5
|
+
import { ValueAndUnit } from "../valueAndUnit.js";
|
|
6
|
+
import { RegisterClass } from "@babylonjs/core/Misc/typeStore.js";
|
|
7
|
+
import { serialize } from "@babylonjs/core/Misc/decorators.js";
|
|
8
|
+
/** Class used to render 2D lines */
|
|
9
|
+
export class Line extends Control {
|
|
10
|
+
/** Gets or sets the dash pattern */
|
|
11
|
+
get dash() {
|
|
12
|
+
return this._dash;
|
|
13
|
+
}
|
|
14
|
+
set dash(value) {
|
|
15
|
+
if (this._dash === value) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
this._dash = value;
|
|
19
|
+
this._markAsDirty();
|
|
20
|
+
}
|
|
21
|
+
/** Gets or sets the control connected with the line end */
|
|
22
|
+
get connectedControl() {
|
|
23
|
+
return this._connectedControl;
|
|
24
|
+
}
|
|
25
|
+
set connectedControl(value) {
|
|
26
|
+
if (this._connectedControl === value) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (this._connectedControlDirtyObserver && this._connectedControl) {
|
|
30
|
+
this._connectedControl.onDirtyObservable.remove(this._connectedControlDirtyObserver);
|
|
31
|
+
this._connectedControlDirtyObserver = null;
|
|
32
|
+
}
|
|
33
|
+
if (value) {
|
|
34
|
+
this._connectedControlDirtyObserver = value.onDirtyObservable.add(() => this._markAsDirty());
|
|
35
|
+
}
|
|
36
|
+
this._connectedControl = value;
|
|
37
|
+
this._markAsDirty();
|
|
38
|
+
}
|
|
39
|
+
/** Gets or sets start coordinates on X axis */
|
|
40
|
+
get x1() {
|
|
41
|
+
return this._x1.toString(this._host);
|
|
42
|
+
}
|
|
43
|
+
set x1(value) {
|
|
44
|
+
if (this._x1.toString(this._host) === value) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (this._x1.fromString(value)) {
|
|
48
|
+
this._markAsDirty();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Gets or sets start coordinates on Y axis */
|
|
52
|
+
get y1() {
|
|
53
|
+
return this._y1.toString(this._host);
|
|
54
|
+
}
|
|
55
|
+
set y1(value) {
|
|
56
|
+
if (this._y1.toString(this._host) === value) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (this._y1.fromString(value)) {
|
|
60
|
+
this._markAsDirty();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** Gets or sets end coordinates on X axis */
|
|
64
|
+
get x2() {
|
|
65
|
+
return this._x2.toString(this._host);
|
|
66
|
+
}
|
|
67
|
+
set x2(value) {
|
|
68
|
+
if (this._x2.toString(this._host) === value) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (this._x2.fromString(value)) {
|
|
72
|
+
this._markAsDirty();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** Gets or sets end coordinates on Y axis */
|
|
76
|
+
get y2() {
|
|
77
|
+
return this._y2.toString(this._host);
|
|
78
|
+
}
|
|
79
|
+
set y2(value) {
|
|
80
|
+
if (this._y2.toString(this._host) === value) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (this._y2.fromString(value)) {
|
|
84
|
+
this._markAsDirty();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** Gets or sets line width */
|
|
88
|
+
get lineWidth() {
|
|
89
|
+
return this._lineWidth;
|
|
90
|
+
}
|
|
91
|
+
set lineWidth(value) {
|
|
92
|
+
if (this._lineWidth === value) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
this._lineWidth = value;
|
|
96
|
+
this._markAsDirty();
|
|
97
|
+
}
|
|
98
|
+
/** Gets or sets horizontal alignment */
|
|
99
|
+
set horizontalAlignment(value) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
/** Gets or sets vertical alignment */
|
|
103
|
+
set verticalAlignment(value) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
/** @internal */
|
|
107
|
+
get _effectiveX2() {
|
|
108
|
+
return (this._connectedControl ? this._connectedControl.centerX : 0) + this._x2.getValue(this._host);
|
|
109
|
+
}
|
|
110
|
+
/** @internal */
|
|
111
|
+
get _effectiveY2() {
|
|
112
|
+
return (this._connectedControl ? this._connectedControl.centerY : 0) + this._y2.getValue(this._host);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Creates a new Line
|
|
116
|
+
* @param name defines the control name
|
|
117
|
+
*/
|
|
118
|
+
constructor(name) {
|
|
119
|
+
super(name);
|
|
120
|
+
this.name = name;
|
|
121
|
+
this._lineWidth = 1;
|
|
122
|
+
/** @internal */
|
|
123
|
+
this._x1 = new ValueAndUnit(0);
|
|
124
|
+
/** @internal */
|
|
125
|
+
this._y1 = new ValueAndUnit(0);
|
|
126
|
+
/** @internal */
|
|
127
|
+
this._x2 = new ValueAndUnit(0);
|
|
128
|
+
/** @internal */
|
|
129
|
+
this._y2 = new ValueAndUnit(0);
|
|
130
|
+
this._dash = new Array();
|
|
131
|
+
this._automaticSize = true;
|
|
132
|
+
this.isHitTestVisible = false;
|
|
133
|
+
this._horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;
|
|
134
|
+
this._verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;
|
|
135
|
+
}
|
|
136
|
+
_getTypeName() {
|
|
137
|
+
return "Line";
|
|
138
|
+
}
|
|
139
|
+
_draw(context) {
|
|
140
|
+
context.save();
|
|
141
|
+
if (this.shadowBlur || this.shadowOffsetX || this.shadowOffsetY) {
|
|
142
|
+
context.shadowColor = this.shadowColor;
|
|
143
|
+
context.shadowBlur = this.shadowBlur;
|
|
144
|
+
context.shadowOffsetX = this.shadowOffsetX;
|
|
145
|
+
context.shadowOffsetY = this.shadowOffsetY;
|
|
146
|
+
}
|
|
147
|
+
this._applyStates(context);
|
|
148
|
+
context.strokeStyle = this._getColor(context);
|
|
149
|
+
context.lineWidth = this._lineWidth;
|
|
150
|
+
context.setLineDash(this._dash);
|
|
151
|
+
context.beginPath();
|
|
152
|
+
context.moveTo(this._cachedParentMeasure.left + this._x1.getValue(this._host), this._cachedParentMeasure.top + this._y1.getValue(this._host));
|
|
153
|
+
context.lineTo(this._cachedParentMeasure.left + this._effectiveX2, this._cachedParentMeasure.top + this._effectiveY2);
|
|
154
|
+
context.stroke();
|
|
155
|
+
context.restore();
|
|
156
|
+
}
|
|
157
|
+
_measure() {
|
|
158
|
+
// Width / Height
|
|
159
|
+
this._currentMeasure.width = Math.abs(this._x1.getValue(this._host) - this._effectiveX2) + this._lineWidth;
|
|
160
|
+
this._currentMeasure.height = Math.abs(this._y1.getValue(this._host) - this._effectiveY2) + this._lineWidth;
|
|
161
|
+
}
|
|
162
|
+
_computeAlignment(parentMeasure) {
|
|
163
|
+
this._currentMeasure.left = parentMeasure.left + Math.min(this._x1.getValue(this._host), this._effectiveX2) - this._lineWidth / 2;
|
|
164
|
+
this._currentMeasure.top = parentMeasure.top + Math.min(this._y1.getValue(this._host), this._effectiveY2) - this._lineWidth / 2;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Move one end of the line given 3D cartesian coordinates.
|
|
168
|
+
* @param position Targeted world position
|
|
169
|
+
* @param scene Scene
|
|
170
|
+
* @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.
|
|
171
|
+
*/
|
|
172
|
+
moveToVector3(position, scene, end = false) {
|
|
173
|
+
if (!this._host || this.parent !== this._host._rootContainer) {
|
|
174
|
+
Tools.Error("Cannot move a control to a vector3 if the control is not at root level");
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const globalViewport = this._host._getGlobalViewport();
|
|
178
|
+
const projectedPosition = Vector3.Project(position, Matrix.IdentityReadOnly, scene.getTransformMatrix(), globalViewport);
|
|
179
|
+
this._moveToProjectedPosition(projectedPosition, end);
|
|
180
|
+
if (projectedPosition.z < 0 || projectedPosition.z > 1) {
|
|
181
|
+
this.notRenderable = true;
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
this.notRenderable = false;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Move one end of the line to a position in screen absolute space.
|
|
188
|
+
* @param projectedPosition Position in screen absolute space (X, Y)
|
|
189
|
+
* @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.
|
|
190
|
+
*/
|
|
191
|
+
_moveToProjectedPosition(projectedPosition, end = false) {
|
|
192
|
+
const x = projectedPosition.x + this._linkOffsetX.getValue(this._host) + "px";
|
|
193
|
+
const y = projectedPosition.y + this._linkOffsetY.getValue(this._host) + "px";
|
|
194
|
+
if (end) {
|
|
195
|
+
this.x2 = x;
|
|
196
|
+
this.y2 = y;
|
|
197
|
+
this._x2.ignoreAdaptiveScaling = true;
|
|
198
|
+
this._y2.ignoreAdaptiveScaling = true;
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
this.x1 = x;
|
|
202
|
+
this.y1 = y;
|
|
203
|
+
this._x1.ignoreAdaptiveScaling = true;
|
|
204
|
+
this._y1.ignoreAdaptiveScaling = true;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
__decorate([
|
|
209
|
+
serialize()
|
|
210
|
+
], Line.prototype, "dash", null);
|
|
211
|
+
__decorate([
|
|
212
|
+
serialize()
|
|
213
|
+
], Line.prototype, "x1", null);
|
|
214
|
+
__decorate([
|
|
215
|
+
serialize()
|
|
216
|
+
], Line.prototype, "y1", null);
|
|
217
|
+
__decorate([
|
|
218
|
+
serialize()
|
|
219
|
+
], Line.prototype, "x2", null);
|
|
220
|
+
__decorate([
|
|
221
|
+
serialize()
|
|
222
|
+
], Line.prototype, "y2", null);
|
|
223
|
+
__decorate([
|
|
224
|
+
serialize()
|
|
225
|
+
], Line.prototype, "lineWidth", null);
|
|
226
|
+
RegisterClass("BABYLON.GUI.Line", Line);
|
|
227
|
+
//# sourceMappingURL=line.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/line.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { Vector3, Matrix } from \"core/Maths/math.vector\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { Scene } from \"core/scene\";\r\n\r\nimport { Control } from \"./control\";\r\nimport { ValueAndUnit } from \"../valueAndUnit\";\r\nimport type { Measure } from \"../measure\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport type { ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\n\r\n/** Class used to render 2D lines */\r\nexport class Line extends Control {\r\n private _lineWidth = 1;\r\n /** @internal */\r\n public _x1 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _y1 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _x2 = new ValueAndUnit(0);\r\n /** @internal */\r\n public _y2 = new ValueAndUnit(0);\r\n private _dash = new Array<number>();\r\n private _connectedControl: Control;\r\n private _connectedControlDirtyObserver: Nullable<Observer<Control>>;\r\n\r\n /** Gets or sets the dash pattern */\r\n @serialize()\r\n public get dash(): Array<number> {\r\n return this._dash;\r\n }\r\n\r\n public set dash(value: Array<number>) {\r\n if (this._dash === value) {\r\n return;\r\n }\r\n\r\n this._dash = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the control connected with the line end */\r\n public get connectedControl(): Control {\r\n return this._connectedControl;\r\n }\r\n\r\n public set connectedControl(value: Control) {\r\n if (this._connectedControl === value) {\r\n return;\r\n }\r\n\r\n if (this._connectedControlDirtyObserver && this._connectedControl) {\r\n this._connectedControl.onDirtyObservable.remove(this._connectedControlDirtyObserver);\r\n this._connectedControlDirtyObserver = null;\r\n }\r\n\r\n if (value) {\r\n this._connectedControlDirtyObserver = value.onDirtyObservable.add(() => this._markAsDirty());\r\n }\r\n\r\n this._connectedControl = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets start coordinates on X axis */\r\n @serialize()\r\n public get x1(): string | number {\r\n return this._x1.toString(this._host);\r\n }\r\n\r\n public set x1(value: string | number) {\r\n if (this._x1.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._x1.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets start coordinates on Y axis */\r\n @serialize()\r\n public get y1(): string | number {\r\n return this._y1.toString(this._host);\r\n }\r\n\r\n public set y1(value: string | number) {\r\n if (this._y1.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._y1.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets end coordinates on X axis */\r\n @serialize()\r\n public get x2(): string | number {\r\n return this._x2.toString(this._host);\r\n }\r\n\r\n public set x2(value: string | number) {\r\n if (this._x2.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._x2.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets end coordinates on Y axis */\r\n @serialize()\r\n public get y2(): string | number {\r\n return this._y2.toString(this._host);\r\n }\r\n\r\n public set y2(value: string | number) {\r\n if (this._y2.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._y2.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets line width */\r\n @serialize()\r\n public get lineWidth(): number {\r\n return this._lineWidth;\r\n }\r\n\r\n public set lineWidth(value: number) {\r\n if (this._lineWidth === value) {\r\n return;\r\n }\r\n\r\n this._lineWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets horizontal alignment */\r\n public override set horizontalAlignment(value: number) {\r\n return;\r\n }\r\n\r\n /** Gets or sets vertical alignment */\r\n public override set verticalAlignment(value: number) {\r\n return;\r\n }\r\n\r\n /** @internal */\r\n public get _effectiveX2(): number {\r\n return (this._connectedControl ? this._connectedControl.centerX : 0) + this._x2.getValue(this._host);\r\n }\r\n\r\n /** @internal */\r\n public get _effectiveY2(): number {\r\n return (this._connectedControl ? this._connectedControl.centerY : 0) + this._y2.getValue(this._host);\r\n }\r\n\r\n /**\r\n * Creates a new Line\r\n * @param name defines the control name\r\n */\r\n constructor(public override name?: string) {\r\n super(name);\r\n\r\n this._automaticSize = true;\r\n\r\n this.isHitTestVisible = false;\r\n this._horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_LEFT;\r\n this._verticalAlignment = Control.VERTICAL_ALIGNMENT_TOP;\r\n }\r\n\r\n protected override _getTypeName(): string {\r\n return \"Line\";\r\n }\r\n\r\n public override _draw(context: ICanvasRenderingContext): void {\r\n context.save();\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\r\n this._applyStates(context);\r\n context.strokeStyle = this._getColor(context);\r\n context.lineWidth = this._lineWidth;\r\n context.setLineDash(this._dash);\r\n\r\n context.beginPath();\r\n context.moveTo(this._cachedParentMeasure.left + this._x1.getValue(this._host), this._cachedParentMeasure.top + this._y1.getValue(this._host));\r\n\r\n context.lineTo(this._cachedParentMeasure.left + this._effectiveX2, this._cachedParentMeasure.top + this._effectiveY2);\r\n context.stroke();\r\n\r\n context.restore();\r\n }\r\n\r\n public override _measure(): void {\r\n // Width / Height\r\n this._currentMeasure.width = Math.abs(this._x1.getValue(this._host) - this._effectiveX2) + this._lineWidth;\r\n this._currentMeasure.height = Math.abs(this._y1.getValue(this._host) - this._effectiveY2) + this._lineWidth;\r\n }\r\n\r\n protected override _computeAlignment(parentMeasure: Measure): void {\r\n this._currentMeasure.left = parentMeasure.left + Math.min(this._x1.getValue(this._host), this._effectiveX2) - this._lineWidth / 2;\r\n this._currentMeasure.top = parentMeasure.top + Math.min(this._y1.getValue(this._host), this._effectiveY2) - this._lineWidth / 2;\r\n }\r\n\r\n /**\r\n * Move one end of the line given 3D cartesian coordinates.\r\n * @param position Targeted world position\r\n * @param scene Scene\r\n * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.\r\n */\r\n public override moveToVector3(position: Vector3, scene: Scene, end: boolean = false): void {\r\n if (!this._host || this.parent !== this._host._rootContainer) {\r\n Tools.Error(\"Cannot move a control to a vector3 if the control is not at root level\");\r\n return;\r\n }\r\n\r\n const globalViewport = this._host._getGlobalViewport();\r\n const projectedPosition = Vector3.Project(position, Matrix.IdentityReadOnly, scene.getTransformMatrix(), globalViewport);\r\n\r\n this._moveToProjectedPosition(projectedPosition, end);\r\n\r\n if (projectedPosition.z < 0 || projectedPosition.z > 1) {\r\n this.notRenderable = true;\r\n return;\r\n }\r\n this.notRenderable = false;\r\n }\r\n\r\n /**\r\n * Move one end of the line to a position in screen absolute space.\r\n * @param projectedPosition Position in screen absolute space (X, Y)\r\n * @param end (opt) Set to true to assign x2 and y2 coordinates of the line. Default assign to x1 and y1.\r\n */\r\n public override _moveToProjectedPosition(projectedPosition: Vector3, end: boolean = false): void {\r\n const x: string = projectedPosition.x + this._linkOffsetX.getValue(this._host) + \"px\";\r\n const y: string = projectedPosition.y + this._linkOffsetY.getValue(this._host) + \"px\";\r\n\r\n if (end) {\r\n this.x2 = x;\r\n this.y2 = y;\r\n this._x2.ignoreAdaptiveScaling = true;\r\n this._y2.ignoreAdaptiveScaling = true;\r\n } else {\r\n this.x1 = x;\r\n this.y1 = y;\r\n this._x1.ignoreAdaptiveScaling = true;\r\n this._y1.ignoreAdaptiveScaling = true;\r\n }\r\n }\r\n}\r\nRegisterClass(\"BABYLON.GUI.Line\", Line);\r\n"]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js";
|
|
2
|
+
import { Control } from "./control.js";
|
|
3
|
+
import { MultiLinePoint } from "../multiLinePoint.js";
|
|
4
|
+
import type { ICanvasRenderingContext } from "@babylonjs/core/Engines/ICanvas.js";
|
|
5
|
+
/**
|
|
6
|
+
* Class used to create multi line control
|
|
7
|
+
*/
|
|
8
|
+
export declare class MultiLine extends Control {
|
|
9
|
+
name?: string | undefined;
|
|
10
|
+
private _lineWidth;
|
|
11
|
+
private _dash;
|
|
12
|
+
private _points;
|
|
13
|
+
private _minX;
|
|
14
|
+
private _minY;
|
|
15
|
+
private _maxX;
|
|
16
|
+
private _maxY;
|
|
17
|
+
/**
|
|
18
|
+
* Creates a new MultiLine
|
|
19
|
+
* @param name defines the control name
|
|
20
|
+
*/
|
|
21
|
+
constructor(name?: string | undefined);
|
|
22
|
+
/** Gets or sets dash pattern */
|
|
23
|
+
get dash(): Array<number>;
|
|
24
|
+
set dash(value: Array<number>);
|
|
25
|
+
/**
|
|
26
|
+
* Gets point stored at specified index
|
|
27
|
+
* @param index defines the index to look for
|
|
28
|
+
* @returns the requested point if found
|
|
29
|
+
*/
|
|
30
|
+
getAt(index: number): MultiLinePoint;
|
|
31
|
+
/** Function called when a point is updated */
|
|
32
|
+
onPointUpdate: () => void;
|
|
33
|
+
/**
|
|
34
|
+
* Adds new points to the point collection
|
|
35
|
+
* @param items defines the list of items (mesh, control or 2d coordinates) to add
|
|
36
|
+
* @returns the list of created MultiLinePoint
|
|
37
|
+
*/
|
|
38
|
+
add(...items: (AbstractMesh | Control | {
|
|
39
|
+
x: string | number;
|
|
40
|
+
y: string | number;
|
|
41
|
+
})[]): MultiLinePoint[];
|
|
42
|
+
/**
|
|
43
|
+
* Adds a new point to the point collection
|
|
44
|
+
* @param item defines the item (mesh, control or 2d coordinates) to add
|
|
45
|
+
* @returns the created MultiLinePoint
|
|
46
|
+
*/
|
|
47
|
+
push(item?: AbstractMesh | Control | {
|
|
48
|
+
x: string | number;
|
|
49
|
+
y: string | number;
|
|
50
|
+
}): MultiLinePoint;
|
|
51
|
+
/**
|
|
52
|
+
* Remove a specific value or point from the active point collection
|
|
53
|
+
* @param value defines the value or point to remove
|
|
54
|
+
*/
|
|
55
|
+
remove(value: number | MultiLinePoint): void;
|
|
56
|
+
/**
|
|
57
|
+
* Resets this object to initial state (no point)
|
|
58
|
+
*/
|
|
59
|
+
reset(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Resets all links
|
|
62
|
+
*/
|
|
63
|
+
resetLinks(): void;
|
|
64
|
+
/** Gets or sets line width */
|
|
65
|
+
get lineWidth(): number;
|
|
66
|
+
set lineWidth(value: number);
|
|
67
|
+
set horizontalAlignment(value: number);
|
|
68
|
+
set verticalAlignment(value: number);
|
|
69
|
+
protected _getTypeName(): string;
|
|
70
|
+
_draw(context: ICanvasRenderingContext): void;
|
|
71
|
+
protected _additionalProcessing(): void;
|
|
72
|
+
_measure(): void;
|
|
73
|
+
protected _computeAlignment(): void;
|
|
74
|
+
dispose(): void;
|
|
75
|
+
}
|