@babylonjs/gui 9.13.0 → 9.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/2D/FrameGraph/pure.d.ts +2 -0
  2. package/2D/FrameGraph/pure.js +3 -0
  3. package/2D/FrameGraph/pure.js.map +1 -0
  4. package/2D/FrameGraph/renderGraphGUIBlock.d.ts +3 -41
  5. package/2D/FrameGraph/renderGraphGUIBlock.js +5 -64
  6. package/2D/FrameGraph/renderGraphGUIBlock.js.map +1 -1
  7. package/2D/FrameGraph/renderGraphGUIBlock.pure.d.ts +48 -0
  8. package/2D/FrameGraph/renderGraphGUIBlock.pure.js +78 -0
  9. package/2D/FrameGraph/renderGraphGUIBlock.pure.js.map +1 -0
  10. package/2D/controls/button.d.ts +3 -107
  11. package/2D/controls/button.js +5 -243
  12. package/2D/controls/button.js.map +1 -1
  13. package/2D/controls/button.pure.d.ts +114 -0
  14. package/2D/controls/button.pure.js +257 -0
  15. package/2D/controls/button.pure.js.map +1 -0
  16. package/2D/controls/checkbox.d.ts +3 -51
  17. package/2D/controls/checkbox.js +5 -161
  18. package/2D/controls/checkbox.js.map +1 -1
  19. package/2D/controls/checkbox.pure.d.ts +58 -0
  20. package/2D/controls/checkbox.pure.js +175 -0
  21. package/2D/controls/checkbox.pure.js.map +1 -0
  22. package/2D/controls/colorpicker.d.ts +5 -101
  23. package/2D/controls/colorpicker.js +7 -1394
  24. package/2D/controls/colorpicker.js.map +1 -1
  25. package/2D/controls/colorpicker.pure.d.ts +106 -0
  26. package/2D/controls/colorpicker.pure.js +1406 -0
  27. package/2D/controls/colorpicker.pure.js.map +1 -0
  28. package/2D/controls/container.d.ts +3 -177
  29. package/2D/controls/container.js +5 -615
  30. package/2D/controls/container.js.map +1 -1
  31. package/2D/controls/container.pure.d.ts +184 -0
  32. package/2D/controls/container.pure.js +629 -0
  33. package/2D/controls/container.pure.js.map +1 -0
  34. package/2D/controls/control.d.ts +3 -944
  35. package/2D/controls/control.js +5 -2457
  36. package/2D/controls/control.js.map +1 -1
  37. package/2D/controls/control.pure.d.ts +951 -0
  38. package/2D/controls/control.pure.js +2471 -0
  39. package/2D/controls/control.pure.js.map +1 -0
  40. package/2D/controls/displayGrid.d.ts +5 -53
  41. package/2D/controls/displayGrid.js +7 -201
  42. package/2D/controls/displayGrid.js.map +1 -1
  43. package/2D/controls/displayGrid.pure.d.ts +58 -0
  44. package/2D/controls/displayGrid.pure.js +213 -0
  45. package/2D/controls/displayGrid.pure.js.map +1 -0
  46. package/2D/controls/ellipse.d.ts +5 -25
  47. package/2D/controls/ellipse.js +7 -92
  48. package/2D/controls/ellipse.js.map +1 -1
  49. package/2D/controls/ellipse.pure.d.ts +30 -0
  50. package/2D/controls/ellipse.pure.js +104 -0
  51. package/2D/controls/ellipse.pure.js.map +1 -0
  52. package/2D/controls/focusableButton.d.ts +3 -15
  53. package/2D/controls/focusableButton.js +5 -22
  54. package/2D/controls/focusableButton.js.map +1 -1
  55. package/2D/controls/focusableButton.pure.d.ts +22 -0
  56. package/2D/controls/focusableButton.pure.js +36 -0
  57. package/2D/controls/focusableButton.pure.js.map +1 -0
  58. package/2D/controls/gradient/LinearGradient.d.ts +3 -43
  59. package/2D/controls/gradient/LinearGradient.js +5 -70
  60. package/2D/controls/gradient/LinearGradient.js.map +1 -1
  61. package/2D/controls/gradient/LinearGradient.pure.d.ts +50 -0
  62. package/2D/controls/gradient/LinearGradient.pure.js +84 -0
  63. package/2D/controls/gradient/LinearGradient.pure.js.map +1 -0
  64. package/2D/controls/gradient/RadialGradient.d.ts +3 -51
  65. package/2D/controls/gradient/RadialGradient.js +5 -86
  66. package/2D/controls/gradient/RadialGradient.js.map +1 -1
  67. package/2D/controls/gradient/RadialGradient.pure.d.ts +58 -0
  68. package/2D/controls/gradient/RadialGradient.pure.js +100 -0
  69. package/2D/controls/gradient/RadialGradient.pure.js.map +1 -0
  70. package/2D/controls/gradient/pure.d.ts +3 -0
  71. package/2D/controls/gradient/pure.js +4 -0
  72. package/2D/controls/gradient/pure.js.map +1 -0
  73. package/2D/controls/grid.d.ts +3 -149
  74. package/2D/controls/grid.js +5 -525
  75. package/2D/controls/grid.js.map +1 -1
  76. package/2D/controls/grid.pure.d.ts +156 -0
  77. package/2D/controls/grid.pure.js +539 -0
  78. package/2D/controls/grid.pure.js.map +1 -0
  79. package/2D/controls/image.d.ts +3 -226
  80. package/2D/controls/image.js +5 -913
  81. package/2D/controls/image.js.map +1 -1
  82. package/2D/controls/image.pure.d.ts +233 -0
  83. package/2D/controls/image.pure.js +927 -0
  84. package/2D/controls/image.pure.js.map +1 -0
  85. package/2D/controls/inputPassword.d.ts +3 -7
  86. package/2D/controls/inputPassword.js +5 -19
  87. package/2D/controls/inputPassword.js.map +1 -1
  88. package/2D/controls/inputPassword.pure.d.ts +14 -0
  89. package/2D/controls/inputPassword.pure.js +33 -0
  90. package/2D/controls/inputPassword.pure.js.map +1 -0
  91. package/2D/controls/inputText.d.ts +3 -202
  92. package/2D/controls/inputText.js +5 -1050
  93. package/2D/controls/inputText.js.map +1 -1
  94. package/2D/controls/inputText.pure.d.ts +209 -0
  95. package/2D/controls/inputText.pure.js +1064 -0
  96. package/2D/controls/inputText.pure.js.map +1 -0
  97. package/2D/controls/inputTextArea.d.ts +3 -140
  98. package/2D/controls/inputTextArea.js +5 -1023
  99. package/2D/controls/inputTextArea.js.map +1 -1
  100. package/2D/controls/inputTextArea.pure.d.ts +147 -0
  101. package/2D/controls/inputTextArea.pure.js +1037 -0
  102. package/2D/controls/inputTextArea.pure.js.map +1 -0
  103. package/2D/controls/line.d.ts +5 -74
  104. package/2D/controls/line.js +7 -234
  105. package/2D/controls/line.js.map +1 -1
  106. package/2D/controls/line.pure.d.ts +79 -0
  107. package/2D/controls/line.pure.js +246 -0
  108. package/2D/controls/line.pure.js.map +1 -0
  109. package/2D/controls/multiLine.d.ts +3 -73
  110. package/2D/controls/multiLine.js +5 -234
  111. package/2D/controls/multiLine.js.map +1 -1
  112. package/2D/controls/multiLine.pure.d.ts +80 -0
  113. package/2D/controls/multiLine.pure.js +248 -0
  114. package/2D/controls/multiLine.pure.js.map +1 -0
  115. package/2D/controls/pure.d.ts +38 -0
  116. package/2D/controls/pure.js +39 -0
  117. package/2D/controls/pure.js.map +1 -0
  118. package/2D/controls/radioButton.d.ts +3 -47
  119. package/2D/controls/radioButton.js +5 -182
  120. package/2D/controls/radioButton.js.map +1 -1
  121. package/2D/controls/radioButton.pure.d.ts +54 -0
  122. package/2D/controls/radioButton.pure.js +196 -0
  123. package/2D/controls/radioButton.pure.js.map +1 -0
  124. package/2D/controls/rectangle.d.ts +5 -43
  125. package/2D/controls/rectangle.js +7 -205
  126. package/2D/controls/rectangle.js.map +1 -1
  127. package/2D/controls/rectangle.pure.d.ts +48 -0
  128. package/2D/controls/rectangle.pure.js +217 -0
  129. package/2D/controls/rectangle.pure.js.map +1 -0
  130. package/2D/controls/scrollViewers/pure.d.ts +2 -0
  131. package/2D/controls/scrollViewers/pure.js +3 -0
  132. package/2D/controls/scrollViewers/pure.js.map +1 -0
  133. package/2D/controls/scrollViewers/scrollViewer.d.ts +3 -176
  134. package/2D/controls/scrollViewers/scrollViewer.js +5 -584
  135. package/2D/controls/scrollViewers/scrollViewer.js.map +1 -1
  136. package/2D/controls/scrollViewers/scrollViewer.pure.d.ts +183 -0
  137. package/2D/controls/scrollViewers/scrollViewer.pure.js +598 -0
  138. package/2D/controls/scrollViewers/scrollViewer.pure.js.map +1 -0
  139. package/2D/controls/sliders/imageBasedSlider.d.ts +3 -45
  140. package/2D/controls/sliders/imageBasedSlider.js +5 -165
  141. package/2D/controls/sliders/imageBasedSlider.js.map +1 -1
  142. package/2D/controls/sliders/imageBasedSlider.pure.d.ts +52 -0
  143. package/2D/controls/sliders/imageBasedSlider.pure.js +179 -0
  144. package/2D/controls/sliders/imageBasedSlider.pure.js.map +1 -0
  145. package/2D/controls/sliders/pure.d.ts +4 -0
  146. package/2D/controls/sliders/pure.js +5 -0
  147. package/2D/controls/sliders/pure.js.map +1 -0
  148. package/2D/controls/sliders/scrollBar.d.ts +3 -48
  149. package/2D/controls/sliders/scrollBar.js +5 -170
  150. package/2D/controls/sliders/scrollBar.js.map +1 -1
  151. package/2D/controls/sliders/scrollBar.pure.d.ts +55 -0
  152. package/2D/controls/sliders/scrollBar.pure.js +184 -0
  153. package/2D/controls/sliders/scrollBar.pure.js.map +1 -0
  154. package/2D/controls/sliders/slider.d.ts +3 -44
  155. package/2D/controls/sliders/slider.js +5 -278
  156. package/2D/controls/sliders/slider.js.map +1 -1
  157. package/2D/controls/sliders/slider.pure.d.ts +51 -0
  158. package/2D/controls/sliders/slider.pure.js +292 -0
  159. package/2D/controls/sliders/slider.pure.js.map +1 -0
  160. package/2D/controls/stackPanel.d.ts +3 -62
  161. package/2D/controls/stackPanel.js +5 -243
  162. package/2D/controls/stackPanel.js.map +1 -1
  163. package/2D/controls/stackPanel.pure.d.ts +69 -0
  164. package/2D/controls/stackPanel.pure.js +257 -0
  165. package/2D/controls/stackPanel.pure.js.map +1 -0
  166. package/2D/controls/statics.d.ts +3 -4
  167. package/2D/controls/statics.js +5 -47
  168. package/2D/controls/statics.js.map +1 -1
  169. package/2D/controls/statics.pure.d.ts +11 -0
  170. package/2D/controls/statics.pure.js +61 -0
  171. package/2D/controls/statics.pure.js.map +1 -0
  172. package/2D/controls/textBlock.d.ts +3 -217
  173. package/2D/controls/textBlock.js +5 -676
  174. package/2D/controls/textBlock.js.map +1 -1
  175. package/2D/controls/textBlock.pure.d.ts +224 -0
  176. package/2D/controls/textBlock.pure.js +690 -0
  177. package/2D/controls/textBlock.pure.js.map +1 -0
  178. package/2D/controls/toggleButton.d.ts +3 -91
  179. package/2D/controls/toggleButton.js +5 -226
  180. package/2D/controls/toggleButton.js.map +1 -1
  181. package/2D/controls/toggleButton.pure.d.ts +98 -0
  182. package/2D/controls/toggleButton.pure.js +240 -0
  183. package/2D/controls/toggleButton.pure.js.map +1 -0
  184. package/2D/controls/virtualKeyboard.d.ts +3 -100
  185. package/2D/controls/virtualKeyboard.js +5 -272
  186. package/2D/controls/virtualKeyboard.js.map +1 -1
  187. package/2D/controls/virtualKeyboard.pure.d.ts +107 -0
  188. package/2D/controls/virtualKeyboard.pure.js +286 -0
  189. package/2D/controls/virtualKeyboard.pure.js.map +1 -0
  190. package/2D/pure.d.ts +13 -0
  191. package/2D/pure.js +15 -0
  192. package/2D/pure.js.map +1 -0
  193. package/3D/controls/pure.d.ts +23 -0
  194. package/3D/controls/pure.js +24 -0
  195. package/3D/controls/pure.js.map +1 -0
  196. package/3D/gizmos/pure.d.ts +3 -0
  197. package/3D/gizmos/pure.js +4 -0
  198. package/3D/gizmos/pure.js.map +1 -0
  199. package/3D/materials/fluent/fluentMaterial.d.ts +5 -100
  200. package/3D/materials/fluent/fluentMaterial.js +7 -305
  201. package/3D/materials/fluent/fluentMaterial.js.map +1 -1
  202. package/3D/materials/fluent/fluentMaterial.pure.d.ts +105 -0
  203. package/3D/materials/fluent/fluentMaterial.pure.js +317 -0
  204. package/3D/materials/fluent/fluentMaterial.pure.js.map +1 -0
  205. package/3D/materials/fluent/pure.d.ts +2 -0
  206. package/3D/materials/fluent/pure.js +3 -0
  207. package/3D/materials/fluent/pure.js.map +1 -0
  208. package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +5 -164
  209. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +7 -488
  210. package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
  211. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.d.ts +169 -0
  212. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js +500 -0
  213. package/3D/materials/fluentBackplate/fluentBackplateMaterial.pure.js.map +1 -0
  214. package/3D/materials/fluentBackplate/pure.d.ts +2 -0
  215. package/3D/materials/fluentBackplate/pure.js +3 -0
  216. package/3D/materials/fluentBackplate/pure.js.map +1 -0
  217. package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +5 -200
  218. package/3D/materials/fluentButton/fluentButtonMaterial.js +7 -563
  219. package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
  220. package/3D/materials/fluentButton/fluentButtonMaterial.pure.d.ts +205 -0
  221. package/3D/materials/fluentButton/fluentButtonMaterial.pure.js +575 -0
  222. package/3D/materials/fluentButton/fluentButtonMaterial.pure.js.map +1 -0
  223. package/3D/materials/fluentButton/pure.d.ts +2 -0
  224. package/3D/materials/fluentButton/pure.js +3 -0
  225. package/3D/materials/fluentButton/pure.js.map +1 -0
  226. package/3D/materials/handle/handleMaterial.d.ts +5 -66
  227. package/3D/materials/handle/handleMaterial.js +5 -118
  228. package/3D/materials/handle/handleMaterial.js.map +1 -1
  229. package/3D/materials/handle/handleMaterial.pure.d.ts +66 -0
  230. package/3D/materials/handle/handleMaterial.pure.js +119 -0
  231. package/3D/materials/handle/handleMaterial.pure.js.map +1 -0
  232. package/3D/materials/handle/pure.d.ts +2 -0
  233. package/3D/materials/handle/pure.js +3 -0
  234. package/3D/materials/handle/pure.js.map +1 -0
  235. package/3D/materials/mrdl/mrdlBackglowMaterial.d.ts +5 -85
  236. package/3D/materials/mrdl/mrdlBackglowMaterial.js +7 -299
  237. package/3D/materials/mrdl/mrdlBackglowMaterial.js.map +1 -1
  238. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.d.ts +90 -0
  239. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js +311 -0
  240. package/3D/materials/mrdl/mrdlBackglowMaterial.pure.js.map +1 -0
  241. package/3D/materials/mrdl/mrdlBackplateMaterial.d.ts +5 -145
  242. package/3D/materials/mrdl/mrdlBackplateMaterial.js +7 -433
  243. package/3D/materials/mrdl/mrdlBackplateMaterial.js.map +1 -1
  244. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.d.ts +157 -0
  245. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js +452 -0
  246. package/3D/materials/mrdl/mrdlBackplateMaterial.pure.js.map +1 -0
  247. package/3D/materials/mrdl/mrdlFrontplateMaterial.d.ts +5 -183
  248. package/3D/materials/mrdl/mrdlFrontplateMaterial.js +7 -532
  249. package/3D/materials/mrdl/mrdlFrontplateMaterial.js.map +1 -1
  250. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.d.ts +188 -0
  251. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js +544 -0
  252. package/3D/materials/mrdl/mrdlFrontplateMaterial.pure.js.map +1 -0
  253. package/3D/materials/mrdl/mrdlInnerquadMaterial.d.ts +5 -54
  254. package/3D/materials/mrdl/mrdlInnerquadMaterial.js +7 -227
  255. package/3D/materials/mrdl/mrdlInnerquadMaterial.js.map +1 -1
  256. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.d.ts +59 -0
  257. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js +239 -0
  258. package/3D/materials/mrdl/mrdlInnerquadMaterial.pure.js.map +1 -0
  259. package/3D/materials/mrdl/mrdlSliderBarMaterial.d.ts +5 -334
  260. package/3D/materials/mrdl/mrdlSliderBarMaterial.js +7 -855
  261. package/3D/materials/mrdl/mrdlSliderBarMaterial.js.map +1 -1
  262. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.d.ts +346 -0
  263. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js +874 -0
  264. package/3D/materials/mrdl/mrdlSliderBarMaterial.pure.js.map +1 -0
  265. package/3D/materials/mrdl/mrdlSliderThumbMaterial.d.ts +5 -334
  266. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +7 -855
  267. package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
  268. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.d.ts +346 -0
  269. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js +874 -0
  270. package/3D/materials/mrdl/mrdlSliderThumbMaterial.pure.js.map +1 -0
  271. package/3D/materials/mrdl/pure.d.ts +7 -0
  272. package/3D/materials/mrdl/pure.js +8 -0
  273. package/3D/materials/mrdl/pure.js.map +1 -0
  274. package/3D/materials/pure.d.ts +6 -0
  275. package/3D/materials/pure.js +8 -0
  276. package/3D/materials/pure.js.map +1 -0
  277. package/3D/pure.d.ts +6 -0
  278. package/3D/pure.js +8 -0
  279. package/3D/pure.js.map +1 -0
  280. package/package.json +50 -3
  281. package/pure.d.ts +3 -0
  282. package/pure.js +5 -0
  283. package/pure.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"inputTextArea.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/inputTextArea.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { type Vector2 } from \"core/Maths/math.vector\";\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, type 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: number;\r\n let relativeIndex: number;\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: number;\r\n let relativeIndex: number;\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 const marginHeight = this._margin.getValueInPixel(this._host, parentMeasure.height) * 2;\r\n this._availableHeight = this._height.getValueInPixel(this._host, parentMeasure.height) - marginHeight;\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 * this._host.idealRatio;\r\n context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;\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 * this._host.idealRatio;\r\n context.shadowOffsetY = this.shadowOffsetY * this._host.idealRatio;\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._highlighterOpacity;\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"]}
