@babylonjs/gui 5.41.0 → 5.42.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/advancedDynamicTexture.d.ts +2 -0
- package/2D/advancedDynamicTexture.js +30 -6
- package/2D/advancedDynamicTexture.js.map +1 -1
- package/2D/controls/control.js +3 -0
- package/2D/controls/control.js.map +1 -1
- package/2D/controls/image.d.ts +9 -0
- package/2D/controls/image.js +29 -0
- package/2D/controls/image.js.map +1 -1
- package/2D/controls/inputText.d.ts +4 -0
- package/2D/controls/inputText.js +48 -35
- package/2D/controls/inputText.js.map +1 -1
- package/3D/controls/slider3D.js +4 -2
- package/3D/controls/slider3D.js.map +1 -1
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js +3 -0
- package/3D/materials/mrdl/mrdlSliderThumbMaterial.js.map +1 -1
- package/package.json +2 -2
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"inputText.js","sourceRoot":"","sources":["../../../../../lts/gui/generated/2D/controls/inputText.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { Vector2 } from \"core/Maths/math.vector\";\r\nimport type { ClipboardInfo } from \"core/Events/clipboardEvents\";\r\nimport { ClipboardEventTypes } from \"core/Events/clipboardEvents\";\r\nimport type { PointerInfo, PointerInfoBase } from \"core/Events/pointerEvents\";\r\nimport { PointerEventTypes } from \"core/Events/pointerEvents\";\r\n\r\nimport { Control } from \"./control\";\r\nimport type { IFocusableControl } from \"./focusableControl\";\r\nimport { ValueAndUnit } from \"../valueAndUnit\";\r\nimport type { VirtualKeyboard } from \"./virtualKeyboard\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { TextWrapper } from \"./textWrapper\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport type { IKeyboardEvent, IPointerEvent } from \"core/Events/deviceInputEvents\";\r\nimport type { ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\n\r\n/**\r\n * Class used to create input text control\r\n */\r\nexport class InputText extends Control implements IFocusableControl {\r\n protected _textWrapper: TextWrapper;\r\n protected _placeholderText = \"\";\r\n protected _background = \"#222222\";\r\n protected _focusedBackground = \"#000000\";\r\n protected _focusedColor = \"white\";\r\n protected _placeholderColor = \"gray\";\r\n protected _thickness = 1;\r\n protected _margin = new ValueAndUnit(10, ValueAndUnit.UNITMODE_PIXEL);\r\n protected _autoStretchWidth = true;\r\n protected _maxWidth = new ValueAndUnit(1, ValueAndUnit.UNITMODE_PERCENTAGE, false);\r\n protected _isFocused = false;\r\n /** the type of device that most recently focused the input: \"mouse\", \"touch\" or \"pen\" */\r\n protected _focusedBy: string;\r\n protected _blinkTimeout: number;\r\n protected _blinkIsEven = false;\r\n private _cursorOffset = 0;\r\n protected _scrollLeft: Nullable<number>;\r\n protected _textWidth: number;\r\n protected _clickedCoordinate: Nullable<number>;\r\n protected _deadKey = false;\r\n protected _addKey = true;\r\n protected _currentKey = \"\";\r\n protected _isTextHighlightOn = false;\r\n protected _textHighlightColor = \"#d5e0ff\";\r\n protected _highligherOpacity = 0.4;\r\n protected _highlightedText = \"\";\r\n private _startHighlightIndex = 0;\r\n private _endHighlightIndex = 0;\r\n private _cursorIndex = -1;\r\n protected _onFocusSelectAll = false;\r\n protected _isPointerDown = false;\r\n protected _onClipboardObserver: Nullable<Observer<ClipboardInfo>>;\r\n protected _onPointerDblTapObserver: Nullable<Observer<PointerInfo>>;\r\n\r\n /** @internal */\r\n public _connectedVirtualKeyboard: Nullable<VirtualKeyboard>;\r\n\r\n /** Gets or sets a string representing the message displayed on mobile when the control gets the focus */\r\n @serialize()\r\n public promptMessage = \"Please enter text:\";\r\n /** Force disable prompt on mobile device */\r\n @serialize()\r\n public disableMobilePrompt = false;\r\n\r\n /** Observable raised when the text changes */\r\n public onTextChangedObservable = new Observable<InputText>();\r\n /** Observable raised just before an entered character is to be added */\r\n public onBeforeKeyAddObservable = new Observable<InputText>();\r\n /** Observable raised when the control gets the focus */\r\n public onFocusObservable = new Observable<InputText>();\r\n /** Observable raised when the control loses the focus */\r\n public onBlurObservable = new Observable<InputText>();\r\n /**Observable raised when the text is highlighted */\r\n public onTextHighlightObservable = new Observable<InputText>();\r\n /**Observable raised when copy event is triggered */\r\n public onTextCopyObservable = new Observable<InputText>();\r\n /** Observable raised when cut event is triggered */\r\n public onTextCutObservable = new Observable<InputText>();\r\n /** Observable raised when paste event is triggered */\r\n public onTextPasteObservable = new Observable<InputText>();\r\n /** Observable raised when a key event was processed */\r\n public onKeyboardEventProcessedObservable = new Observable<IKeyboardEvent>();\r\n\r\n /** Gets or sets the maximum width allowed by the control */\r\n @serialize()\r\n public get maxWidth(): string | number {\r\n return this._maxWidth.toString(this._host);\r\n }\r\n\r\n /** Gets the maximum width allowed by the control in pixels */\r\n public get maxWidthInPixels(): number {\r\n return this._maxWidth.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n }\r\n\r\n public set maxWidth(value: string | number) {\r\n if (this._maxWidth.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._maxWidth.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets the text highlighter transparency; default: 0.4 */\r\n @serialize()\r\n public get highligherOpacity(): number {\r\n return this._highligherOpacity;\r\n }\r\n\r\n public set highligherOpacity(value: number) {\r\n if (this._highligherOpacity === value) {\r\n return;\r\n }\r\n this._highligherOpacity = value;\r\n this._markAsDirty();\r\n }\r\n /** Gets or sets a boolean indicating whether to select complete text by default on input focus */\r\n @serialize()\r\n public get onFocusSelectAll(): boolean {\r\n return this._onFocusSelectAll;\r\n }\r\n\r\n public set onFocusSelectAll(value: boolean) {\r\n if (this._onFocusSelectAll === value) {\r\n return;\r\n }\r\n\r\n this._onFocusSelectAll = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the text hightlight color */\r\n @serialize()\r\n public get textHighlightColor(): string {\r\n return this._textHighlightColor;\r\n }\r\n\r\n public set textHighlightColor(value: string) {\r\n if (this._textHighlightColor === value) {\r\n return;\r\n }\r\n this._textHighlightColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets control margin */\r\n @serialize()\r\n public get margin(): string {\r\n return this._margin.toString(this._host);\r\n }\r\n\r\n /** Gets control margin in pixels */\r\n public get marginInPixels(): number {\r\n return this._margin.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n }\r\n\r\n public set margin(value: string) {\r\n if (this._margin.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._margin.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the control can auto stretch its width to adapt to the text */\r\n @serialize()\r\n public get autoStretchWidth(): boolean {\r\n return this._autoStretchWidth;\r\n }\r\n\r\n public set autoStretchWidth(value: boolean) {\r\n if (this._autoStretchWidth === value) {\r\n return;\r\n }\r\n\r\n this._autoStretchWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets border thickness */\r\n @serialize()\r\n public get thickness(): number {\r\n return this._thickness;\r\n }\r\n\r\n public set thickness(value: number) {\r\n if (this._thickness === value) {\r\n return;\r\n }\r\n\r\n this._thickness = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the background color when focused */\r\n @serialize()\r\n public get focusedBackground(): string {\r\n return this._focusedBackground;\r\n }\r\n\r\n public set focusedBackground(value: string) {\r\n if (this._focusedBackground === value) {\r\n return;\r\n }\r\n\r\n this._focusedBackground = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the background color when focused */\r\n @serialize()\r\n public get focusedColor(): string {\r\n return this._focusedColor;\r\n }\r\n\r\n public set focusedColor(value: string) {\r\n if (this._focusedColor === value) {\r\n return;\r\n }\r\n\r\n this._focusedColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the background color */\r\n @serialize()\r\n public get background(): string {\r\n return this._background;\r\n }\r\n\r\n public set background(value: string) {\r\n if (this._background === value) {\r\n return;\r\n }\r\n\r\n this._background = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the placeholder color */\r\n @serialize()\r\n public get placeholderColor(): string {\r\n return this._placeholderColor;\r\n }\r\n\r\n public set placeholderColor(value: string) {\r\n if (this._placeholderColor === value) {\r\n return;\r\n }\r\n\r\n this._placeholderColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the text displayed when the control is empty */\r\n @serialize()\r\n public get placeholderText(): string {\r\n return this._placeholderText;\r\n }\r\n\r\n public set placeholderText(value: string) {\r\n if (this._placeholderText === value) {\r\n return;\r\n }\r\n this._placeholderText = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the dead key. 0 to disable. */\r\n @serialize()\r\n public get deadKey(): boolean {\r\n return this._deadKey;\r\n }\r\n\r\n public set deadKey(flag: boolean) {\r\n this._deadKey = flag;\r\n }\r\n\r\n /** Gets or sets the highlight text */\r\n public get highlightedText(): string {\r\n return this._highlightedText;\r\n }\r\n public set highlightedText(text: string) {\r\n if (this._highlightedText === text) {\r\n return;\r\n }\r\n this._highlightedText = text;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets if the current key should be added */\r\n public get addKey(): boolean {\r\n return this._addKey;\r\n }\r\n\r\n public set addKey(flag: boolean) {\r\n this._addKey = flag;\r\n }\r\n\r\n /** Gets or sets the value of the current key being entered */\r\n public get currentKey(): string {\r\n return this._currentKey;\r\n }\r\n\r\n public set currentKey(key: string) {\r\n this._currentKey = key;\r\n }\r\n\r\n /** Gets or sets the text displayed in the control */\r\n @serialize()\r\n public get text(): string {\r\n return this._textWrapper.text;\r\n }\r\n\r\n public set text(value: string) {\r\n const valueAsString = value.toString(); // Forcing convertion\r\n\r\n if (!this._textWrapper) {\r\n this._textWrapper = new TextWrapper();\r\n }\r\n\r\n if (this._textWrapper.text === valueAsString) {\r\n return;\r\n }\r\n this._textWrapper.text = valueAsString;\r\n this._textHasChanged();\r\n }\r\n\r\n protected _textHasChanged(): void {\r\n this._markAsDirty();\r\n this.onTextChangedObservable.notifyObservers(this);\r\n }\r\n\r\n /** Gets or sets control width */\r\n @serialize()\r\n public get width(): string | number {\r\n return this._width.toString(this._host);\r\n }\r\n\r\n public set width(value: string | number) {\r\n if (this._width.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._width.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n\r\n this.autoStretchWidth = false;\r\n }\r\n\r\n /**\r\n * Creates a new InputText\r\n * @param name defines the control name\r\n * @param text defines the text of the control\r\n */\r\n constructor(public name?: string, text: string = \"\") {\r\n super(name);\r\n\r\n this.text = text;\r\n this.isPointerBlocker = true;\r\n }\r\n\r\n /** @internal */\r\n public onBlur(): void {\r\n this._isFocused = false;\r\n this._scrollLeft = null;\r\n this._cursorOffset = 0;\r\n clearTimeout(this._blinkTimeout);\r\n this._markAsDirty();\r\n\r\n this.onBlurObservable.notifyObservers(this);\r\n\r\n this._host.unRegisterClipboardEvents();\r\n if (this._onClipboardObserver) {\r\n this._host.onClipboardObservable.remove(this._onClipboardObserver);\r\n }\r\n const scene = this._host.getScene();\r\n if (this._onPointerDblTapObserver && scene) {\r\n scene.onPointerObservable.remove(this._onPointerDblTapObserver);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public onFocus(): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n this._scrollLeft = null;\r\n this._isFocused = true;\r\n this._blinkIsEven = false;\r\n this._cursorOffset = 0;\r\n this._markAsDirty();\r\n\r\n this.onFocusObservable.notifyObservers(this);\r\n\r\n if (this._focusedBy === \"touch\" && !this.disableMobilePrompt) {\r\n const value = prompt(this.promptMessage);\r\n\r\n if (value !== null) {\r\n this.text = value;\r\n }\r\n this._host.focusedControl = null;\r\n return;\r\n }\r\n\r\n this._host.registerClipboardEvents();\r\n\r\n this._onClipboardObserver = this._host.onClipboardObservable.add((clipboardInfo) => {\r\n // process clipboard event, can be configured.\r\n switch (clipboardInfo.type) {\r\n case ClipboardEventTypes.COPY:\r\n this._onCopyText(clipboardInfo.event);\r\n this.onTextCopyObservable.notifyObservers(this);\r\n break;\r\n case ClipboardEventTypes.CUT:\r\n this._onCutText(clipboardInfo.event);\r\n this.onTextCutObservable.notifyObservers(this);\r\n break;\r\n case ClipboardEventTypes.PASTE:\r\n this._onPasteText(clipboardInfo.event);\r\n this.onTextPasteObservable.notifyObservers(this);\r\n break;\r\n default:\r\n return;\r\n }\r\n });\r\n\r\n const scene = this._host.getScene();\r\n if (scene) {\r\n //register the pointer double tap event\r\n this._onPointerDblTapObserver = scene.onPointerObservable.add((pointerInfo) => {\r\n if (!this._isFocused) {\r\n return;\r\n }\r\n if (pointerInfo.type === PointerEventTypes.POINTERDOUBLETAP) {\r\n this._processDblClick(pointerInfo);\r\n }\r\n });\r\n }\r\n\r\n if (this._onFocusSelectAll) {\r\n this._selectAllText();\r\n }\r\n }\r\n\r\n /**\r\n * Function to focus an inputText programmatically\r\n */\r\n public focus() {\r\n this._host.moveFocusToControl(this);\r\n }\r\n\r\n /**\r\n * Function to unfocus an inputText programmatically\r\n */\r\n public blur() {\r\n this._host.focusedControl = null;\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"InputText\";\r\n }\r\n\r\n /**\r\n * Function called to get the list of controls that should not steal the focus from this control\r\n * @returns an array of controls\r\n */\r\n public keepsFocusWith(): Nullable<Control[]> {\r\n if (!this._connectedVirtualKeyboard) {\r\n return null;\r\n }\r\n return [this._connectedVirtualKeyboard];\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public processKey(keyCode: number, key?: string, evt?: IKeyboardEvent) {\r\n if (this.isReadOnly) {\r\n return;\r\n }\r\n\r\n //return if clipboard event keys (i.e -ctr/cmd + c,v,x)\r\n if (evt && (evt.ctrlKey || evt.metaKey) && (keyCode === 67 || keyCode === 86 || keyCode === 88)) {\r\n return;\r\n }\r\n\r\n //select all\r\n if (evt && (evt.ctrlKey || evt.metaKey) && keyCode === 65) {\r\n this._selectAllText();\r\n evt.preventDefault();\r\n return;\r\n }\r\n // Specific cases\r\n switch (keyCode) {\r\n case 32: //SPACE\r\n key = \" \"; //ie11 key for space is \"Spacebar\"\r\n break;\r\n case 191: //SLASH\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n break;\r\n case 8: // BACKSPACE\r\n if (this._textWrapper.text && this._textWrapper.length > 0) {\r\n //delete the highlighted text\r\n if (this._isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\r\n this._textHasChanged();\r\n this._isTextHighlightOn = false;\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n this._blinkIsEven = false;\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n }\r\n //delete single character\r\n if (this._cursorOffset === 0) {\r\n this.text = this._textWrapper.substr(0, this._textWrapper.length - 1);\r\n } else {\r\n const deletePosition = this._textWrapper.length - this._cursorOffset;\r\n if (deletePosition > 0) {\r\n this._textWrapper.removePart(deletePosition - 1, deletePosition);\r\n this._textHasChanged();\r\n }\r\n }\r\n }\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n case 46: // DELETE\r\n if (this._isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\r\n this._textHasChanged();\r\n this._isTextHighlightOn = false;\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n }\r\n if (this._textWrapper.text && this._textWrapper.length > 0 && this._cursorOffset > 0) {\r\n const deletePosition = this._textWrapper.length - this._cursorOffset;\r\n this._textWrapper.removePart(deletePosition, deletePosition + 1);\r\n this._textHasChanged();\r\n this._cursorOffset--;\r\n }\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n case 13: // RETURN\r\n this._host.focusedControl = null;\r\n this._isTextHighlightOn = false;\r\n return;\r\n case 35: // END\r\n this._cursorOffset = 0;\r\n this._blinkIsEven = false;\r\n this._isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n case 36: // HOME\r\n this._cursorOffset = this._textWrapper.length;\r\n this._blinkIsEven = false;\r\n this._isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n case 37: // LEFT\r\n this._cursorOffset++;\r\n if (this._cursorOffset > this._textWrapper.length) {\r\n this._cursorOffset = this._textWrapper.length;\r\n }\r\n\r\n if (evt && evt.shiftKey) {\r\n // update the cursor\r\n this._blinkIsEven = false;\r\n // shift + ctrl/cmd + <-\r\n if (evt.ctrlKey || evt.metaKey) {\r\n if (!this._isTextHighlightOn) {\r\n if (this._textWrapper.length === this._cursorOffset) {\r\n return;\r\n } else {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset + 1;\r\n }\r\n }\r\n this._startHighlightIndex = 0;\r\n this._cursorIndex = this._textWrapper.length - this._endHighlightIndex;\r\n this._cursorOffset = this._textWrapper.length;\r\n this._isTextHighlightOn = true;\r\n this._markAsDirty();\r\n return;\r\n }\r\n //store the starting point\r\n if (!this._isTextHighlightOn) {\r\n this._isTextHighlightOn = true;\r\n this._cursorIndex = this._cursorOffset >= this._textWrapper.length ? this._textWrapper.length : this._cursorOffset - 1;\r\n }\r\n //if text is already highlighted\r\n else if (this._cursorIndex === -1) {\r\n this._cursorIndex = this._textWrapper.length - this._endHighlightIndex;\r\n this._cursorOffset = this._startHighlightIndex === 0 ? this._textWrapper.length : this._textWrapper.length - this._startHighlightIndex + 1;\r\n }\r\n //set the highlight indexes\r\n if (this._cursorIndex < this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n } else if (this._cursorIndex > this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n } else {\r\n this._isTextHighlightOn = false;\r\n }\r\n this._markAsDirty();\r\n return;\r\n }\r\n if (this._isTextHighlightOn) {\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n this._isTextHighlightOn = false;\r\n }\r\n if (evt && (evt.ctrlKey || evt.metaKey)) {\r\n this._cursorOffset = this._textWrapper.length;\r\n evt.preventDefault();\r\n }\r\n this._blinkIsEven = false;\r\n this._isTextHighlightOn = false;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n return;\r\n case 39: // RIGHT\r\n this._cursorOffset--;\r\n if (this._cursorOffset < 0) {\r\n this._cursorOffset = 0;\r\n }\r\n if (evt && evt.shiftKey) {\r\n //update the cursor\r\n this._blinkIsEven = false;\r\n //shift + ctrl/cmd + ->\r\n if (evt.ctrlKey || evt.metaKey) {\r\n if (!this._isTextHighlightOn) {\r\n if (this._cursorOffset === 0) {\r\n return;\r\n } else {\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset - 1;\r\n }\r\n }\r\n this._endHighlightIndex = this._textWrapper.length;\r\n this._isTextHighlightOn = true;\r\n this._cursorIndex = this._textWrapper.length - this._startHighlightIndex;\r\n this._cursorOffset = 0;\r\n this._markAsDirty();\r\n return;\r\n }\r\n\r\n if (!this._isTextHighlightOn) {\r\n this._isTextHighlightOn = true;\r\n this._cursorIndex = this._cursorOffset <= 0 ? 0 : this._cursorOffset + 1;\r\n }\r\n //if text is already highlighted\r\n else if (this._cursorIndex === -1) {\r\n this._cursorIndex = this._textWrapper.length - this._startHighlightIndex;\r\n this._cursorOffset = this._textWrapper.length === this._endHighlightIndex ? 0 : this._textWrapper.length - this._endHighlightIndex - 1;\r\n }\r\n //set the highlight indexes\r\n if (this._cursorIndex < this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n } else if (this._cursorIndex > this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n } else {\r\n this._isTextHighlightOn = false;\r\n }\r\n this._markAsDirty();\r\n return;\r\n }\r\n if (this._isTextHighlightOn) {\r\n this._cursorOffset = this._textWrapper.length - this._endHighlightIndex;\r\n this._isTextHighlightOn = false;\r\n }\r\n //ctr + ->\r\n if (evt && (evt.ctrlKey || evt.metaKey)) {\r\n this._cursorOffset = 0;\r\n evt.preventDefault();\r\n }\r\n this._blinkIsEven = false;\r\n this._isTextHighlightOn = false;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n return;\r\n }\r\n if (keyCode === 32) {\r\n key = evt?.key ?? \" \";\r\n }\r\n this._deadKey = key === \"Dead\";\r\n // Printable characters\r\n if (\r\n key &&\r\n (keyCode === -1 || // Direct access\r\n keyCode === 32 || // Space\r\n keyCode === 34 || // \" add support for single and double quotes\r\n keyCode === 39 || // '\r\n (keyCode > 47 && keyCode < 64) || // Numbers\r\n (keyCode > 64 && keyCode < 91) || // Letters\r\n (keyCode > 159 && keyCode < 193) || // Special characters\r\n (keyCode > 218 && keyCode < 223) || // Special characters\r\n (keyCode > 95 && keyCode < 112))\r\n ) {\r\n // Numpad\r\n this._currentKey = key;\r\n this.onBeforeKeyAddObservable.notifyObservers(this);\r\n key = this._currentKey;\r\n if (this._addKey && !this._deadKey) {\r\n if (this._isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex, key);\r\n this._textHasChanged();\r\n this._cursorOffset = this._textWrapper.length - (this._startHighlightIndex + 1);\r\n this._isTextHighlightOn = false;\r\n this._blinkIsEven = false;\r\n this._markAsDirty();\r\n } else if (this._cursorOffset === 0) {\r\n this.text += this._deadKey && evt?.key ? evt.key : key;\r\n } else {\r\n const insertPosition = this._textWrapper.length - this._cursorOffset;\r\n this._textWrapper.removePart(insertPosition, insertPosition, key);\r\n this._textHasChanged();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _updateValueFromCursorIndex(offset: number) {\r\n //update the cursor\r\n this._blinkIsEven = false;\r\n\r\n if (this._cursorIndex === -1) {\r\n this._cursorIndex = offset;\r\n } else {\r\n if (this._cursorIndex < this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n } else if (this._cursorIndex > this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n } else {\r\n this._isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n }\r\n }\r\n this._isTextHighlightOn = true;\r\n this._markAsDirty();\r\n }\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _processDblClick(evt: PointerInfo) {\r\n //pre-find the start and end index of the word under cursor, speeds up the rendering\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._endHighlightIndex = this._startHighlightIndex;\r\n let moveLeft, moveRight;\r\n do {\r\n moveRight = this._endHighlightIndex < this._textWrapper.length && this._textWrapper.isWord(this._endHighlightIndex) ? ++this._endHighlightIndex : 0;\r\n moveLeft = this._startHighlightIndex > 0 && this._textWrapper.isWord(this._startHighlightIndex - 1) ? --this._startHighlightIndex : 0;\r\n } while (moveLeft || moveRight);\r\n\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n this.onTextHighlightObservable.notifyObservers(this);\r\n\r\n this._isTextHighlightOn = true;\r\n this._clickedCoordinate = null;\r\n this._blinkIsEven = true;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n }\r\n /** @internal */\r\n protected _selectAllText() {\r\n this._blinkIsEven = true;\r\n this._isTextHighlightOn = true;\r\n\r\n this._startHighlightIndex = 0;\r\n this._endHighlightIndex = this._textWrapper.length;\r\n this._cursorOffset = this._textWrapper.length;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Handles the keyboard event\r\n * @param evt Defines the KeyboardEvent\r\n */\r\n public processKeyboard(evt: IKeyboardEvent): void {\r\n // process pressed key\r\n this.processKey(evt.keyCode, evt.key, evt);\r\n\r\n this.onKeyboardEventProcessedObservable.notifyObservers(evt);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _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 * @internal\r\n */\r\n protected _onCutText(ev: ClipboardEvent): void {\r\n if (!this._highlightedText) {\r\n return;\r\n }\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\r\n this._textHasChanged();\r\n this._isTextHighlightOn = false;\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\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._highlightedText = \"\";\r\n }\r\n /**\r\n * @internal\r\n */\r\n protected _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 const insertPosition = this._textWrapper.length - this._cursorOffset;\r\n this._textWrapper.removePart(insertPosition, insertPosition, data);\r\n this._textHasChanged();\r\n }\r\n\r\n public _draw(context: ICanvasRenderingContext): void {\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 if (!this._fontOffset || this._wasDirty) {\r\n this._fontOffset = Control._GetFontOffset(context.font);\r\n }\r\n\r\n // Text\r\n const clipTextLeft = this._currentMeasure.left + this._margin.getValueInPixel(this._host, this._tempParentMeasure.width);\r\n if (this.color) {\r\n context.fillStyle = this.color;\r\n }\r\n\r\n let text = this._beforeRenderText(this._textWrapper);\r\n\r\n if (!this._isFocused && !this._textWrapper.text && this._placeholderText) {\r\n text = new TextWrapper();\r\n text.text = this._placeholderText;\r\n\r\n if (this._placeholderColor) {\r\n context.fillStyle = this._placeholderColor;\r\n }\r\n }\r\n\r\n this._textWidth = context.measureText(text.text).width;\r\n const marginWidth = this._margin.getValueInPixel(this._host, this._tempParentMeasure.width) * 2;\r\n if (this._autoStretchWidth) {\r\n this.width = Math.min(this._maxWidth.getValueInPixel(this._host, this._tempParentMeasure.width), this._textWidth + marginWidth) + \"px\";\r\n this._autoStretchWidth = true; // setting the width will have reset _autoStretchWidth to false!\r\n }\r\n\r\n const rootY = this._fontOffset.ascent + (this._currentMeasure.height - this._fontOffset.height) / 2;\r\n const availableWidth = this._width.getValueInPixel(this._host, this._tempParentMeasure.width) - marginWidth;\r\n\r\n context.save();\r\n context.beginPath();\r\n context.rect(clipTextLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, availableWidth + 2, this._currentMeasure.height);\r\n context.clip();\r\n\r\n if (this._isFocused && this._textWidth > availableWidth) {\r\n const textLeft = clipTextLeft - this._textWidth + availableWidth;\r\n if (!this._scrollLeft) {\r\n this._scrollLeft = textLeft;\r\n }\r\n } else {\r\n this._scrollLeft = clipTextLeft;\r\n }\r\n\r\n context.fillText(text.text, this._scrollLeft, this._currentMeasure.top + rootY);\r\n\r\n // Cursor\r\n if (this._isFocused) {\r\n // Need to move cursor\r\n if (this._clickedCoordinate) {\r\n const rightPosition = this._scrollLeft + this._textWidth;\r\n const absoluteCursorPosition = rightPosition - this._clickedCoordinate;\r\n let currentSize = 0;\r\n this._cursorOffset = 0;\r\n let previousDist = 0;\r\n do {\r\n if (this._cursorOffset) {\r\n previousDist = Math.abs(absoluteCursorPosition - currentSize);\r\n }\r\n this._cursorOffset++;\r\n currentSize = context.measureText(text.substr(text.length - this._cursorOffset, this._cursorOffset)).width;\r\n } while (currentSize < absoluteCursorPosition && text.length >= this._cursorOffset);\r\n\r\n // Find closest move\r\n if (Math.abs(absoluteCursorPosition - currentSize) > previousDist) {\r\n this._cursorOffset--;\r\n }\r\n\r\n this._blinkIsEven = false;\r\n this._clickedCoordinate = null;\r\n }\r\n\r\n // Render cursor\r\n if (!this._blinkIsEven) {\r\n const cursorOffsetText = text.substr(text.length - this._cursorOffset);\r\n const cursorOffsetWidth = context.measureText(cursorOffsetText).width;\r\n let cursorLeft = this._scrollLeft + this._textWidth - cursorOffsetWidth;\r\n\r\n if (cursorLeft < clipTextLeft) {\r\n this._scrollLeft += clipTextLeft - cursorLeft;\r\n cursorLeft = clipTextLeft;\r\n this._markAsDirty();\r\n } else if (cursorLeft > clipTextLeft + availableWidth) {\r\n this._scrollLeft += clipTextLeft + availableWidth - cursorLeft;\r\n cursorLeft = clipTextLeft + availableWidth;\r\n this._markAsDirty();\r\n }\r\n if (!this._isTextHighlightOn) {\r\n context.fillRect(cursorLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, 2, this._fontOffset.height);\r\n }\r\n }\r\n\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 //show the highlighted text\r\n if (this._isTextHighlightOn) {\r\n clearTimeout(this._blinkTimeout);\r\n const highlightCursorOffsetWidth = context.measureText(text.substring(this._startHighlightIndex)).width;\r\n let highlightCursorLeft = this._scrollLeft + this._textWidth - highlightCursorOffsetWidth;\r\n this._highlightedText = text.substring(this._startHighlightIndex, this._endHighlightIndex);\r\n let width = context.measureText(text.substring(this._startHighlightIndex, this._endHighlightIndex)).width;\r\n if (highlightCursorLeft < clipTextLeft) {\r\n width = width - (clipTextLeft - highlightCursorLeft);\r\n if (!width) {\r\n // when using left arrow on text.length > availableWidth;\r\n // assigns the width of the first letter after clipTextLeft\r\n width = context.measureText(text.charAt(text.length - this._cursorOffset)).width;\r\n }\r\n highlightCursorLeft = clipTextLeft;\r\n }\r\n //for transparancy\r\n context.globalAlpha = this._highligherOpacity;\r\n context.fillStyle = this._textHighlightColor;\r\n context.fillRect(highlightCursorLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, width, this._fontOffset.height);\r\n context.globalAlpha = 1.0;\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 context.restore();\r\n }\r\n\r\n public _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n this._clickedCoordinate = coordinates.x;\r\n this._isTextHighlightOn = false;\r\n this._highlightedText = \"\";\r\n this._cursorIndex = -1;\r\n this._isPointerDown = true;\r\n this._host._capturingControl[pointerId] = this;\r\n this._focusedBy = (pi.event as IPointerEvent).pointerType;\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 public _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\r\n if (this._host.focusedControl === this && this._isPointerDown && !this.isReadOnly) {\r\n this._clickedCoordinate = coordinates.x;\r\n this._markAsDirty();\r\n this._updateValueFromCursorIndex(this._cursorOffset);\r\n }\r\n super._onPointerMove(target, coordinates, pointerId, pi);\r\n }\r\n\r\n public _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean): void {\r\n this._isPointerDown = false;\r\n delete this._host._capturingControl[pointerId];\r\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick);\r\n }\r\n\r\n protected _beforeRenderText(textWrapper: TextWrapper): TextWrapper {\r\n return textWrapper;\r\n }\r\n\r\n public dispose() {\r\n super.dispose();\r\n\r\n this.onBlurObservable.clear();\r\n this.onFocusObservable.clear();\r\n this.onTextChangedObservable.clear();\r\n this.onTextCopyObservable.clear();\r\n this.onTextCutObservable.clear();\r\n this.onTextPasteObservable.clear();\r\n this.onTextHighlightObservable.clear();\r\n this.onKeyboardEventProcessedObservable.clear();\r\n }\r\n}\r\nRegisterClass(\"BABYLON.GUI.InputText\", InputText);\r\n"]}
|
1
|
+
{"version":3,"file":"inputText.js","sourceRoot":"","sources":["../../../../../lts/gui/generated/2D/controls/inputText.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,2CAA6B;AAGlD,OAAO,EAAE,mBAAmB,EAAE,kDAAoC;AAElE,OAAO,EAAE,iBAAiB,EAAE,gDAAkC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,0CAA4B;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,2CAA6B;AAIjD;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,OAAO;IA+UlC;;;;OAIG;IACH,YAAmB,IAAa,EAAE,OAAe,EAAE;QAC/C,KAAK,CAAC,IAAI,CAAC,CAAC;QADG,SAAI,GAAJ,IAAI,CAAS;QAlVtB,qBAAgB,GAAG,EAAE,CAAC;QACtB,gBAAW,GAAG,SAAS,CAAC;QACxB,uBAAkB,GAAG,SAAS,CAAC;QAC/B,kBAAa,GAAG,OAAO,CAAC;QACxB,sBAAiB,GAAG,MAAM,CAAC;QAC3B,eAAU,GAAG,CAAC,CAAC;QACf,YAAO,GAAG,IAAI,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;QAC5D,sBAAiB,GAAG,IAAI,CAAC;QACzB,cAAS,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QACzE,eAAU,GAAG,KAAK,CAAC;QAInB,iBAAY,GAAG,KAAK,CAAC;QACvB,kBAAa,GAAG,CAAC,CAAC;QAIhB,aAAQ,GAAG,KAAK,CAAC;QACjB,YAAO,GAAG,IAAI,CAAC;QACf,gBAAW,GAAG,EAAE,CAAC;QACjB,uBAAkB,GAAG,KAAK,CAAC;QAC3B,wBAAmB,GAAG,SAAS,CAAC;QAChC,uBAAkB,GAAG,GAAG,CAAC;QACzB,qBAAgB,GAAG,EAAE,CAAC;QACxB,yBAAoB,GAAG,CAAC,CAAC;QACzB,uBAAkB,GAAG,CAAC,CAAC;QACvB,iBAAY,GAAG,CAAC,CAAC,CAAC;QAChB,sBAAiB,GAAG,KAAK,CAAC;QAC1B,mBAAc,GAAG,KAAK,CAAC;QAOjC,yGAAyG;QAElG,kBAAa,GAAG,oBAAoB,CAAC;QAC5C,4CAA4C;QAErC,wBAAmB,GAAG,KAAK,CAAC;QAEnC,8CAA8C;QACvC,4BAAuB,GAAG,IAAI,UAAU,EAAa,CAAC;QAC7D,wEAAwE;QACjE,6BAAwB,GAAG,IAAI,UAAU,EAAa,CAAC;QAC9D,wDAAwD;QACjD,sBAAiB,GAAG,IAAI,UAAU,EAAa,CAAC;QACvD,yDAAyD;QAClD,qBAAgB,GAAG,IAAI,UAAU,EAAa,CAAC;QACtD,oDAAoD;QAC7C,8BAAyB,GAAG,IAAI,UAAU,EAAa,CAAC;QAC/D,oDAAoD;QAC7C,yBAAoB,GAAG,IAAI,UAAU,EAAa,CAAC;QAC1D,oDAAoD;QAC7C,wBAAmB,GAAG,IAAI,UAAU,EAAa,CAAC;QACzD,sDAAsD;QAC/C,0BAAqB,GAAG,IAAI,UAAU,EAAa,CAAC;QAC3D,uDAAuD;QAChD,uCAAkC,GAAG,IAAI,UAAU,EAAkB,CAAC;QAyRzE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACjC,CAAC;IAzRD,4DAA4D;IAE5D,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,8DAA8D;IAC9D,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACvF,CAAC;IAED,IAAW,QAAQ,CAAC,KAAsB;QACtC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;YAC/C,OAAO;SACV;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YAClC,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;IACL,CAAC;IAED,mEAAmE;IAEnE,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED,IAAW,iBAAiB,CAAC,KAAa;QACtC,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE;YACnC,OAAO;SACV;QACD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IACD,kGAAkG;IAElG,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,IAAW,gBAAgB,CAAC,KAAc;QACtC,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE;YAClC,OAAO;SACV;QAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,6CAA6C;IAE7C,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED,IAAW,kBAAkB,CAAC,KAAa;QACvC,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK,EAAE;YACpC,OAAO;SACV;QACD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,kCAAkC;IAElC,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,oCAAoC;IACpC,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACrF,CAAC;IAED,IAAW,MAAM,CAAC,KAAa;QAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;YAC7C,OAAO;SACV;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YAChC,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;IACL,CAAC;IAED,uGAAuG;IAEvG,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,IAAW,gBAAgB,CAAC,KAAc;QACtC,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE;YAClC,OAAO;SACV;QAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,oCAAoC;IAEpC,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAW,SAAS,CAAC,KAAa;QAC9B,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE;YAC3B,OAAO;SACV;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,qDAAqD;IAErD,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED,IAAW,iBAAiB,CAAC,KAAa;QACtC,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE;YACnC,OAAO;SACV;QAED,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,qDAAqD;IAErD,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAW,YAAY,CAAC,KAAa;QACjC,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE;YAC9B,OAAO;SACV;QAED,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,wCAAwC;IAExC,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,UAAU,CAAC,KAAa;QAC/B,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;YAC5B,OAAO;SACV;QAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,yCAAyC;IAEzC,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,IAAW,gBAAgB,CAAC,KAAa;QACrC,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE;YAClC,OAAO;SACV;QAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,gEAAgE;IAEhE,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,IAAW,eAAe,CAAC,KAAa;QACpC,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE;YACjC,OAAO;SACV;QACD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,+CAA+C;IAE/C,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,OAAO,CAAC,IAAa;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,sCAAsC;IACtC,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IACD,IAAW,eAAe,CAAC,IAAY;QACnC,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE;YAChC,OAAO;SACV;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,sDAAsD;IACtD,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,MAAM,CAAC,IAAa;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,8DAA8D;IAC9D,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,UAAU,CAAC,GAAW;QAC7B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;IAC3B,CAAC;IAED,qDAAqD;IAErD,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAClC,CAAC;IAED,IAAW,IAAI,CAAC,KAAa;QACzB,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,qBAAqB;QAE7D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;SACzC;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,aAAa,EAAE;YAC1C,OAAO;SACV;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,aAAa,CAAC;QACvC,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC;IAES,eAAe;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,iCAAiC;IAEjC,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,IAAW,KAAK,CAAC,KAAsB;QACnC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;YAC5C,OAAO;SACV;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAClC,CAAC;IAcD,gBAAgB;IACT,MAAM;QACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjC,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,CAAC,yBAAyB,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;SACtE;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,wBAAwB,IAAI,KAAK,EAAE;YACxC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;SACnE;IACL,CAAC;IAED,gBAAgB;IACT,OAAO;QACV,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO;SACV;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAEzC,IAAI,KAAK,KAAK,IAAI,EAAE;gBAChB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;aACrB;YACD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;YACjC,OAAO;SACV;QAED,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAErC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;YAC/E,8CAA8C;YAC9C,QAAQ,aAAa,CAAC,IAAI,EAAE;gBACxB,KAAK,mBAAmB,CAAC,IAAI;oBACzB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBACtC,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;oBAChD,MAAM;gBACV,KAAK,mBAAmB,CAAC,GAAG;oBACxB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBACrC,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;oBAC/C,MAAM;gBACV,KAAK,mBAAmB,CAAC,KAAK;oBAC1B,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oBACvC,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;oBACjD,MAAM;gBACV;oBACI,OAAO;aACd;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,KAAK,EAAE;YACP,uCAAuC;YACvC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;gBAC1E,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;oBAClB,OAAO;iBACV;gBACD,IAAI,WAAW,CAAC,IAAI,KAAK,iBAAiB,CAAC,gBAAgB,EAAE;oBACzD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;iBACtC;YACL,CAAC,CAAC,CAAC;SACN;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,cAAc,EAAE,CAAC;SACzB;IACL,CAAC;IAED;;OAEG;IACI,KAAK;QACR,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,IAAI;QACP,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;IACrC,CAAC;IAES,YAAY;QAClB,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;;OAGG;IACI,cAAc;QACjB,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACjC,OAAO,IAAI,CAAC;SACf;QACD,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,OAAe,EAAE,GAAY,EAAE,GAAoB;;QACjE,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO;SACV;QAED,uDAAuD;QACvD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE,CAAC,EAAE;YAC7F,OAAO;SACV;QAED,YAAY;QACZ,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,EAAE,EAAE;YACvD,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,GAAG,CAAC,cAAc,EAAE,CAAC;YACrB,OAAO;SACV;QACD,iBAAiB;QACjB,QAAQ,OAAO,EAAE;YACb,KAAK,EAAE,EAAE,OAAO;gBACZ,GAAG,GAAG,GAAG,CAAC,CAAC,kCAAkC;gBAC7C,MAAM;YACV,KAAK,GAAG,EAAE,OAAO;gBACb,IAAI,GAAG,EAAE;oBACL,GAAG,CAAC,cAAc,EAAE,CAAC;iBACxB;gBACD,MAAM;YACV,KAAK,CAAC,EAAE,YAAY;gBAChB,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;oBACxD,6BAA6B;oBAC7B,IAAI,IAAI,CAAC,iBAAiB,EAAE;wBACxB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;wBACjF,IAAI,CAAC,eAAe,EAAE,CAAC;wBACvB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;wBAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;wBAC1E,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;wBAC1B,IAAI,GAAG,EAAE;4BACL,GAAG,CAAC,cAAc,EAAE,CAAC;yBACxB;wBACD,OAAO;qBACV;oBACD,yBAAyB;oBACzB,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,EAAE;wBAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;qBACzE;yBAAM;wBACH,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;wBACrE,IAAI,cAAc,GAAG,CAAC,EAAE;4BACpB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;4BACjE,IAAI,CAAC,eAAe,EAAE,CAAC;yBAC1B;qBACJ;iBACJ;gBACD,IAAI,GAAG,EAAE;oBACL,GAAG,CAAC,cAAc,EAAE,CAAC;iBACxB;gBACD,OAAO;YACX,KAAK,EAAE,EAAE,SAAS;gBACd,IAAI,IAAI,CAAC,iBAAiB,EAAE;oBACxB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;oBACjF,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;oBAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;oBAC1E,IAAI,GAAG,EAAE;wBACL,GAAG,CAAC,cAAc,EAAE,CAAC;qBACxB;oBACD,OAAO;iBACV;gBACD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;oBAClF,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;oBACrE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBACjE,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,IAAI,CAAC,aAAa,EAAE,CAAC;iBACxB;gBACD,IAAI,GAAG,EAAE;oBACL,GAAG,CAAC,cAAc,EAAE,CAAC;iBACxB;gBACD,OAAO;YACX,KAAK,EAAE,EAAE,SAAS;gBACd,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,OAAO;YACX,KAAK,EAAE,EAAE,MAAM;gBACX,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;gBACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;YACX,KAAK,EAAE,EAAE,OAAO;gBACZ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAC9C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;YACX,KAAK,EAAE,EAAE,OAAO;gBACZ,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;oBAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;iBACjD;gBAED,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE;oBACrB,oBAAoB;oBACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1B,wBAAwB;oBACxB,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE;wBAC5B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;4BACzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE;gCACjD,OAAO;6BACV;iCAAM;gCACH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;6BAC/E;yBACJ;wBACD,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;wBAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;wBACvE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;wBAC9C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;wBAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;wBACpB,OAAO;qBACV;oBACD,0BAA0B;oBAC1B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;wBACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;wBAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;qBAC1H;oBACD,gCAAgC;yBAC3B,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE;wBAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;wBACvE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;qBAC9I;oBACD,2BAA2B;oBAC3B,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;wBACxC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;wBACvE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;qBAC7E;yBAAM,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;wBAC/C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;wBACxE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;qBAC5E;yBAAM;wBACH,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;qBAClC;oBACD,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,OAAO;iBACV;gBACD,IAAI,IAAI,CAAC,iBAAiB,EAAE;oBACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;oBAC1E,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;iBAClC;gBACD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE;oBACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;oBAC9C,GAAG,CAAC,cAAc,EAAE,CAAC;iBACxB;gBACD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;YACX,KAAK,EAAE,EAAE,QAAQ;gBACb,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;oBACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;iBAC1B;gBACD,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE;oBACrB,mBAAmB;oBACnB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1B,uBAAuB;oBACvB,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE;wBAC5B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;4BACzB,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,EAAE;gCAC1B,OAAO;6BACV;iCAAM;gCACH,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;6BACjF;yBACJ;wBACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;wBACnD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;wBAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;wBACzE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;wBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;wBACpB,OAAO;qBACV;oBAED,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;wBACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;wBAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;qBAC5E;oBACD,gCAAgC;yBAC3B,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE;wBAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;wBACzE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;qBAC1I;oBACD,2BAA2B;oBAC3B,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;wBACxC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;wBACvE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;qBAC7E;yBAAM,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;wBAC/C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;wBACxE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;qBAC5E;yBAAM;wBACH,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;qBAClC;oBACD,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,OAAO;iBACV;gBACD,IAAI,IAAI,CAAC,iBAAiB,EAAE;oBACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;oBACxE,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;iBAClC;gBACD,UAAU;gBACV,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE;oBACrC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;oBACvB,GAAG,CAAC,cAAc,EAAE,CAAC;iBACxB;gBACD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;SACd;QACD,IAAI,OAAO,KAAK,EAAE,EAAE;YAChB,GAAG,GAAG,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,GAAG,mCAAI,GAAG,CAAC;SACzB;QACD,IAAI,CAAC,QAAQ,GAAG,GAAG,KAAK,MAAM,CAAC;QAC/B,uBAAuB;QACvB,IACI,GAAG;YACH,CAAC,OAAO,KAAK,CAAC,CAAC,IAAI,gBAAgB;gBAC/B,OAAO,KAAK,EAAE,IAAI,QAAQ;gBAC1B,OAAO,KAAK,EAAE,IAAI,gDAAgD;gBAClE,OAAO,KAAK,EAAE,IAAI,IAAI;gBACtB,CAAC,OAAO,GAAG,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC,IAAI,UAAU;gBAC5C,CAAC,OAAO,GAAG,EAAE,IAAI,OAAO,GAAG,EAAE,CAAC,IAAI,UAAU;gBAC5C,CAAC,OAAO,GAAG,GAAG,IAAI,OAAO,GAAG,GAAG,CAAC,IAAI,qBAAqB;gBACzD,CAAC,OAAO,GAAG,GAAG,IAAI,OAAO,GAAG,GAAG,CAAC,IAAI,qBAAqB;gBACzD,CAAC,OAAO,GAAG,EAAE,IAAI,OAAO,GAAG,GAAG,CAAC,CAAC,EACtC;YACE,SAAS;YACT,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,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChC,IAAI,IAAI,CAAC,iBAAiB,EAAE;oBACxB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;oBACtF,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC;oBAChF,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;oBAC/B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;iBACvB;qBAAM,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,EAAE;oBACjC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,GAAG,CAAA,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;iBAC1D;qBAAM;oBACH,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;oBACrE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;oBAClE,IAAI,CAAC,eAAe,EAAE,CAAC;iBAC1B;aACJ;SACJ;IACL,CAAC;IAED;;OAEG;IACO,2BAA2B,CAAC,MAAc;QAChD,mBAAmB;QACnB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE;YAC1B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;SAC9B;aAAM;YACH,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;gBACxC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;gBACvE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;aAC7E;iBAAM,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;gBAC/C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;gBACxE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;aAC5E;iBAAM;gBACH,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;gBAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,OAAO;aACV;SACJ;QACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IACD;;OAEG;IACH,6DAA6D;IACnD,gBAAgB,CAAC,GAAgB;QACvC,oFAAoF;QACpF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QAC1E,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACpD,IAAI,QAAQ,EAAE,SAAS,CAAC;QACxB,GAAG;YACC,SAAS,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;YACpJ,QAAQ,GAAG,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;SACzI,QAAQ,QAAQ,IAAI,SAAS,EAAE;QAEhC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAE1E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IACD,gBAAgB;IACN,cAAc;QACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAE9B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED;;;OAGG;IACI,eAAe,CAAC,GAAmB;QACtC,sBAAsB;QACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE3C,IAAI,CAAC,kCAAkC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACO,WAAW,CAAC,EAAkB;QACpC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,mDAAmD;QACnD,IAAI;YACA,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACrF;QAAC,WAAM,GAAE,CAAC,MAAM;QACjB,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACrD,CAAC;IACD;;OAEG;IACO,UAAU,CAAC,EAAkB;QACnC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,OAAO;SACV;QACD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACjF,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAC1E,mDAAmD;QACnD,IAAI;YACA,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACrF;QAAC,WAAM,GAAE,CAAC,MAAM;QAEjB,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC/B,CAAC;IACD;;OAEG;IACO,YAAY,CAAC,EAAkB;QACrC,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;YACzE,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;SACjD;aAAM;YACH,sDAAsD;YACtD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;SACnC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC;IAEM,KAAK,CAAC,OAAgC;QACzC,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;YAC7D,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YACvC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACrC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YAC3C,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;SAC9C;QAED,aAAa;QACb,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,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;aAClI;SACJ;aAAM,IAAI,IAAI,CAAC,WAAW,EAAE;YACzB,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;SAClI;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE;YAC7D,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;YACvB,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;YAC1B,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;SAC7B;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC3D;QAED,OAAO;QACP,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACzH,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;SAClC;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAErD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACtE,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAElC,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACxB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;aAC9C;SACJ;QAED,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChG,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC;YACvI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,gEAAgE;SAClG;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpG,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;QAE5G,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACpK,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,cAAc,EAAE;YACrD,MAAM,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC;YACjE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACnB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;aAC/B;SACJ;aAAM;YACH,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;SACnC;QAED,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;QAEhF,SAAS;QACT,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,sBAAsB;YACtB,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;gBACzD,MAAM,sBAAsB,GAAG,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACvE,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;gBACvB,IAAI,YAAY,GAAG,CAAC,CAAC;gBACrB,GAAG;oBACC,IAAI,IAAI,CAAC,aAAa,EAAE;wBACpB,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,WAAW,CAAC,CAAC;qBACjE;oBACD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;iBAC9G,QAAQ,WAAW,GAAG,sBAAsB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;gBAEpF,oBAAoB;gBACpB,IAAI,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,WAAW,CAAC,GAAG,YAAY,EAAE;oBAC/D,IAAI,CAAC,aAAa,EAAE,CAAC;iBACxB;gBAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;aAClC;YAED,gBAAgB;YAChB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACpB,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;gBACvE,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC;gBACtE,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC;gBAExE,IAAI,UAAU,GAAG,YAAY,EAAE;oBAC3B,IAAI,CAAC,WAAW,IAAI,YAAY,GAAG,UAAU,CAAC;oBAC9C,UAAU,GAAG,YAAY,CAAC;oBAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;iBACvB;qBAAM,IAAI,UAAU,GAAG,YAAY,GAAG,cAAc,EAAE;oBACnD,IAAI,CAAC,WAAW,IAAI,YAAY,GAAG,cAAc,GAAG,UAAU,CAAC;oBAC/D,UAAU,GAAG,YAAY,GAAG,cAAc,CAAC;oBAC3C,IAAI,CAAC,YAAY,EAAE,CAAC;iBACvB;gBACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;oBACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;iBACpJ;aACJ;YAED,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,aAAa,GAAQ,UAAU,CAAC,GAAG,EAAE;gBACtC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;gBACvC,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC,EAAE,GAAG,CAAC,CAAC;YAER,2BAA2B;YAC3B,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACxB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACjC,MAAM,0BAA0B,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC;gBACxG,IAAI,mBAAmB,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,0BAA0B,CAAC;gBAC1F,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAC3F,IAAI,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC1G,IAAI,mBAAmB,GAAG,YAAY,EAAE;oBACpC,KAAK,GAAG,KAAK,GAAG,CAAC,YAAY,GAAG,mBAAmB,CAAC,CAAC;oBACrD,IAAI,CAAC,KAAK,EAAE;wBACR,yDAAyD;wBACzD,2DAA2D;wBAC3D,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;qBACpF;oBACD,mBAAmB,GAAG,YAAY,CAAC;iBACtC;gBACD,kBAAkB;gBAClB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC9C,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC;gBAC7C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC9J,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC;aAC7B;SACJ;QACD,OAAO,CAAC,OAAO,EAAE,CAAC;QAElB,SAAS;QACT,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,IAAI,CAAC,YAAY,EAAE;oBACnB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;iBAC3C;aACJ;iBAAM;gBACH,IAAI,IAAI,CAAC,KAAK,EAAE;oBACZ,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;iBACpC;aACJ;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;SACL;QAED,OAAO,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;IAEM,cAAc,CAAC,MAAe,EAAE,WAAoB,EAAE,SAAiB,EAAE,WAAmB,EAAE,EAAmB;QACpH,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,EAAE;YACxE,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO,IAAI,CAAC;SACf;QAED,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAC/C,IAAI,CAAC,UAAU,GAAI,EAAE,CAAC,KAAuB,CAAC,WAAW,CAAC;QAC1D,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,EAAE;YACpC,cAAc;YACd,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;SACf;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QAEjC,OAAO,IAAI,CAAC;IAChB,CAAC;IACM,cAAc,CAAC,MAAe,EAAE,WAAoB,EAAE,SAAiB,EAAE,EAAmB;QAC/F,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC/E,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACxD;QACD,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAEM,YAAY,CAAC,MAAe,EAAE,WAAoB,EAAE,SAAiB,EAAE,WAAmB,EAAE,WAAoB;QACnH,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC/C,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACjF,CAAC;IAES,iBAAiB,CAAC,WAAwB;QAChD,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,gBAAgB;IAChB,IAAY,iBAAiB,CAAC,KAAc;QACxC,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE;YACnC,OAAO;SACV;QACD,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SACxD;QACD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IACpC,CAAC;IAED,gBAAgB;IAChB,IAAY,iBAAiB;QACzB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAEM,OAAO;QACV,KAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,kCAAkC,CAAC,KAAK,EAAE,CAAC;IACpD,CAAC;CACJ;AAxhCG;IADC,SAAS,EAAE;gDACgC;AAG5C;IADC,SAAS,EAAE;sDACuB;AAuBnC;IADC,SAAS,EAAE;yCAGX;AAmBD;IADC,SAAS,EAAE;kDAGX;AAWD;IADC,SAAS,EAAE;iDAGX;AAaD;IADC,SAAS,EAAE;mDAGX;AAYD;IADC,SAAS,EAAE;uCAGX;AAmBD;IADC,SAAS,EAAE;iDAGX;AAaD;IADC,SAAS,EAAE;0CAGX;AAaD;IADC,SAAS,EAAE;kDAGX;AAaD;IADC,SAAS,EAAE;6CAGX;AAaD;IADC,SAAS,EAAE;2CAGX;AAaD;IADC,SAAS,EAAE;iDAGX;AAaD;IADC,SAAS,EAAE;gDAGX;AAYD;IADC,SAAS,EAAE;wCAGX;AAsCD;IADC,SAAS,EAAE;qCAGX;AAuBD;IADC,SAAS,EAAE;sCAGX;AAgwBL,aAAa,CAAC,uBAAuB,EAAE,SAAS,CAAC,CAAC","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { Vector2 } from \"core/Maths/math.vector\";\r\nimport type { ClipboardInfo } from \"core/Events/clipboardEvents\";\r\nimport { ClipboardEventTypes } from \"core/Events/clipboardEvents\";\r\nimport type { PointerInfo, PointerInfoBase } from \"core/Events/pointerEvents\";\r\nimport { PointerEventTypes } from \"core/Events/pointerEvents\";\r\n\r\nimport { Control } from \"./control\";\r\nimport type { IFocusableControl } from \"./focusableControl\";\r\nimport { ValueAndUnit } from \"../valueAndUnit\";\r\nimport type { VirtualKeyboard } from \"./virtualKeyboard\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { TextWrapper } from \"./textWrapper\";\r\nimport { serialize } from \"core/Misc/decorators\";\r\nimport type { IKeyboardEvent, IPointerEvent } from \"core/Events/deviceInputEvents\";\r\nimport type { ICanvasRenderingContext } from \"core/Engines/ICanvas\";\r\n\r\n/**\r\n * Class used to create input text control\r\n */\r\nexport class InputText extends Control implements IFocusableControl {\r\n protected _textWrapper: TextWrapper;\r\n protected _placeholderText = \"\";\r\n protected _background = \"#222222\";\r\n protected _focusedBackground = \"#000000\";\r\n protected _focusedColor = \"white\";\r\n protected _placeholderColor = \"gray\";\r\n protected _thickness = 1;\r\n protected _margin = new ValueAndUnit(10, ValueAndUnit.UNITMODE_PIXEL);\r\n protected _autoStretchWidth = true;\r\n protected _maxWidth = new ValueAndUnit(1, ValueAndUnit.UNITMODE_PERCENTAGE, false);\r\n protected _isFocused = false;\r\n /** the type of device that most recently focused the input: \"mouse\", \"touch\" or \"pen\" */\r\n protected _focusedBy: string;\r\n protected _blinkTimeout: number;\r\n protected _blinkIsEven = false;\r\n private _cursorOffset = 0;\r\n protected _scrollLeft: Nullable<number>;\r\n protected _textWidth: number;\r\n protected _clickedCoordinate: Nullable<number>;\r\n protected _deadKey = false;\r\n protected _addKey = true;\r\n protected _currentKey = \"\";\r\n protected _isTextHighlightOn = false;\r\n protected _textHighlightColor = \"#d5e0ff\";\r\n protected _highligherOpacity = 0.4;\r\n protected _highlightedText = \"\";\r\n private _startHighlightIndex = 0;\r\n private _endHighlightIndex = 0;\r\n private _cursorIndex = -1;\r\n protected _onFocusSelectAll = false;\r\n protected _isPointerDown = false;\r\n protected _onClipboardObserver: Nullable<Observer<ClipboardInfo>>;\r\n protected _onPointerDblTapObserver: Nullable<Observer<PointerInfo>>;\r\n\r\n /** @internal */\r\n public _connectedVirtualKeyboard: Nullable<VirtualKeyboard>;\r\n\r\n /** Gets or sets a string representing the message displayed on mobile when the control gets the focus */\r\n @serialize()\r\n public promptMessage = \"Please enter text:\";\r\n /** Force disable prompt on mobile device */\r\n @serialize()\r\n public disableMobilePrompt = false;\r\n\r\n /** Observable raised when the text changes */\r\n public onTextChangedObservable = new Observable<InputText>();\r\n /** Observable raised just before an entered character is to be added */\r\n public onBeforeKeyAddObservable = new Observable<InputText>();\r\n /** Observable raised when the control gets the focus */\r\n public onFocusObservable = new Observable<InputText>();\r\n /** Observable raised when the control loses the focus */\r\n public onBlurObservable = new Observable<InputText>();\r\n /**Observable raised when the text is highlighted */\r\n public onTextHighlightObservable = new Observable<InputText>();\r\n /**Observable raised when copy event is triggered */\r\n public onTextCopyObservable = new Observable<InputText>();\r\n /** Observable raised when cut event is triggered */\r\n public onTextCutObservable = new Observable<InputText>();\r\n /** Observable raised when paste event is triggered */\r\n public onTextPasteObservable = new Observable<InputText>();\r\n /** Observable raised when a key event was processed */\r\n public onKeyboardEventProcessedObservable = new Observable<IKeyboardEvent>();\r\n\r\n /** Gets or sets the maximum width allowed by the control */\r\n @serialize()\r\n public get maxWidth(): string | number {\r\n return this._maxWidth.toString(this._host);\r\n }\r\n\r\n /** Gets the maximum width allowed by the control in pixels */\r\n public get maxWidthInPixels(): number {\r\n return this._maxWidth.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n }\r\n\r\n public set maxWidth(value: string | number) {\r\n if (this._maxWidth.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._maxWidth.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets the text highlighter transparency; default: 0.4 */\r\n @serialize()\r\n public get highligherOpacity(): number {\r\n return this._highligherOpacity;\r\n }\r\n\r\n public set highligherOpacity(value: number) {\r\n if (this._highligherOpacity === value) {\r\n return;\r\n }\r\n this._highligherOpacity = value;\r\n this._markAsDirty();\r\n }\r\n /** Gets or sets a boolean indicating whether to select complete text by default on input focus */\r\n @serialize()\r\n public get onFocusSelectAll(): boolean {\r\n return this._onFocusSelectAll;\r\n }\r\n\r\n public set onFocusSelectAll(value: boolean) {\r\n if (this._onFocusSelectAll === value) {\r\n return;\r\n }\r\n\r\n this._onFocusSelectAll = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the text hightlight color */\r\n @serialize()\r\n public get textHighlightColor(): string {\r\n return this._textHighlightColor;\r\n }\r\n\r\n public set textHighlightColor(value: string) {\r\n if (this._textHighlightColor === value) {\r\n return;\r\n }\r\n this._textHighlightColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets control margin */\r\n @serialize()\r\n public get margin(): string {\r\n return this._margin.toString(this._host);\r\n }\r\n\r\n /** Gets control margin in pixels */\r\n public get marginInPixels(): number {\r\n return this._margin.getValueInPixel(this._host, this._cachedParentMeasure.width);\r\n }\r\n\r\n public set margin(value: string) {\r\n if (this._margin.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._margin.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the control can auto stretch its width to adapt to the text */\r\n @serialize()\r\n public get autoStretchWidth(): boolean {\r\n return this._autoStretchWidth;\r\n }\r\n\r\n public set autoStretchWidth(value: boolean) {\r\n if (this._autoStretchWidth === value) {\r\n return;\r\n }\r\n\r\n this._autoStretchWidth = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets border thickness */\r\n @serialize()\r\n public get thickness(): number {\r\n return this._thickness;\r\n }\r\n\r\n public set thickness(value: number) {\r\n if (this._thickness === value) {\r\n return;\r\n }\r\n\r\n this._thickness = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the background color when focused */\r\n @serialize()\r\n public get focusedBackground(): string {\r\n return this._focusedBackground;\r\n }\r\n\r\n public set focusedBackground(value: string) {\r\n if (this._focusedBackground === value) {\r\n return;\r\n }\r\n\r\n this._focusedBackground = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the background color when focused */\r\n @serialize()\r\n public get focusedColor(): string {\r\n return this._focusedColor;\r\n }\r\n\r\n public set focusedColor(value: string) {\r\n if (this._focusedColor === value) {\r\n return;\r\n }\r\n\r\n this._focusedColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the background color */\r\n @serialize()\r\n public get background(): string {\r\n return this._background;\r\n }\r\n\r\n public set background(value: string) {\r\n if (this._background === value) {\r\n return;\r\n }\r\n\r\n this._background = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the placeholder color */\r\n @serialize()\r\n public get placeholderColor(): string {\r\n return this._placeholderColor;\r\n }\r\n\r\n public set placeholderColor(value: string) {\r\n if (this._placeholderColor === value) {\r\n return;\r\n }\r\n\r\n this._placeholderColor = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the text displayed when the control is empty */\r\n @serialize()\r\n public get placeholderText(): string {\r\n return this._placeholderText;\r\n }\r\n\r\n public set placeholderText(value: string) {\r\n if (this._placeholderText === value) {\r\n return;\r\n }\r\n this._placeholderText = value;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets the dead key. 0 to disable. */\r\n @serialize()\r\n public get deadKey(): boolean {\r\n return this._deadKey;\r\n }\r\n\r\n public set deadKey(flag: boolean) {\r\n this._deadKey = flag;\r\n }\r\n\r\n /** Gets or sets the highlight text */\r\n public get highlightedText(): string {\r\n return this._highlightedText;\r\n }\r\n public set highlightedText(text: string) {\r\n if (this._highlightedText === text) {\r\n return;\r\n }\r\n this._highlightedText = text;\r\n this._markAsDirty();\r\n }\r\n\r\n /** Gets or sets if the current key should be added */\r\n public get addKey(): boolean {\r\n return this._addKey;\r\n }\r\n\r\n public set addKey(flag: boolean) {\r\n this._addKey = flag;\r\n }\r\n\r\n /** Gets or sets the value of the current key being entered */\r\n public get currentKey(): string {\r\n return this._currentKey;\r\n }\r\n\r\n public set currentKey(key: string) {\r\n this._currentKey = key;\r\n }\r\n\r\n /** Gets or sets the text displayed in the control */\r\n @serialize()\r\n public get text(): string {\r\n return this._textWrapper.text;\r\n }\r\n\r\n public set text(value: string) {\r\n const valueAsString = value.toString(); // Forcing convertion\r\n\r\n if (!this._textWrapper) {\r\n this._textWrapper = new TextWrapper();\r\n }\r\n\r\n if (this._textWrapper.text === valueAsString) {\r\n return;\r\n }\r\n this._textWrapper.text = valueAsString;\r\n this._textHasChanged();\r\n }\r\n\r\n protected _textHasChanged(): void {\r\n this._markAsDirty();\r\n this.onTextChangedObservable.notifyObservers(this);\r\n }\r\n\r\n /** Gets or sets control width */\r\n @serialize()\r\n public get width(): string | number {\r\n return this._width.toString(this._host);\r\n }\r\n\r\n public set width(value: string | number) {\r\n if (this._width.toString(this._host) === value) {\r\n return;\r\n }\r\n\r\n if (this._width.fromString(value)) {\r\n this._markAsDirty();\r\n }\r\n\r\n this.autoStretchWidth = false;\r\n }\r\n\r\n /**\r\n * Creates a new InputText\r\n * @param name defines the control name\r\n * @param text defines the text of the control\r\n */\r\n constructor(public name?: string, text: string = \"\") {\r\n super(name);\r\n\r\n this.text = text;\r\n this.isPointerBlocker = true;\r\n }\r\n\r\n /** @internal */\r\n public onBlur(): void {\r\n this._isFocused = false;\r\n this._scrollLeft = null;\r\n this._cursorOffset = 0;\r\n clearTimeout(this._blinkTimeout);\r\n this._markAsDirty();\r\n\r\n this.onBlurObservable.notifyObservers(this);\r\n\r\n this._host.unRegisterClipboardEvents();\r\n if (this._onClipboardObserver) {\r\n this._host.onClipboardObservable.remove(this._onClipboardObserver);\r\n }\r\n const scene = this._host.getScene();\r\n if (this._onPointerDblTapObserver && scene) {\r\n scene.onPointerObservable.remove(this._onPointerDblTapObserver);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public onFocus(): void {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n this._scrollLeft = null;\r\n this._isFocused = true;\r\n this._blinkIsEven = false;\r\n this._cursorOffset = 0;\r\n this._markAsDirty();\r\n\r\n this.onFocusObservable.notifyObservers(this);\r\n\r\n if (this._focusedBy === \"touch\" && !this.disableMobilePrompt) {\r\n const value = prompt(this.promptMessage);\r\n\r\n if (value !== null) {\r\n this.text = value;\r\n }\r\n this._host.focusedControl = null;\r\n return;\r\n }\r\n\r\n this._host.registerClipboardEvents();\r\n\r\n this._onClipboardObserver = this._host.onClipboardObservable.add((clipboardInfo) => {\r\n // process clipboard event, can be configured.\r\n switch (clipboardInfo.type) {\r\n case ClipboardEventTypes.COPY:\r\n this._onCopyText(clipboardInfo.event);\r\n this.onTextCopyObservable.notifyObservers(this);\r\n break;\r\n case ClipboardEventTypes.CUT:\r\n this._onCutText(clipboardInfo.event);\r\n this.onTextCutObservable.notifyObservers(this);\r\n break;\r\n case ClipboardEventTypes.PASTE:\r\n this._onPasteText(clipboardInfo.event);\r\n this.onTextPasteObservable.notifyObservers(this);\r\n break;\r\n default:\r\n return;\r\n }\r\n });\r\n\r\n const scene = this._host.getScene();\r\n if (scene) {\r\n //register the pointer double tap event\r\n this._onPointerDblTapObserver = scene.onPointerObservable.add((pointerInfo) => {\r\n if (!this._isFocused) {\r\n return;\r\n }\r\n if (pointerInfo.type === PointerEventTypes.POINTERDOUBLETAP) {\r\n this._processDblClick(pointerInfo);\r\n }\r\n });\r\n }\r\n\r\n if (this._onFocusSelectAll) {\r\n this._selectAllText();\r\n }\r\n }\r\n\r\n /**\r\n * Function to focus an inputText programmatically\r\n */\r\n public focus() {\r\n this._host.moveFocusToControl(this);\r\n }\r\n\r\n /**\r\n * Function to unfocus an inputText programmatically\r\n */\r\n public blur() {\r\n this._host.focusedControl = null;\r\n }\r\n\r\n protected _getTypeName(): string {\r\n return \"InputText\";\r\n }\r\n\r\n /**\r\n * Function called to get the list of controls that should not steal the focus from this control\r\n * @returns an array of controls\r\n */\r\n public keepsFocusWith(): Nullable<Control[]> {\r\n if (!this._connectedVirtualKeyboard) {\r\n return null;\r\n }\r\n return [this._connectedVirtualKeyboard];\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public processKey(keyCode: number, key?: string, evt?: IKeyboardEvent) {\r\n if (this.isReadOnly) {\r\n return;\r\n }\r\n\r\n //return if clipboard event keys (i.e -ctr/cmd + c,v,x)\r\n if (evt && (evt.ctrlKey || evt.metaKey) && (keyCode === 67 || keyCode === 86 || keyCode === 88)) {\r\n return;\r\n }\r\n\r\n //select all\r\n if (evt && (evt.ctrlKey || evt.metaKey) && keyCode === 65) {\r\n this._selectAllText();\r\n evt.preventDefault();\r\n return;\r\n }\r\n // Specific cases\r\n switch (keyCode) {\r\n case 32: //SPACE\r\n key = \" \"; //ie11 key for space is \"Spacebar\"\r\n break;\r\n case 191: //SLASH\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n break;\r\n case 8: // BACKSPACE\r\n if (this._textWrapper.text && this._textWrapper.length > 0) {\r\n //delete the highlighted text\r\n if (this.isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\r\n this._textHasChanged();\r\n this.isTextHighlightOn = false;\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n this._blinkIsEven = false;\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n }\r\n //delete single character\r\n if (this._cursorOffset === 0) {\r\n this.text = this._textWrapper.substr(0, this._textWrapper.length - 1);\r\n } else {\r\n const deletePosition = this._textWrapper.length - this._cursorOffset;\r\n if (deletePosition > 0) {\r\n this._textWrapper.removePart(deletePosition - 1, deletePosition);\r\n this._textHasChanged();\r\n }\r\n }\r\n }\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n case 46: // DELETE\r\n if (this.isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\r\n this._textHasChanged();\r\n this.isTextHighlightOn = false;\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n }\r\n if (this._textWrapper.text && this._textWrapper.length > 0 && this._cursorOffset > 0) {\r\n const deletePosition = this._textWrapper.length - this._cursorOffset;\r\n this._textWrapper.removePart(deletePosition, deletePosition + 1);\r\n this._textHasChanged();\r\n this._cursorOffset--;\r\n }\r\n if (evt) {\r\n evt.preventDefault();\r\n }\r\n return;\r\n case 13: // RETURN\r\n this._host.focusedControl = null;\r\n this.isTextHighlightOn = false;\r\n return;\r\n case 35: // END\r\n this._cursorOffset = 0;\r\n this._blinkIsEven = false;\r\n this.isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n case 36: // HOME\r\n this._cursorOffset = this._textWrapper.length;\r\n this._blinkIsEven = false;\r\n this.isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n case 37: // LEFT\r\n this._cursorOffset++;\r\n if (this._cursorOffset > this._textWrapper.length) {\r\n this._cursorOffset = this._textWrapper.length;\r\n }\r\n\r\n if (evt && evt.shiftKey) {\r\n // update the cursor\r\n this._blinkIsEven = false;\r\n // shift + ctrl/cmd + <-\r\n if (evt.ctrlKey || evt.metaKey) {\r\n if (!this.isTextHighlightOn) {\r\n if (this._textWrapper.length === this._cursorOffset) {\r\n return;\r\n } else {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset + 1;\r\n }\r\n }\r\n this._startHighlightIndex = 0;\r\n this._cursorIndex = this._textWrapper.length - this._endHighlightIndex;\r\n this._cursorOffset = this._textWrapper.length;\r\n this.isTextHighlightOn = true;\r\n this._markAsDirty();\r\n return;\r\n }\r\n //store the starting point\r\n if (!this.isTextHighlightOn) {\r\n this.isTextHighlightOn = true;\r\n this._cursorIndex = this._cursorOffset >= this._textWrapper.length ? this._textWrapper.length : this._cursorOffset - 1;\r\n }\r\n //if text is already highlighted\r\n else if (this._cursorIndex === -1) {\r\n this._cursorIndex = this._textWrapper.length - this._endHighlightIndex;\r\n this._cursorOffset = this._startHighlightIndex === 0 ? this._textWrapper.length : this._textWrapper.length - this._startHighlightIndex + 1;\r\n }\r\n //set the highlight indexes\r\n if (this._cursorIndex < this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n } else if (this._cursorIndex > this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n } else {\r\n this.isTextHighlightOn = false;\r\n }\r\n this._markAsDirty();\r\n return;\r\n }\r\n if (this.isTextHighlightOn) {\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n this.isTextHighlightOn = false;\r\n }\r\n if (evt && (evt.ctrlKey || evt.metaKey)) {\r\n this._cursorOffset = this._textWrapper.length;\r\n evt.preventDefault();\r\n }\r\n this._blinkIsEven = false;\r\n this.isTextHighlightOn = false;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n return;\r\n case 39: // RIGHT\r\n this._cursorOffset--;\r\n if (this._cursorOffset < 0) {\r\n this._cursorOffset = 0;\r\n }\r\n if (evt && evt.shiftKey) {\r\n //update the cursor\r\n this._blinkIsEven = false;\r\n //shift + ctrl/cmd + ->\r\n if (evt.ctrlKey || evt.metaKey) {\r\n if (!this.isTextHighlightOn) {\r\n if (this._cursorOffset === 0) {\r\n return;\r\n } else {\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset - 1;\r\n }\r\n }\r\n this._endHighlightIndex = this._textWrapper.length;\r\n this.isTextHighlightOn = true;\r\n this._cursorIndex = this._textWrapper.length - this._startHighlightIndex;\r\n this._cursorOffset = 0;\r\n this._markAsDirty();\r\n return;\r\n }\r\n\r\n if (!this.isTextHighlightOn) {\r\n this.isTextHighlightOn = true;\r\n this._cursorIndex = this._cursorOffset <= 0 ? 0 : this._cursorOffset + 1;\r\n }\r\n //if text is already highlighted\r\n else if (this._cursorIndex === -1) {\r\n this._cursorIndex = this._textWrapper.length - this._startHighlightIndex;\r\n this._cursorOffset = this._textWrapper.length === this._endHighlightIndex ? 0 : this._textWrapper.length - this._endHighlightIndex - 1;\r\n }\r\n //set the highlight indexes\r\n if (this._cursorIndex < this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n } else if (this._cursorIndex > this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n } else {\r\n this.isTextHighlightOn = false;\r\n }\r\n this._markAsDirty();\r\n return;\r\n }\r\n if (this.isTextHighlightOn) {\r\n this._cursorOffset = this._textWrapper.length - this._endHighlightIndex;\r\n this.isTextHighlightOn = false;\r\n }\r\n //ctr + ->\r\n if (evt && (evt.ctrlKey || evt.metaKey)) {\r\n this._cursorOffset = 0;\r\n evt.preventDefault();\r\n }\r\n this._blinkIsEven = false;\r\n this.isTextHighlightOn = false;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n return;\r\n }\r\n if (keyCode === 32) {\r\n key = evt?.key ?? \" \";\r\n }\r\n this._deadKey = key === \"Dead\";\r\n // Printable characters\r\n if (\r\n key &&\r\n (keyCode === -1 || // Direct access\r\n keyCode === 32 || // Space\r\n keyCode === 34 || // \" add support for single and double quotes\r\n keyCode === 39 || // '\r\n (keyCode > 47 && keyCode < 64) || // Numbers\r\n (keyCode > 64 && keyCode < 91) || // Letters\r\n (keyCode > 159 && keyCode < 193) || // Special characters\r\n (keyCode > 218 && keyCode < 223) || // Special characters\r\n (keyCode > 95 && keyCode < 112))\r\n ) {\r\n // Numpad\r\n this._currentKey = key;\r\n this.onBeforeKeyAddObservable.notifyObservers(this);\r\n key = this._currentKey;\r\n if (this._addKey && !this._deadKey) {\r\n if (this.isTextHighlightOn) {\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex, key);\r\n this._textHasChanged();\r\n this._cursorOffset = this._textWrapper.length - (this._startHighlightIndex + 1);\r\n this.isTextHighlightOn = false;\r\n this._blinkIsEven = false;\r\n this._markAsDirty();\r\n } else if (this._cursorOffset === 0) {\r\n this.text += this._deadKey && evt?.key ? evt.key : key;\r\n } else {\r\n const insertPosition = this._textWrapper.length - this._cursorOffset;\r\n this._textWrapper.removePart(insertPosition, insertPosition, key);\r\n this._textHasChanged();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _updateValueFromCursorIndex(offset: number) {\r\n //update the cursor\r\n this._blinkIsEven = false;\r\n\r\n if (this._cursorIndex === -1) {\r\n this._cursorIndex = offset;\r\n } else {\r\n if (this._cursorIndex < this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n } else if (this._cursorIndex > this._cursorOffset) {\r\n this._endHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorIndex;\r\n } else {\r\n this.isTextHighlightOn = false;\r\n this._markAsDirty();\r\n return;\r\n }\r\n }\r\n this.isTextHighlightOn = true;\r\n this._markAsDirty();\r\n }\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _processDblClick(evt: PointerInfo) {\r\n //pre-find the start and end index of the word under cursor, speeds up the rendering\r\n this._startHighlightIndex = this._textWrapper.length - this._cursorOffset;\r\n this._endHighlightIndex = this._startHighlightIndex;\r\n let moveLeft, moveRight;\r\n do {\r\n moveRight = this._endHighlightIndex < this._textWrapper.length && this._textWrapper.isWord(this._endHighlightIndex) ? ++this._endHighlightIndex : 0;\r\n moveLeft = this._startHighlightIndex > 0 && this._textWrapper.isWord(this._startHighlightIndex - 1) ? --this._startHighlightIndex : 0;\r\n } while (moveLeft || moveRight);\r\n\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\r\n\r\n this.isTextHighlightOn = true;\r\n this._clickedCoordinate = null;\r\n this._blinkIsEven = true;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n }\r\n /** @internal */\r\n protected _selectAllText() {\r\n this._blinkIsEven = true;\r\n this.isTextHighlightOn = true;\r\n\r\n this._startHighlightIndex = 0;\r\n this._endHighlightIndex = this._textWrapper.length;\r\n this._cursorOffset = this._textWrapper.length;\r\n this._cursorIndex = -1;\r\n this._markAsDirty();\r\n }\r\n\r\n /**\r\n * Handles the keyboard event\r\n * @param evt Defines the KeyboardEvent\r\n */\r\n public processKeyboard(evt: IKeyboardEvent): void {\r\n // process pressed key\r\n this.processKey(evt.keyCode, evt.key, evt);\r\n\r\n this.onKeyboardEventProcessedObservable.notifyObservers(evt);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n protected _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 * @internal\r\n */\r\n protected _onCutText(ev: ClipboardEvent): void {\r\n if (!this._highlightedText) {\r\n return;\r\n }\r\n this._textWrapper.removePart(this._startHighlightIndex, this._endHighlightIndex);\r\n this._textHasChanged();\r\n this.isTextHighlightOn = false;\r\n this._cursorOffset = this._textWrapper.length - this._startHighlightIndex;\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._highlightedText = \"\";\r\n }\r\n /**\r\n * @internal\r\n */\r\n protected _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 const insertPosition = this._textWrapper.length - this._cursorOffset;\r\n this._textWrapper.removePart(insertPosition, insertPosition, data);\r\n this._textHasChanged();\r\n }\r\n\r\n public _draw(context: ICanvasRenderingContext): void {\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 if (!this._fontOffset || this._wasDirty) {\r\n this._fontOffset = Control._GetFontOffset(context.font);\r\n }\r\n\r\n // Text\r\n const clipTextLeft = this._currentMeasure.left + this._margin.getValueInPixel(this._host, this._tempParentMeasure.width);\r\n if (this.color) {\r\n context.fillStyle = this.color;\r\n }\r\n\r\n let text = this._beforeRenderText(this._textWrapper);\r\n\r\n if (!this._isFocused && !this._textWrapper.text && this._placeholderText) {\r\n text = new TextWrapper();\r\n text.text = this._placeholderText;\r\n\r\n if (this._placeholderColor) {\r\n context.fillStyle = this._placeholderColor;\r\n }\r\n }\r\n\r\n this._textWidth = context.measureText(text.text).width;\r\n const marginWidth = this._margin.getValueInPixel(this._host, this._tempParentMeasure.width) * 2;\r\n if (this._autoStretchWidth) {\r\n this.width = Math.min(this._maxWidth.getValueInPixel(this._host, this._tempParentMeasure.width), this._textWidth + marginWidth) + \"px\";\r\n this._autoStretchWidth = true; // setting the width will have reset _autoStretchWidth to false!\r\n }\r\n\r\n const rootY = this._fontOffset.ascent + (this._currentMeasure.height - this._fontOffset.height) / 2;\r\n const availableWidth = this._width.getValueInPixel(this._host, this._tempParentMeasure.width) - marginWidth;\r\n\r\n context.save();\r\n context.beginPath();\r\n context.rect(clipTextLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, availableWidth + 2, this._currentMeasure.height);\r\n context.clip();\r\n\r\n if (this._isFocused && this._textWidth > availableWidth) {\r\n const textLeft = clipTextLeft - this._textWidth + availableWidth;\r\n if (!this._scrollLeft) {\r\n this._scrollLeft = textLeft;\r\n }\r\n } else {\r\n this._scrollLeft = clipTextLeft;\r\n }\r\n\r\n context.fillText(text.text, this._scrollLeft, this._currentMeasure.top + rootY);\r\n\r\n // Cursor\r\n if (this._isFocused) {\r\n // Need to move cursor\r\n if (this._clickedCoordinate) {\r\n const rightPosition = this._scrollLeft + this._textWidth;\r\n const absoluteCursorPosition = rightPosition - this._clickedCoordinate;\r\n let currentSize = 0;\r\n this._cursorOffset = 0;\r\n let previousDist = 0;\r\n do {\r\n if (this._cursorOffset) {\r\n previousDist = Math.abs(absoluteCursorPosition - currentSize);\r\n }\r\n this._cursorOffset++;\r\n currentSize = context.measureText(text.substr(text.length - this._cursorOffset, this._cursorOffset)).width;\r\n } while (currentSize < absoluteCursorPosition && text.length >= this._cursorOffset);\r\n\r\n // Find closest move\r\n if (Math.abs(absoluteCursorPosition - currentSize) > previousDist) {\r\n this._cursorOffset--;\r\n }\r\n\r\n this._blinkIsEven = false;\r\n this._clickedCoordinate = null;\r\n }\r\n\r\n // Render cursor\r\n if (!this._blinkIsEven) {\r\n const cursorOffsetText = text.substr(text.length - this._cursorOffset);\r\n const cursorOffsetWidth = context.measureText(cursorOffsetText).width;\r\n let cursorLeft = this._scrollLeft + this._textWidth - cursorOffsetWidth;\r\n\r\n if (cursorLeft < clipTextLeft) {\r\n this._scrollLeft += clipTextLeft - cursorLeft;\r\n cursorLeft = clipTextLeft;\r\n this._markAsDirty();\r\n } else if (cursorLeft > clipTextLeft + availableWidth) {\r\n this._scrollLeft += clipTextLeft + availableWidth - cursorLeft;\r\n cursorLeft = clipTextLeft + availableWidth;\r\n this._markAsDirty();\r\n }\r\n if (!this.isTextHighlightOn) {\r\n context.fillRect(cursorLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, 2, this._fontOffset.height);\r\n }\r\n }\r\n\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 //show the highlighted text\r\n if (this.isTextHighlightOn) {\r\n clearTimeout(this._blinkTimeout);\r\n const highlightCursorOffsetWidth = context.measureText(text.substring(this._startHighlightIndex)).width;\r\n let highlightCursorLeft = this._scrollLeft + this._textWidth - highlightCursorOffsetWidth;\r\n this._highlightedText = text.substring(this._startHighlightIndex, this._endHighlightIndex);\r\n let width = context.measureText(text.substring(this._startHighlightIndex, this._endHighlightIndex)).width;\r\n if (highlightCursorLeft < clipTextLeft) {\r\n width = width - (clipTextLeft - highlightCursorLeft);\r\n if (!width) {\r\n // when using left arrow on text.length > availableWidth;\r\n // assigns the width of the first letter after clipTextLeft\r\n width = context.measureText(text.charAt(text.length - this._cursorOffset)).width;\r\n }\r\n highlightCursorLeft = clipTextLeft;\r\n }\r\n //for transparancy\r\n context.globalAlpha = this._highligherOpacity;\r\n context.fillStyle = this._textHighlightColor;\r\n context.fillRect(highlightCursorLeft, this._currentMeasure.top + (this._currentMeasure.height - this._fontOffset.height) / 2, width, this._fontOffset.height);\r\n context.globalAlpha = 1.0;\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 context.restore();\r\n }\r\n\r\n public _onPointerDown(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, pi: PointerInfoBase): boolean {\r\n if (!super._onPointerDown(target, coordinates, pointerId, buttonIndex, pi)) {\r\n return false;\r\n }\r\n\r\n if (this.isReadOnly) {\r\n return true;\r\n }\r\n\r\n this._clickedCoordinate = coordinates.x;\r\n this.isTextHighlightOn = false;\r\n this._highlightedText = \"\";\r\n this._cursorIndex = -1;\r\n this._isPointerDown = true;\r\n this._host._capturingControl[pointerId] = this;\r\n this._focusedBy = (pi.event as IPointerEvent).pointerType;\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 public _onPointerMove(target: Control, coordinates: Vector2, pointerId: number, pi: PointerInfoBase): void {\r\n if (this._host.focusedControl === this && this._isPointerDown && !this.isReadOnly) {\r\n this._clickedCoordinate = coordinates.x;\r\n this._markAsDirty();\r\n this._updateValueFromCursorIndex(this._cursorOffset);\r\n }\r\n super._onPointerMove(target, coordinates, pointerId, pi);\r\n }\r\n\r\n public _onPointerUp(target: Control, coordinates: Vector2, pointerId: number, buttonIndex: number, notifyClick: boolean): void {\r\n this._isPointerDown = false;\r\n delete this._host._capturingControl[pointerId];\r\n super._onPointerUp(target, coordinates, pointerId, buttonIndex, notifyClick);\r\n }\r\n\r\n protected _beforeRenderText(textWrapper: TextWrapper): TextWrapper {\r\n return textWrapper;\r\n }\r\n\r\n /** @internal */\r\n private set isTextHighlightOn(value: boolean) {\r\n if (this._isTextHighlightOn === value) {\r\n return;\r\n }\r\n if (value) {\r\n this.onTextHighlightObservable.notifyObservers(this);\r\n }\r\n this._isTextHighlightOn = value;\r\n }\r\n\r\n /** @internal */\r\n private get isTextHighlightOn(): boolean {\r\n return this._isTextHighlightOn;\r\n }\r\n\r\n public dispose() {\r\n super.dispose();\r\n\r\n this.onBlurObservable.clear();\r\n this.onFocusObservable.clear();\r\n this.onTextChangedObservable.clear();\r\n this.onTextCopyObservable.clear();\r\n this.onTextCutObservable.clear();\r\n this.onTextPasteObservable.clear();\r\n this.onTextHighlightObservable.clear();\r\n this.onKeyboardEventProcessedObservable.clear();\r\n }\r\n}\r\nRegisterClass(\"BABYLON.GUI.InputText\", InputText);\r\n"]}
|
package/3D/controls/slider3D.js
CHANGED
@@ -137,6 +137,10 @@ export class Slider3D extends Control3D {
|
|
137
137
|
sliderBackplate.visibility = 0;
|
138
138
|
sliderBackplate.scaling = new Vector3(1, 0.5, 0.8);
|
139
139
|
SceneLoader.ImportMeshAsync(undefined, Slider3D.MODEL_BASE_URL, Slider3D.MODEL_FILENAME, scene).then((result) => {
|
140
|
+
// make all meshes not pickable. Required meshes' pickable state will be set later.
|
141
|
+
result.meshes.forEach((m) => {
|
142
|
+
m.isPickable = false;
|
143
|
+
});
|
140
144
|
const sliderBackplateModel = result.meshes[1];
|
141
145
|
const sliderBarModel = result.meshes[1].clone(`${this.name}_sliderbar`, sliderBackplate);
|
142
146
|
const sliderThumbModel = result.meshes[1].clone(`${this.name}_sliderthumb`, sliderBackplate);
|
@@ -144,7 +148,6 @@ export class Slider3D extends Control3D {
|
|
144
148
|
if (this._sliderBackplateVisible) {
|
145
149
|
sliderBackplateModel.visibility = 1;
|
146
150
|
sliderBackplateModel.name = `${this.name}_sliderbackplate`;
|
147
|
-
sliderBackplateModel.isPickable = false;
|
148
151
|
sliderBackplateModel.scaling.x = 1;
|
149
152
|
sliderBackplateModel.scaling.z = 0.2;
|
150
153
|
sliderBackplateModel.parent = sliderBackplate;
|
@@ -157,7 +160,6 @@ export class Slider3D extends Control3D {
|
|
157
160
|
sliderBarModel.parent = sliderBackplate;
|
158
161
|
sliderBarModel.position.z = -0.1;
|
159
162
|
sliderBarModel.scaling = new Vector3(SLIDER_SCALING - SLIDER_MARGIN, 0.04, 0.3);
|
160
|
-
sliderBarModel.isPickable = false;
|
161
163
|
if (this._sliderBarMaterial) {
|
162
164
|
sliderBarModel.material = this._sliderBarMaterial;
|
163
165
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"slider3D.js","sourceRoot":"","sources":["../../../../../lts/gui/generated/3D/controls/slider3D.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,2CAA6B;AAClD,OAAO,EAAE,OAAO,EAAE,6CAA+B;AAGjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,sDAAwC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,gEAAkD;AAEhF,OAAO,EAAE,WAAW,EAAE,+CAAiC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAEhF,MAAM,UAAU,GAAW,CAAC,CAAC;AAC7B,MAAM,UAAU,GAAW,GAAG,CAAC;AAC/B,MAAM,UAAU,GAAW,EAAE,CAAC;AAC9B,MAAM,WAAW,GAAW,CAAC,CAAC;AAC9B,MAAM,cAAc,GAAW,GAAG,CAAC;AACnC,MAAM,aAAa,GAAW,GAAG,CAAC;AAElC;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,SAAS;IA6BnC;;;;OAIG;IACH,YAAY,IAAa,EAAE,sBAAgC;QACvD,KAAK,CAAC,IAAI,CAAC,CAAC;QAThB,sDAAsD;QAC/C,6BAAwB,GAAG,IAAI,UAAU,EAAU,CAAC;QASvD,IAAI,CAAC,uBAAuB,GAAG,sBAAsB,IAAI,KAAK,CAAC;QAE/D,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACX,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,OAAO,IAAI,CAAC,YAAY,CAAC;SAC5B;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,iCAAiC;IACjC,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,OAAO,CAAC,KAAa;QAC5B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;YACzB,OAAO;SACV;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChF,CAAC;IAED,iCAAiC;IACjC,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,OAAO,CAAC,KAAa;QAC5B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;YACzB,OAAO;SACV;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChF,CAAC;IAED,8BAA8B;IAC9B,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAW,IAAI,CAAC,KAAa;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;YACtB,OAAO;SACV;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;IACvF,CAAC;IAED,iCAAiC;IACjC,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,KAAK,CAAC,KAAa;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE;YACvB,OAAO;SACV;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACtE;QACD,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED,IAAc,KAAK;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;SAC9B;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IACtE,CAAC;IAED,IAAc,GAAG;QACb,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,OAAO,cAAc,GAAG,CAAC,CAAC;SAC7B;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACzC,CAAC;IAED,0DAA0D;IAC1D,IAAW,SAAS,CAAC,KAAc;;QAC/B,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE;YAC3B,OAAO;SACV;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,MAAA,IAAI,CAAC,IAAI,0CAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,mBAAmB;IACT,WAAW,CAAC,KAAY;QAC9B,MAAM,eAAe,GAAG,SAAS,CAC7B,GAAG,IAAI,CAAC,IAAI,kBAAkB,EAC9B;YACI,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,GAAG;SACb,EACD,KAAK,CACR,CAAC;QACF,eAAe,CAAC,UAAU,GAAG,KAAK,CAAC;QACnC,eAAe,CAAC,UAAU,GAAG,CAAC,CAAC;QAC/B,eAAe,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAEnD,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAC5G,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,YAAY,EAAE,eAAe,CAAC,CAAC;YACzF,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,cAAc,EAAE,eAAe,CAAC,CAAC;YAC7F,oBAAoB,CAAC,UAAU,GAAG,CAAC,CAAC;YAEpC,IAAI,IAAI,CAAC,uBAAuB,EAAE;gBAC9B,oBAAoB,CAAC,UAAU,GAAG,CAAC,CAAC;gBACpC,oBAAoB,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,kBAAkB,CAAC;gBAC3D,oBAAoB,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxC,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnC,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;gBACrC,oBAAoB,CAAC,MAAM,GAAG,eAAe,CAAC;gBAC9C,IAAI,IAAI,CAAC,wBAAwB,EAAE;oBAC/B,oBAAoB,CAAC,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC;iBACjE;gBACD,IAAI,CAAC,gBAAgB,GAAG,oBAAoB,CAAC;aAChD;YAED,IAAI,cAAc,EAAE;gBAChB,cAAc,CAAC,MAAM,GAAG,eAAe,CAAC;gBACxC,cAAc,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;gBACjC,cAAc,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,cAAc,GAAG,aAAa,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBAChF,cAAc,CAAC,UAAU,GAAG,KAAK,CAAC;gBAClC,IAAI,IAAI,CAAC,kBAAkB,EAAE;oBACzB,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;iBACrD;gBACD,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC;aACpC;YAED,IAAI,gBAAgB,EAAE;gBAClB,gBAAgB,CAAC,MAAM,GAAG,eAAe,CAAC;gBAC1C,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC;gBACnC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;gBACrC,gBAAgB,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACxD,gBAAgB,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClE,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;gBACrD,IAAI,IAAI,CAAC,oBAAoB,EAAE;oBAC3B,gBAAgB,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC;iBACzD;gBACD,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC;aACxC;YAED,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;YACnE,eAAe,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC9C,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;YAC5D,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QACtC,OAAO,eAAe,CAAC;IAC3B,CAAC;IAES,eAAe,CAAC,IAAkB;;QACxC,IAAI,CAAC,wBAAwB,GAAG,MAAA,IAAI,CAAC,wBAAwB,mCAAI,IAAI,qBAAqB,CAAC,GAAG,IAAI,CAAC,IAAI,2BAA2B,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrJ,IAAI,CAAC,kBAAkB,GAAG,MAAA,IAAI,CAAC,kBAAkB,mCAAI,IAAI,qBAAqB,CAAC,GAAG,IAAI,CAAC,IAAI,qBAAqB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnI,IAAI,CAAC,oBAAoB,GAAG,MAAA,IAAI,CAAC,oBAAoB,mCAAI,IAAI,uBAAuB,CAAC,GAAG,IAAI,CAAC,IAAI,uBAAuB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/I,CAAC;IAEO,eAAe;QACnB,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACnF,mBAAmB,CAAC,YAAY,GAAG,KAAK,CAAC;QAEzC,mBAAmB,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE;YAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,mBAAmB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/C,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAEO,kBAAkB,CAAC,KAAa;QACpC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACjH,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9D,CAAC;IAEO,eAAe,CAAC,QAAgB;QACpC,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAChG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAEtE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACI,OAAO;;QACV,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,MAAA,IAAI,CAAC,UAAU,0CAAE,OAAO,EAAE,CAAC;QAC3B,MAAA,IAAI,CAAC,YAAY,0CAAE,OAAO,EAAE,CAAC;QAC7B,MAAA,IAAI,CAAC,kBAAkB,0CAAE,OAAO,EAAE,CAAC;QACnC,MAAA,IAAI,CAAC,oBAAoB,0CAAE,OAAO,EAAE,CAAC;QACrC,MAAA,IAAI,CAAC,gBAAgB,0CAAE,OAAO,EAAE,CAAC;QACjC,MAAA,IAAI,CAAC,wBAAwB,0CAAE,OAAO,EAAE,CAAC;IAC7C,CAAC;;AAjRD;;GAEG;AACW,uBAAc,GAAW,2CAA2C,CAAC;AAEnF;;GAEG;AACW,uBAAc,GAAW,2BAA2B,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport type { TransformNode } from \"core/Meshes/transformNode\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { Control3D } from \"./control3D\";\r\nimport { CreateBox } from \"core/Meshes/Builders/boxBuilder\";\r\nimport { PointerDragBehavior } from \"core/Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { SceneLoader } from \"core/Loading/sceneLoader\";\r\nimport { MRDLSliderBarMaterial } from \"../materials/mrdl/mrdlSliderBarMaterial\";\r\nimport { MRDLSliderThumbMaterial } from \"../materials/mrdl/mrdlSliderThumbMaterial\";\r\nimport { MRDLBackplateMaterial } from \"../materials/mrdl/mrdlBackplateMaterial\";\r\n\r\nconst SLIDER_MIN: number = 0;\r\nconst SLIDER_MAX: number = 100;\r\nconst SLIDER_VAL: number = 50;\r\nconst SLIDER_STEP: number = 0;\r\nconst SLIDER_SCALING: number = 1.0;\r\nconst SLIDER_MARGIN: number = 0.2;\r\n\r\n/**\r\n * Class used to create a slider in 3D\r\n */\r\nexport class Slider3D extends Control3D {\r\n /**\r\n * Base Url for the models.\r\n */\r\n public static MODEL_BASE_URL: string = \"https://assets.babylonjs.com/meshes/MRTK/\";\r\n\r\n /**\r\n * File name for the 8x4 model.\r\n */\r\n public static MODEL_FILENAME: string = \"mrtk-fluent-backplate.glb\";\r\n\r\n private _sliderBackplate: AbstractMesh;\r\n private _sliderBackplateMaterial: MRDLBackplateMaterial;\r\n private _sliderBarMaterial: MRDLSliderBarMaterial;\r\n private _sliderThumbMaterial: MRDLSliderThumbMaterial;\r\n private _sliderThumb: AbstractMesh;\r\n private _sliderBar: AbstractMesh;\r\n private _sliderBackplateVisible: boolean;\r\n\r\n private _minimum: number;\r\n private _maximum: number;\r\n private _value: number;\r\n private _step: number;\r\n\r\n private _draggedPosition: number;\r\n\r\n /** Observable raised when the sldier value changes */\r\n public onValueChangedObservable = new Observable<number>();\r\n\r\n /**\r\n * Creates a new slider\r\n * @param name defines the control name\r\n * @param sliderBackplateVisible defines if the control has a backplate, default is false\r\n */\r\n constructor(name?: string, sliderBackplateVisible?: boolean) {\r\n super(name);\r\n this._sliderBackplateVisible = sliderBackplateVisible || false;\r\n\r\n this._minimum = SLIDER_MIN;\r\n this._maximum = SLIDER_MAX;\r\n this._step = SLIDER_STEP;\r\n this._value = SLIDER_VAL;\r\n }\r\n\r\n /**\r\n * Gets the mesh used to render this control\r\n */\r\n public get mesh(): Nullable<AbstractMesh> {\r\n if (this.node) {\r\n return this._sliderThumb;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Gets or sets minimum value */\r\n public get minimum(): number {\r\n return this._minimum;\r\n }\r\n\r\n public set minimum(value: number) {\r\n if (this._minimum === value) {\r\n return;\r\n }\r\n\r\n this._minimum = Math.max(value, SLIDER_MIN);\r\n this._value = Math.max(Math.min(this._value, this._maximum), this._minimum);\r\n }\r\n\r\n /** Gets or sets maximum value */\r\n public get maximum(): number {\r\n return this._maximum;\r\n }\r\n\r\n public set maximum(value: number) {\r\n if (this._maximum === value) {\r\n return;\r\n }\r\n\r\n this._maximum = Math.max(value, this._minimum);\r\n this._value = Math.max(Math.min(this._value, this._maximum), this._minimum);\r\n }\r\n\r\n /** Gets or sets step value */\r\n public get step(): number {\r\n return this._step;\r\n }\r\n\r\n public set step(value: number) {\r\n if (this._step === value) {\r\n return;\r\n }\r\n\r\n this._step = Math.max(Math.min(value, this._maximum - this._minimum), SLIDER_STEP);\r\n }\r\n\r\n /** Gets or sets current value */\r\n public get value(): number {\r\n return this._value;\r\n }\r\n\r\n public set value(value: number) {\r\n if (this._value === value) {\r\n return;\r\n }\r\n\r\n this._value = Math.max(Math.min(value, this._maximum), this._minimum);\r\n if (this._sliderThumb) {\r\n this._sliderThumb.position.x = this._convertToPosition(this.value);\r\n }\r\n this.onValueChangedObservable.notifyObservers(this._value);\r\n }\r\n\r\n protected get start(): number {\r\n if (!this.node) {\r\n return -SLIDER_SCALING / 2;\r\n }\r\n\r\n return this._sliderBar.position.x - this._sliderBar.scaling.x / 2;\r\n }\r\n\r\n protected get end(): number {\r\n if (!this.node) {\r\n return SLIDER_SCALING / 2;\r\n }\r\n\r\n return this._sliderBar.position.x + this._sliderBar.scaling.x / 2;\r\n }\r\n\r\n /**\r\n * Gets the slider bar material used by this control\r\n */\r\n public get sliderBarMaterial(): MRDLSliderBarMaterial {\r\n return this._sliderBarMaterial;\r\n }\r\n\r\n /**\r\n * Gets the slider thumb material used by this control\r\n */\r\n public get sliderThumbMaterial(): MRDLSliderThumbMaterial {\r\n return this._sliderThumbMaterial;\r\n }\r\n\r\n /**\r\n * Gets the slider backplate material used by this control\r\n */\r\n public get sliderBackplateMaterial(): MRDLBackplateMaterial {\r\n return this._sliderBackplateMaterial;\r\n }\r\n\r\n /** Sets a boolean indicating if the control is visible */\r\n public set isVisible(value: boolean) {\r\n if (this._isVisible === value) {\r\n return;\r\n }\r\n\r\n this._isVisible = value;\r\n\r\n this.node?.setEnabled(value);\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n const sliderBackplate = CreateBox(\r\n `${this.name}_sliderbackplate`,\r\n {\r\n width: 1.0,\r\n height: 1.0,\r\n depth: 1.0,\r\n },\r\n scene\r\n );\r\n sliderBackplate.isPickable = false;\r\n sliderBackplate.visibility = 0;\r\n sliderBackplate.scaling = new Vector3(1, 0.5, 0.8);\r\n\r\n SceneLoader.ImportMeshAsync(undefined, Slider3D.MODEL_BASE_URL, Slider3D.MODEL_FILENAME, scene).then((result) => {\r\n const sliderBackplateModel = result.meshes[1];\r\n const sliderBarModel = result.meshes[1].clone(`${this.name}_sliderbar`, sliderBackplate);\r\n const sliderThumbModel = result.meshes[1].clone(`${this.name}_sliderthumb`, sliderBackplate);\r\n sliderBackplateModel.visibility = 0;\r\n\r\n if (this._sliderBackplateVisible) {\r\n sliderBackplateModel.visibility = 1;\r\n sliderBackplateModel.name = `${this.name}_sliderbackplate`;\r\n sliderBackplateModel.isPickable = false;\r\n sliderBackplateModel.scaling.x = 1;\r\n sliderBackplateModel.scaling.z = 0.2;\r\n sliderBackplateModel.parent = sliderBackplate;\r\n if (this._sliderBackplateMaterial) {\r\n sliderBackplateModel.material = this._sliderBackplateMaterial;\r\n }\r\n this._sliderBackplate = sliderBackplateModel;\r\n }\r\n\r\n if (sliderBarModel) {\r\n sliderBarModel.parent = sliderBackplate;\r\n sliderBarModel.position.z = -0.1;\r\n sliderBarModel.scaling = new Vector3(SLIDER_SCALING - SLIDER_MARGIN, 0.04, 0.3);\r\n sliderBarModel.isPickable = false;\r\n if (this._sliderBarMaterial) {\r\n sliderBarModel.material = this._sliderBarMaterial;\r\n }\r\n this._sliderBar = sliderBarModel;\r\n }\r\n\r\n if (sliderThumbModel) {\r\n sliderThumbModel.parent = sliderBackplate;\r\n sliderThumbModel.isPickable = true;\r\n sliderThumbModel.position.z = -0.115;\r\n sliderThumbModel.scaling = new Vector3(0.025, 0.3, 0.6);\r\n sliderThumbModel.position.x = this._convertToPosition(this.value);\r\n sliderThumbModel.addBehavior(this._createBehavior());\r\n if (this._sliderThumbMaterial) {\r\n sliderThumbModel.material = this._sliderThumbMaterial;\r\n }\r\n this._sliderThumb = sliderThumbModel;\r\n }\r\n\r\n this._injectGUI3DReservedDataStore(sliderBackplate).control = this;\r\n sliderBackplate.getChildMeshes().forEach((mesh) => {\r\n this._injectGUI3DReservedDataStore(mesh).control = this;\r\n });\r\n });\r\n\r\n this._affectMaterial(sliderBackplate);\r\n return sliderBackplate;\r\n }\r\n\r\n protected _affectMaterial(mesh: AbstractMesh) {\r\n this._sliderBackplateMaterial = this._sliderBackplateMaterial ?? new MRDLBackplateMaterial(`${this.name}_sliderbackplate_material`, mesh.getScene());\r\n this._sliderBarMaterial = this._sliderBarMaterial ?? new MRDLSliderBarMaterial(`${this.name}_sliderbar_material`, mesh.getScene());\r\n this._sliderThumbMaterial = this._sliderThumbMaterial ?? new MRDLSliderThumbMaterial(`${this.name}_sliderthumb_material`, mesh.getScene());\r\n }\r\n\r\n private _createBehavior(): PointerDragBehavior {\r\n const pointerDragBehavior = new PointerDragBehavior({ dragAxis: Vector3.Right() });\r\n pointerDragBehavior.moveAttached = false;\r\n\r\n pointerDragBehavior.onDragStartObservable.add(() => {\r\n this._draggedPosition = this._sliderThumb.position.x;\r\n });\r\n\r\n pointerDragBehavior.onDragObservable.add((event) => {\r\n this._draggedPosition += event.dragDistance / this.scaling.x;\r\n this.value = this._convertToValue(this._draggedPosition);\r\n });\r\n\r\n return pointerDragBehavior;\r\n }\r\n\r\n private _convertToPosition(value: number): number {\r\n const position = ((value - this.minimum) / (this.maximum - this.minimum)) * (this.end - this.start) + this.start;\r\n return Math.min(Math.max(position, this.start), this.end);\r\n }\r\n\r\n private _convertToValue(position: number): number {\r\n let value = ((position - this.start) / (this.end - this.start)) * (this.maximum - this.minimum);\r\n value = this.step ? Math.round(value / this.step) * this.step : value;\r\n\r\n return Math.max(Math.min(this.minimum + value, this._maximum), this._minimum);\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n super.dispose();\r\n this._sliderBar?.dispose();\r\n this._sliderThumb?.dispose();\r\n this._sliderBarMaterial?.dispose();\r\n this._sliderThumbMaterial?.dispose();\r\n this._sliderBackplate?.dispose();\r\n this._sliderBackplateMaterial?.dispose();\r\n }\r\n}\r\n"]}
|
1
|
+
{"version":3,"file":"slider3D.js","sourceRoot":"","sources":["../../../../../lts/gui/generated/3D/controls/slider3D.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport type { TransformNode } from \"core/Meshes/transformNode\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { Control3D } from \"./control3D\";\r\nimport { CreateBox } from \"core/Meshes/Builders/boxBuilder\";\r\nimport { PointerDragBehavior } from \"core/Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { SceneLoader } from \"core/Loading/sceneLoader\";\r\nimport { MRDLSliderBarMaterial } from \"../materials/mrdl/mrdlSliderBarMaterial\";\r\nimport { MRDLSliderThumbMaterial } from \"../materials/mrdl/mrdlSliderThumbMaterial\";\r\nimport { MRDLBackplateMaterial } from \"../materials/mrdl/mrdlBackplateMaterial\";\r\n\r\nconst SLIDER_MIN: number = 0;\r\nconst SLIDER_MAX: number = 100;\r\nconst SLIDER_VAL: number = 50;\r\nconst SLIDER_STEP: number = 0;\r\nconst SLIDER_SCALING: number = 1.0;\r\nconst SLIDER_MARGIN: number = 0.2;\r\n\r\n/**\r\n * Class used to create a slider in 3D\r\n */\r\nexport class Slider3D extends Control3D {\r\n /**\r\n * Base Url for the models.\r\n */\r\n public static MODEL_BASE_URL: string = \"https://assets.babylonjs.com/meshes/MRTK/\";\r\n\r\n /**\r\n * File name for the 8x4 model.\r\n */\r\n public static MODEL_FILENAME: string = \"mrtk-fluent-backplate.glb\";\r\n\r\n private _sliderBackplate: AbstractMesh;\r\n private _sliderBackplateMaterial: MRDLBackplateMaterial;\r\n private _sliderBarMaterial: MRDLSliderBarMaterial;\r\n private _sliderThumbMaterial: MRDLSliderThumbMaterial;\r\n private _sliderThumb: AbstractMesh;\r\n private _sliderBar: AbstractMesh;\r\n private _sliderBackplateVisible: boolean;\r\n\r\n private _minimum: number;\r\n private _maximum: number;\r\n private _value: number;\r\n private _step: number;\r\n\r\n private _draggedPosition: number;\r\n\r\n /** Observable raised when the sldier value changes */\r\n public onValueChangedObservable = new Observable<number>();\r\n\r\n /**\r\n * Creates a new slider\r\n * @param name defines the control name\r\n * @param sliderBackplateVisible defines if the control has a backplate, default is false\r\n */\r\n constructor(name?: string, sliderBackplateVisible?: boolean) {\r\n super(name);\r\n this._sliderBackplateVisible = sliderBackplateVisible || false;\r\n\r\n this._minimum = SLIDER_MIN;\r\n this._maximum = SLIDER_MAX;\r\n this._step = SLIDER_STEP;\r\n this._value = SLIDER_VAL;\r\n }\r\n\r\n /**\r\n * Gets the mesh used to render this control\r\n */\r\n public get mesh(): Nullable<AbstractMesh> {\r\n if (this.node) {\r\n return this._sliderThumb;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Gets or sets minimum value */\r\n public get minimum(): number {\r\n return this._minimum;\r\n }\r\n\r\n public set minimum(value: number) {\r\n if (this._minimum === value) {\r\n return;\r\n }\r\n\r\n this._minimum = Math.max(value, SLIDER_MIN);\r\n this._value = Math.max(Math.min(this._value, this._maximum), this._minimum);\r\n }\r\n\r\n /** Gets or sets maximum value */\r\n public get maximum(): number {\r\n return this._maximum;\r\n }\r\n\r\n public set maximum(value: number) {\r\n if (this._maximum === value) {\r\n return;\r\n }\r\n\r\n this._maximum = Math.max(value, this._minimum);\r\n this._value = Math.max(Math.min(this._value, this._maximum), this._minimum);\r\n }\r\n\r\n /** Gets or sets step value */\r\n public get step(): number {\r\n return this._step;\r\n }\r\n\r\n public set step(value: number) {\r\n if (this._step === value) {\r\n return;\r\n }\r\n\r\n this._step = Math.max(Math.min(value, this._maximum - this._minimum), SLIDER_STEP);\r\n }\r\n\r\n /** Gets or sets current value */\r\n public get value(): number {\r\n return this._value;\r\n }\r\n\r\n public set value(value: number) {\r\n if (this._value === value) {\r\n return;\r\n }\r\n\r\n this._value = Math.max(Math.min(value, this._maximum), this._minimum);\r\n if (this._sliderThumb) {\r\n this._sliderThumb.position.x = this._convertToPosition(this.value);\r\n }\r\n this.onValueChangedObservable.notifyObservers(this._value);\r\n }\r\n\r\n protected get start(): number {\r\n if (!this.node) {\r\n return -SLIDER_SCALING / 2;\r\n }\r\n\r\n return this._sliderBar.position.x - this._sliderBar.scaling.x / 2;\r\n }\r\n\r\n protected get end(): number {\r\n if (!this.node) {\r\n return SLIDER_SCALING / 2;\r\n }\r\n\r\n return this._sliderBar.position.x + this._sliderBar.scaling.x / 2;\r\n }\r\n\r\n /**\r\n * Gets the slider bar material used by this control\r\n */\r\n public get sliderBarMaterial(): MRDLSliderBarMaterial {\r\n return this._sliderBarMaterial;\r\n }\r\n\r\n /**\r\n * Gets the slider thumb material used by this control\r\n */\r\n public get sliderThumbMaterial(): MRDLSliderThumbMaterial {\r\n return this._sliderThumbMaterial;\r\n }\r\n\r\n /**\r\n * Gets the slider backplate material used by this control\r\n */\r\n public get sliderBackplateMaterial(): MRDLBackplateMaterial {\r\n return this._sliderBackplateMaterial;\r\n }\r\n\r\n /** Sets a boolean indicating if the control is visible */\r\n public set isVisible(value: boolean) {\r\n if (this._isVisible === value) {\r\n return;\r\n }\r\n\r\n this._isVisible = value;\r\n\r\n this.node?.setEnabled(value);\r\n }\r\n\r\n // Mesh association\r\n protected _createNode(scene: Scene): TransformNode {\r\n const sliderBackplate = CreateBox(\r\n `${this.name}_sliderbackplate`,\r\n {\r\n width: 1.0,\r\n height: 1.0,\r\n depth: 1.0,\r\n },\r\n scene\r\n );\r\n sliderBackplate.isPickable = false;\r\n sliderBackplate.visibility = 0;\r\n sliderBackplate.scaling = new Vector3(1, 0.5, 0.8);\r\n\r\n SceneLoader.ImportMeshAsync(undefined, Slider3D.MODEL_BASE_URL, Slider3D.MODEL_FILENAME, scene).then((result) => {\r\n // make all meshes not pickable. Required meshes' pickable state will be set later.\r\n result.meshes.forEach((m) => {\r\n m.isPickable = false;\r\n });\r\n const sliderBackplateModel = result.meshes[1];\r\n const sliderBarModel = result.meshes[1].clone(`${this.name}_sliderbar`, sliderBackplate);\r\n const sliderThumbModel = result.meshes[1].clone(`${this.name}_sliderthumb`, sliderBackplate);\r\n sliderBackplateModel.visibility = 0;\r\n\r\n if (this._sliderBackplateVisible) {\r\n sliderBackplateModel.visibility = 1;\r\n sliderBackplateModel.name = `${this.name}_sliderbackplate`;\r\n sliderBackplateModel.scaling.x = 1;\r\n sliderBackplateModel.scaling.z = 0.2;\r\n sliderBackplateModel.parent = sliderBackplate;\r\n if (this._sliderBackplateMaterial) {\r\n sliderBackplateModel.material = this._sliderBackplateMaterial;\r\n }\r\n this._sliderBackplate = sliderBackplateModel;\r\n }\r\n\r\n if (sliderBarModel) {\r\n sliderBarModel.parent = sliderBackplate;\r\n sliderBarModel.position.z = -0.1;\r\n sliderBarModel.scaling = new Vector3(SLIDER_SCALING - SLIDER_MARGIN, 0.04, 0.3);\r\n if (this._sliderBarMaterial) {\r\n sliderBarModel.material = this._sliderBarMaterial;\r\n }\r\n this._sliderBar = sliderBarModel;\r\n }\r\n\r\n if (sliderThumbModel) {\r\n sliderThumbModel.parent = sliderBackplate;\r\n sliderThumbModel.isPickable = true;\r\n sliderThumbModel.position.z = -0.115;\r\n sliderThumbModel.scaling = new Vector3(0.025, 0.3, 0.6);\r\n sliderThumbModel.position.x = this._convertToPosition(this.value);\r\n sliderThumbModel.addBehavior(this._createBehavior());\r\n if (this._sliderThumbMaterial) {\r\n sliderThumbModel.material = this._sliderThumbMaterial;\r\n }\r\n this._sliderThumb = sliderThumbModel;\r\n }\r\n\r\n this._injectGUI3DReservedDataStore(sliderBackplate).control = this;\r\n sliderBackplate.getChildMeshes().forEach((mesh) => {\r\n this._injectGUI3DReservedDataStore(mesh).control = this;\r\n });\r\n });\r\n\r\n this._affectMaterial(sliderBackplate);\r\n return sliderBackplate;\r\n }\r\n\r\n protected _affectMaterial(mesh: AbstractMesh) {\r\n this._sliderBackplateMaterial = this._sliderBackplateMaterial ?? new MRDLBackplateMaterial(`${this.name}_sliderbackplate_material`, mesh.getScene());\r\n this._sliderBarMaterial = this._sliderBarMaterial ?? new MRDLSliderBarMaterial(`${this.name}_sliderbar_material`, mesh.getScene());\r\n this._sliderThumbMaterial = this._sliderThumbMaterial ?? new MRDLSliderThumbMaterial(`${this.name}_sliderthumb_material`, mesh.getScene());\r\n }\r\n\r\n private _createBehavior(): PointerDragBehavior {\r\n const pointerDragBehavior = new PointerDragBehavior({ dragAxis: Vector3.Right() });\r\n pointerDragBehavior.moveAttached = false;\r\n\r\n pointerDragBehavior.onDragStartObservable.add(() => {\r\n this._draggedPosition = this._sliderThumb.position.x;\r\n });\r\n\r\n pointerDragBehavior.onDragObservable.add((event) => {\r\n this._draggedPosition += event.dragDistance / this.scaling.x;\r\n this.value = this._convertToValue(this._draggedPosition);\r\n });\r\n\r\n return pointerDragBehavior;\r\n }\r\n\r\n private _convertToPosition(value: number): number {\r\n const position = ((value - this.minimum) / (this.maximum - this.minimum)) * (this.end - this.start) + this.start;\r\n return Math.min(Math.max(position, this.start), this.end);\r\n }\r\n\r\n private _convertToValue(position: number): number {\r\n let value = ((position - this.start) / (this.end - this.start)) * (this.maximum - this.minimum);\r\n value = this.step ? Math.round(value / this.step) * this.step : value;\r\n\r\n return Math.max(Math.min(this.minimum + value, this._maximum), this._minimum);\r\n }\r\n\r\n /**\r\n * Releases all associated resources\r\n */\r\n public dispose() {\r\n super.dispose();\r\n this._sliderBar?.dispose();\r\n this._sliderThumb?.dispose();\r\n this._sliderBarMaterial?.dispose();\r\n this._sliderThumbMaterial?.dispose();\r\n this._sliderBackplate?.dispose();\r\n this._sliderBackplateMaterial?.dispose();\r\n }\r\n}\r\n"]}
|
@@ -330,6 +330,9 @@ export class MRDLSliderThumbMaterial extends PushMaterial {
|
|
330
330
|
this.alphaMode = Constants.ALPHA_DISABLE;
|
331
331
|
this.backFaceCulling = false;
|
332
332
|
this._blueGradientTexture = new Texture(MRDLSliderThumbMaterial.BLUE_GRADIENT_TEXTURE_URL, scene, true, false, Texture.NEAREST_SAMPLINGMODE);
|
333
|
+
this._decalTexture = new Texture("", this.getScene());
|
334
|
+
this._reflectionMapTexture = new Texture("", this.getScene());
|
335
|
+
this._indirectEnvTexture = new Texture("", this.getScene());
|
333
336
|
}
|
334
337
|
needAlphaBlending() {
|
335
338
|
return false;
|