1
+ {"version":3,"file":"inputTextArea.js","sourceRoot":"","sources":["../../../../../dev/gui/src/2D/controls/inputTextArea.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,sBAAsB,CAAC;AAErC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,qBAAqB,EAAE,CAAC","sourcesContent":["/**\r\n * Re-exports the pure implementation and applies the runtime registration side effect.\r\n * Import \"./inputTextArea.pure\" for tree-shakeable, side-effect-free usage.\r\n */\r\nexport * from \"./inputTextArea.pure\";\r\n\r\nimport { RegisterInputTextArea } from \"./inputTextArea.pure\";\r\nRegisterInputTextArea();\r\n"]}
@@ -0,0 +1,147 @@
1
+ import { type Nullable } from "@babylonjs/core/types.js";
2
+ import { Observable } from "@babylonjs/core/Misc/observable.js";
3
+ import { type Vector2 } from "@babylonjs/core/Maths/math.vector.pure.js";
4
+ import { Control } from "./control.pure.js";
5
+ import { type VirtualKeyboard } from "./virtualKeyboard.pure.js";
6
+ import { type Measure } from "../measure.js";
7
+ import { InputText } from "./inputText.pure.js";
8
+ import { type ICanvasRenderingContext } from "@babylonjs/core/Engines/ICanvas.js";
9
+ import { type PointerInfo, type PointerInfoBase } from "@babylonjs/core/Events/pointerEvents.js";
10
+ import { type IKeyboardEvent } from "@babylonjs/core/Events/deviceInputEvents.js";
11
+ /**
12
+ * Class used to create input text control
13
+ */
14
+ export declare class InputTextArea extends InputText {
15
+ name?: string | undefined;
16
+ private _textHorizontalAlignment;
17
+ private _textVerticalAlignment;
18
+ private _prevText;
19
+ private _lines;
20
+ private _lineSpacing;
21
+ private _maxHeight;
22
+ private _clipTextTop;
23
+ private _clipTextLeft;
24
+ private _cursorInfo;
25
+ private _highlightCursorInfo;
26
+ /**
27
+ * An event triggered after the text was broken up into lines
28
+ */
29
+ onLinesReadyObservable: Observable<InputTextArea>;
30
+ /** @internal */
31
+ _connectedVirtualKeyboard: Nullable<VirtualKeyboard>;
32
+ private _contextForBreakLines;
33
+ private _clickedCoordinateX;
34
+ private _clickedCoordinateY;
35
+ private _availableWidth;
36
+ private _availableHeight;
37
+ private _scrollTop;
38
+ private _autoStretchHeight;
39
+ /** Gets or sets a boolean indicating if the control can auto stretch its height to adapt to the text */
40
+ get autoStretchHeight(): boolean;
41
+ set autoStretchHeight(value: boolean);
42
+ set height(value: string | number);
43
+ get maxHeight(): string | number;
44
+ /** Gets the maximum width allowed by the control in pixels */
45
+ get maxHeightInPixels(): number;
46
+ set maxHeight(value: string | number);
47
+ /**
48
+ * Creates a new InputTextArea
49
+ * @param name defines the control name
50
+ * @param text defines the text of the control
51
+ */
52
+ constructor(name?: string | undefined, text?: string);
53
+ protected _getTypeName(): string;
54
+ /**
55
+ * Handles the keyboard event
56
+ * @param evt Defines the KeyboardEvent
57
+ */
58
+ processKeyboard(evt: IKeyboardEvent): void;
59
+ /**
60
+ * Process the last keyboard input
61
+ *
62
+ * @param code The ascii input number
63
+ * @param key The key string representation
64
+ * @param evt The keyboard event emits with input
65
+ * @internal
66
+ */
67
+ alternativeProcessKey(code: string, key?: string, evt?: IKeyboardEvent): void;
68
+ protected _parseLineWordWrap(line: string | undefined, width: number, context: ICanvasRenderingContext): {
69
+ text: string;
70
+ width: number;
71
+ lineEnding: string;
72
+ }[];
73
+ protected _breakLines(refWidth: number, context: ICanvasRenderingContext): object[];
74
+ protected _parseLine(line: string | undefined, context: ICanvasRenderingContext): {
75
+ text: string;
76
+ width: number;
77
+ lineEnding: string;
78
+ };
79
+ /**
80
+ * Processing of child right before the parent measurement update
81
+ *
82
+ * @param parentMeasure The parent measure
83
+ * @param context The rendering canvas
84
+ * @internal
85
+ */
86
+ protected _preMeasure(parentMeasure: Measure, context: ICanvasRenderingContext): void;
87
+ protected _textHasChanged(): void;
88
+ private _computeScroll;
89
+ /**
90
+ * Processing of child after the parent measurement update
91
+ *
92
+ * @internal
93
+ */
94
+ protected _additionalProcessing(): void;
95
+ private _drawText;
96
+ /**
97
+ * Copy the text in the clipboard
98
+ *
99
+ * @param ev The clipboard event
100
+ * @internal
101
+ */
102
+ protected _onCopyText(ev: ClipboardEvent): void;
103
+ /**
104
+ * Cut the text and copy it in the clipboard
105
+ *
106
+ * @param ev The clipboard event
107
+ * @internal
108
+ */
109
+ protected _onCutText(ev: ClipboardEvent): void;
110
+ /**
111
+ * Paste the copied text from the clipboard
112
+ *
113
+ * @param ev The clipboard event
114
+ * @internal
115
+ */
116
+ protected _onPasteText(ev: ClipboardEvent): void;
117
+ _draw(context: ICanvasRenderingContext): void;
118
+ private _resetBlinking;
119
+ _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean;
120
+ _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void;
121
+ /**
122
+ * Apply the correct position of cursor according to current modification
123
+ */
124
+ private _updateCursorPosition;
125
+ /**
126
+ * Update all values of cursor information based on cursorIndex value
127
+ *
128
+ * @param offset The index to take care of
129
+ * @internal
130
+ */
131
+ protected _updateValueFromCursorIndex(offset: number): void;
132
+ /**
133
+ * Select the word immediatly under the cursor on double click
134
+ *
135
+ * @param _evt Pointer informations of double click
136
+ * @internal
137
+ */
138
+ protected _processDblClick(_evt: PointerInfo): void;
139
+ /** @internal */
140
+ selectAllText(): void;
141
+ dispose(): void;
142
+ }
143
+ /**
144
+ * Registers the InputTextArea class with the type store for serialization support.
145
+ * Safe to call multiple times; only the first call has an effect.
146
+ */
147
+ export declare function RegisterInputTextArea(): void;