From 8c6ad10df1309c4b2bc23149d18a77949091deb4 Mon Sep 17 00:00:00 2001 From: BARMCO Date: Thu, 10 Dec 2020 22:34:17 +0900 Subject: [PATCH] rdd is not local variable --- bundles/puxi.js/dist/puxi.js | 2 +- bundles/puxi.js/lib/puxi.cjs | 2 +- bundles/puxi.js/lib/puxi.mjs | 2 +- packages/core/dist/puxi-core.js | 4 ++-- packages/core/dist/puxi-core.js.map | 2 +- packages/core/lib/puxi-core.js | 4 ++-- packages/core/lib/puxi-core.js.map | 2 +- packages/core/src/TextInput.ts | 2 +- packages/kit/dist/puxi-kit.js | 2 +- packages/kit/lib/puxi-kit.js | 2 +- packages/kit/lib/puxi-kit.mjs | 2 +- packages/navigation/dist/puxi-navigation.js | 2 +- packages/navigation/lib/puxi-navigation.js | 2 +- packages/navigation/lib/puxi-navigation.mjs | 2 +- packages/tween/dist/puxi-tween.js | 2 +- packages/tween/lib/puxi-tween.js | 2 +- packages/tween/lib/puxi-tween.mjs | 2 +- 17 files changed, 19 insertions(+), 19 deletions(-) diff --git a/bundles/puxi.js/dist/puxi.js b/bundles/puxi.js/dist/puxi.js index 82b46a1..2f2abe8 100644 --- a/bundles/puxi.js/dist/puxi.js +++ b/bundles/puxi.js/dist/puxi.js @@ -1,6 +1,6 @@ /*! * puxi.js - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * puxi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license diff --git a/bundles/puxi.js/lib/puxi.cjs b/bundles/puxi.js/lib/puxi.cjs index b5d913e..64b7ca3 100644 --- a/bundles/puxi.js/lib/puxi.cjs +++ b/bundles/puxi.js/lib/puxi.cjs @@ -1,6 +1,6 @@ /*! * puxi.js - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * puxi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license diff --git a/bundles/puxi.js/lib/puxi.mjs b/bundles/puxi.js/lib/puxi.mjs index 1b0571f..f31ab70 100644 --- a/bundles/puxi.js/lib/puxi.mjs +++ b/bundles/puxi.js/lib/puxi.mjs @@ -1,6 +1,6 @@ /*! * puxi.js - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * puxi.js is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license diff --git a/packages/core/dist/puxi-core.js b/packages/core/dist/puxi-core.js index 3db8870..3e61857 100644 --- a/packages/core/dist/puxi-core.js +++ b/packages/core/dist/puxi-core.js @@ -1,6 +1,6 @@ /*! * @puxi/core - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * @puxi/core is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license @@ -5934,7 +5934,7 @@ var _puxi_core = (function (exports, PIXI, filterDropShadow) { const selectIndex = this.rdd ? _i - 1 : _i; this.selectRange(selectIndex, selectIndex); this.caret._index = selectIndex; - this.caret._forward = !rdd; + this.caret._forward = !this.rdd; } } else { diff --git a/packages/core/dist/puxi-core.js.map b/packages/core/dist/puxi-core.js.map index 8e87882..b62a9b1 100644 --- a/packages/core/dist/puxi-core.js.map +++ b/packages/core/dist/puxi-core.js.map @@ -1 +1 @@ -{"version":3,"file":"puxi-core.js","sources":["../src/event/DragDropController.js","../src/layout-options/Insets.ts","../src/IMeasurable.ts","../src/event/EventManager.ts","../src/event/ClickManager.ts","../src/event/DragManager.ts","../src/event/EventBroker.ts","../src/event/ScrollManager.ts","../src/Widget.ts","../src/layout-options/Align.ts","../src/layout-options/LayoutOptions.ts","../src/layout-options/AnchorLayoutOptions.ts","../src/layout-options/FastLayoutOptions.ts","../src/layout-options/BorderLayoutOptions.ts","../src/layout-manager/FastLayout.ts","../src/WidgetGroup.ts","../src/InteractiveGroup.ts","../src/FocusableWidget.ts","../src/TextWidget.ts","../src/Button.ts","../src/CheckBox.ts","../src/Ease/EaseBase.js","../src/Ease/ExponentialEase.js","../src/Ease/Ease.js","../src/Helpers.ts","../src/Sprite.ts","../src/layout-manager/AnchorLayout.ts","../src/layout-manager/ILayoutManager.ts","../src/layout-manager/BorderLayout.ts","../src/layout-manager/LinearLayout.ts","../src/ImageButton.ts","../src/Slider.ts","../src/Tween.ts","../src/ScrollBar.ts","../src/ScrollWidget.ts","../src/SortableList.ts","../src/SliceSprite.ts","../src/ctl/Controller.ts","../src/ctl/CheckBoxGroupController.ts","../src/ctl/FocusController.ts","../src/Stage.ts","../src/Style.ts","../src/StyleSheet.ts","../src/TextInput.ts","../src/TilingSprite.ts","../src/Ticker.ts"],"sourcesContent":["const _items = [];\nconst DragDropController = {\n add(item, event)\n {\n item._dragDropEventId = event.data.identifier;\n if (_items.indexOf(item) === -1)\n {\n _items.push(item);\n\n return true;\n }\n\n return false;\n },\n getItem(object)\n {\n let item = null; let\n index;\n\n for (let i = 0; i < _items.length; i++)\n {\n if (_items[i] === object)\n {\n item = _items[i];\n index = i;\n break;\n }\n }\n\n if (item !== null)\n {\n _items.splice(index, 1);\n\n return item;\n }\n\n return false;\n },\n getEventItem(event, group)\n {\n let item = null; let index; const\n id = event.data.identifier;\n\n for (let i = 0; i < _items.length; i++)\n {\n if (_items[i]._dragDropEventId === id)\n {\n if (group !== _items[i].dragGroup)\n {\n return false;\n }\n item = _items[i];\n index = i;\n break;\n }\n }\n\n if (item !== null)\n {\n _items.splice(index, 1);\n\n return item;\n }\n\n return false;\n },\n};\n\nexport { DragDropController };\nexport default DragDropController;\n","/**\n * @memberof PUXI\n * @class\n */\nexport class Insets\n{\n left: number;\n top: number;\n right: number;\n bottom: number;\n\n dirtyId: number;\n\n constructor()\n {\n this.reset();\n this.dirtyId = 0;\n }\n\n reset(): void\n {\n this.left = -1;\n this.top = -1;\n this.right = -1;\n this.bottom = -1;\n }\n}\n","/**\n * These are the modes in which an entity can measures its dimension. They are\n * relevant when a layout needs to know the optimal sizes of its children.\n *\n * @memberof PUXI\n * @enum\n * @property {number} UNBOUNDED - no upper limit on bounds. This should calculate the optimal dimensions for the entity.\n * @property {number} EXACTLY - the entity should set its dimension to the one passed to it.\n * @property {number} AT_MOST - the entity should find an optimal dimension below the one passed to it.\n */\nexport enum MeasureMode\n{\n UNBOUNDED = 0,\n EXACTLY = 1,\n AT_MOST = 2\n}\n\nexport interface IMeasurable\n{\n onMeasure(maxWidth: number, maxHeight: number, widthMode: MeasureMode, heightMode: MeasureMode);\n getMeasuredWidth(): number;\n getMeasuredHeight(): number;\n}\n\n/**\n * Any renderable entity that can be used in a widget hierarchy must be\n * measurable.\n *\n * @memberof PUXI\n * @interface IMeasurable\n */\n\n/**\n * Measures its width & height based on the passed constraints.\n *\n * @memberof PUXI.IMeasurable#\n * @method onMeasure\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n */\n\n/**\n * @memberof PUXI.IMeasurable#\n * @method getMeasuredWidth\n * @returns {number} - the measured width of the entity after a `onMeasure` call\n */\n\n/**\n * @memberof PUXI.IMeasurable#\n * @method getMeasuredHeight\n * @returns {number} - the measured height of the entity after a `onMeasure` call\n */\n","import { Widget } from '../Widget';\n\n/**\n * An event manager handles the states related to certain events and can augment\n * widget interaction. For example, the click manager will hide clicks when\n * the object is dragging.\n *\n * Event managers are lifecycle objects - they can start/stop. Their constructor\n * will always accept one argument - the widget. Other settings can be applied before\n * `startEvent`.\n *\n * Ideally, you should access event managers _after_ your widget has initialized. This is\n * because it may depend on the widget's stage being assigned.\n *\n * @memberof PUXI\n * @class\n * @abstract\n */\nexport abstract class EventManager\n{\n protected target: Widget;\n protected isEnabled: boolean;\n\n /**\n * @param {Widget} target\n */\n constructor(target: Widget)\n {\n this.target = target;\n this.isEnabled = false;// use to track start/stopEvent\n }\n\n /**\n * @returns {Widget}\n */\n getTarget(): Widget\n {\n return this.target;\n }\n\n /**\n * Registers the interaction event listeners that will emit corresponding events\n * on the target widget.\n */\n abstract startEvent(): any;\n\n /**\n * Unregisters any event listeners and releases any resources held. This should\n * revert all changes made by `startEvent`.\n */\n abstract stopEvent(): any;\n}\n","import * as PIXI from 'pixi.js';\nimport { Widget } from '../Widget';\nimport { EventManager } from './EventManager';\n\n/**\n * `ClickManager` handles hover and click events. It registers listeners\n * for `mousedown`, `mouseup`, `mousemove`, `mouseout`, `mouseover`, `touchstart`,\n * `touchend`, `touchendoutside`, `touchmove`, `rightup`, `rightdown`, `rightupoutside`\n * events.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.EventManager\n */\nexport class ClickManager extends EventManager\n{\n onHover: (event: PIXI.InteractionEvent, over: boolean) => void;\n onPress: (event: PIXI.InteractionEvent, isPressed: boolean) => void;\n onClick: (event: PIXI.InteractionMouseEvents) => void;\n onMove: (event: PIXI.InteractionEvent) => void;\n\n protected _rightMouseButton: boolean;\n protected _includeHover: boolean;\n protected _doubleClick: boolean;\n\n private bound: boolean;\n private id: number;\n private ishover: boolean;\n protected target: Widget;\n\n private movementX: number;\n private movementY: number;\n mouse: PIXI.Point;\n offset: PIXI.Point;\n\n private evMouseDown: string;\n private evMouseUp: string;\n private evMouseUpOutside: string;\n\n time: number;\n\n /**\n * @param {PUXI.Widget | PUXI.Button} target\n * @param {boolean}[includeHover=false] - enable hover (`mouseover`, `mouseout`) listeners\n * @param {boolean}[rightMouseButton=false] - use right mouse clicks\n * @param {boolean}[doubleClick=false] - fire double clicks\n */\n constructor(target: Widget, includeHover?: boolean, rightMouseButton?, doubleClick?: boolean)\n {\n super(target);\n\n this.bound = false;\n this.id = 0;\n this.ishover = false;\n this.mouse = new PIXI.Point();\n this.offset = new PIXI.Point();\n this.movementX = 0;\n this.movementY = 0;\n\n this._includeHover = typeof includeHover === 'undefined' ? true : includeHover;\n this.rightMouseButton = typeof rightMouseButton === 'undefined' ? false : rightMouseButton;\n this._doubleClick = typeof doubleClick === 'undefined' ? false : doubleClick;\n\n target.interactive = true;\n\n this.time = 0;\n this.startEvent();\n\n this.onHover = (): void => null;\n this.onPress = (): void => null;\n this.onClick = (): void => null;\n this.onMove = (): void => null;\n }\n\n /**\n * Whether right mice are used for clicks rather than left mice.\n * @member boolean\n */\n get rightMouseButton(): boolean\n {\n return this._rightMouseButton;\n }\n set rightMouseButton(val: boolean)\n {\n this._rightMouseButton = val;\n\n this.evMouseDown = this._rightMouseButton ? 'rightdown' : 'mousedown';\n this.evMouseUp = this._rightMouseButton ? 'rightup' : 'mouseup';\n this.evMouseUpOutside = this._rightMouseButton ? 'rightupoutside' : 'mouseupoutside';\n }\n\n /**\n * @param {boolean}[includeHover]\n * @param {boolean}[rightMouseButton]\n * @param {boolean}[doubleClick]\n * @override\n */\n startEvent = (\n includeHover = this._includeHover,\n rightMouseButton = this._rightMouseButton,\n doubleClick = this._doubleClick,\n ): void =>\n {\n if (this.isEnabled)\n {\n return;\n }\n\n this._includeHover = includeHover;\n this.rightMouseButton = rightMouseButton;\n this._doubleClick = doubleClick;\n\n const { target } = this;\n\n target.insetContainer.on(this.evMouseDown, this.onMouseDownImpl);\n\n if (!this._rightMouseButton)\n {\n target.insetContainer.on('touchstart', this.onMouseDownImpl);\n }\n\n if (this._includeHover)\n {\n target.insetContainer.on('mouseover', this.onMouseOverImpl);\n target.insetContainer.on('mouseout', this.onMouseOutImpl);\n }\n\n this.isEnabled = true;\n };\n\n /**\n * @override\n */\n stopEvent = (): void =>\n {\n if (!this.isEnabled)\n {\n return;\n }\n\n const { target } = this;\n\n if (this.bound)\n {\n target.insetContainer.removeListener(this.evMouseUp, this.onMouseUpImpl);\n target.insetContainer.removeListener(this.evMouseUpOutside, this.onMouseUpOutsideImpl);\n\n if (!this._rightMouseButton)\n {\n target.insetContainer.removeListener('touchend', this.onMouseUpImpl);\n target.insetContainer.removeListener('touchendoutside', this.onMouseUpOutsideImpl);\n }\n\n this.bound = false;\n }\n\n target.insetContainer.removeListener(this.evMouseDown, this.onMouseDownImpl);\n\n if (!this._rightMouseButton)\n {\n target.insetContainer.removeListener('touchstart', this.onMouseDownImpl);\n }\n\n if (this._includeHover)\n {\n target.insetContainer.removeListener('mouseover', this.onMouseOverImpl);\n target.insetContainer.removeListener('mouseout', this.onMouseOutImpl);\n target.insetContainer.removeListener('mousemove', this.onMouseMoveImpl);\n target.insetContainer.removeListener('touchmove', this.onMouseMoveImpl);\n }\n\n this.isEnabled = false;\n };\n\n protected onMouseDownImpl = (event: PIXI.interaction.InteractionEvent): void =>\n {\n const {\n target: obj,\n evMouseUp,\n onMouseUpImpl: _onMouseUp,\n evMouseUpOutside,\n onMouseUpOutsideImpl: _onMouseUpOutside,\n _rightMouseButton: right,\n } = this;\n\n this.mouse.copyFrom(event.data.global);\n this.id = event.data.identifier;\n this.onPress.call(this.target, event, true);\n\n if (!this.bound)\n {\n obj.insetContainer.on(evMouseUp, _onMouseUp);\n obj.insetContainer.on(evMouseUpOutside, _onMouseUpOutside);\n\n if (!right)\n {\n obj.insetContainer.on('touchend', _onMouseUp);\n obj.insetContainer.on('touchendoutside', _onMouseUpOutside);\n }\n\n this.bound = true;\n }\n\n if (this._doubleClick)\n {\n const now = performance.now();\n\n if (now - this.time < 210)\n {\n this.onClick.call(obj, event);\n }\n else\n {\n this.time = now;\n }\n }\n\n event.data.originalEvent.preventDefault();\n };\n\n protected onMouseUpCommonImpl = (event: PIXI.interaction.InteractionEvent): void =>\n {\n const {\n target: obj,\n evMouseUp,\n onMouseUpImpl: _onMouseUp,\n evMouseUpOutside,\n onMouseUpOutsideImpl: _onMouseUpOutside,\n } = this;\n\n if (event.data.identifier !== this.id)\n {\n return;\n }\n\n this.offset.set(event.data.global.x - this.mouse.x, event.data.global.y - this.mouse.y);\n\n if (this.bound)\n {\n obj.insetContainer.removeListener(evMouseUp, _onMouseUp);\n obj.insetContainer.removeListener(evMouseUpOutside, _onMouseUpOutside);\n\n if (!this._rightMouseButton)\n {\n obj.insetContainer.removeListener('touchend', _onMouseUp);\n obj.insetContainer.removeListener('touchendoutside', _onMouseUpOutside);\n }\n\n this.bound = false;\n }\n\n this.onPress.call(obj, event, false);\n };\n\n protected onMouseUpImpl = (event): void =>\n {\n if (event.data.identifier !== this.id)\n {\n return;\n }\n\n this.onMouseUpCommonImpl(event);\n\n // prevent clicks with scrolling/dragging objects\n if (this.target.dragThreshold)\n {\n this.movementX = Math.abs(this.offset.x);\n this.movementY = Math.abs(this.offset.y);\n\n if (Math.max(this.movementX, this.movementY) > this.target.dragThreshold)\n {\n return;\n }\n }\n\n if (!this._doubleClick)\n {\n this.onClick.call(this.target, event);\n }\n };\n\n protected onMouseUpOutsideImpl = (event): void =>\n {\n if (event.data.identifier !== this.id)\n {\n return;\n }\n\n this.onMouseUpCommonImpl(event);\n };\n\n protected onMouseOverImpl = (event): void =>\n {\n if (!this.ishover)\n {\n this.ishover = true;\n this.target.insetContainer.on('mousemove', this.onMouseMoveImpl);\n this.target.insetContainer.on('touchmove', this.onMouseMoveImpl);\n\n this.onHover.call(this.target, event, true);\n }\n };\n\n protected onMouseOutImpl = (event): void =>\n {\n if (this.ishover)\n {\n this.ishover = false;\n this.target.insetContainer.removeListener('mousemove', this.onMouseMoveImpl);\n this.target.insetContainer.removeListener('touchmove', this.onMouseMoveImpl);\n\n this.onHover.call(this.target, event, false);\n }\n };\n\n protected onMouseMoveImpl = (event): void =>\n {\n this.onMove.call(this.target, event);\n };\n}\n","import * as PIXI from 'pixi.js';\nimport { EventManager } from './EventManager';\nimport { Widget } from '../Widget';\n\n/**\n * `DragManager` handles drag & drop events. It registers listeners for `mousedown`,\n * `touchstart` on the target and `mousemove`, `touchmove`, `mouseup`, `mouseupoutside`,\n * `touchend`, `touchendoutside` on the stage.\n *\n * By default, `draggable` widgets will internally handle drag-n-drop and reassigning\n * the callbacks on their `DragManager` will break their behaviour. You can prevent\n * this by using `eventBroker.dnd` directly without setting `widget.draggable` to\n * `true` (or using `widget.makeDraggable()`).\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.EventManager\n */\nexport class DragManager extends EventManager\n{\n protected isBound: boolean;\n protected isDragging: boolean;\n protected id: number;\n protected dragStart: PIXI.Point;\n protected dragOffset: PIXI.Point;\n protected lastCursor: PIXI.Point;\n protected movementX: number;\n protected movementY: number;\n protected cancel: boolean;\n\n public onPress: (e: PIXI.interaction.InteractionEvent, isPressed: boolean) => void;\n public onDragStart: (e: PIXI.interaction.InteractionEvent) => void;\n public onDragMove: (e: PIXI.interaction.InteractionEvent, dragOffset: PIXI.Point) => void;\n public onDragEnd: (e: PIXI.interaction.InteractionEvent) => void;\n\n constructor(target: Widget)\n {\n super(target);\n\n this.isBound = false;\n this.isDragging = false;\n this.id = 0;\n this.dragStart = new PIXI.Point();\n this.dragOffset = new PIXI.Point();\n this.lastCursor = new PIXI.Point();\n this.movementX = 0;\n this.movementY = 0;\n this.cancel = false;\n\n this.target.interactive = true;\n\n this.onPress = (): void => null;\n this.onDragStart = (): void => null;\n this.onDragMove = (): void => null;\n this.onDragEnd = (): void => null;\n }\n\n startEvent(): void\n {\n if (this.isEnabled)\n {\n return;\n }\n\n const { target } = this;\n\n target.insetContainer.on('mousedown', this.onDragStartImpl);\n target.insetContainer.on('touchstart', this.onDragStartImpl);\n\n this.isEnabled = true;\n }\n\n stopEvent(): void\n {\n if (!this.isEnabled)\n {\n return;\n }\n\n const { target } = this;\n\n if (this.isBound)\n {\n target.stage.removeListener('mousemove', this.onDragMoveImpl);\n target.stage.removeListener('touchmove', this.onDragMoveImpl);\n target.stage.removeListener('mouseup', this.onDragEndImpl);\n target.stage.removeListener('mouseupoutside', this.onDragEndImpl);\n target.stage.removeListener('touchend', this.onDragEndImpl);\n target.stage.removeListener('touchendoutside', this.onDragEndImpl);\n\n this.isBound = false;\n }\n\n target.insetContainer.removeListener('mousedown', this.onDragStartImpl);\n target.insetContainer.removeListener('touchstart', this.onDragStartImpl);\n\n this.isEnabled = false;\n }\n\n protected onDragStartImpl = (e: PIXI.interaction.InteractionEvent): void =>\n {\n const { target } = this;\n\n this.id = e.data.identifier;\n this.onPress(e, true);\n\n if (!this.isBound)\n {\n this.dragStart.copyFrom(e.data.global);\n\n target.stage.on('mousemove', this.onDragMoveImpl);\n target.stage.on('touchmove', this.onDragMoveImpl);\n target.stage.on('mouseup', this.onDragEndImpl);\n target.stage.on('mouseupoutside', this.onDragEndImpl);\n target.stage.on('touchend', this.onDragEndImpl);\n target.stage.on('touchendoutside', this.onDragEndImpl);\n target.stage.on('touchcancel', this.onDragEndImpl);\n\n this.isBound = true;\n }\n\n e.data.originalEvent.preventDefault();\n };\n\n private onDragMoveImpl = (e: PIXI.interaction.InteractionEvent): void =>\n {\n if (e.data.identifier !== this.id)\n {\n return;\n }\n\n const {\n lastCursor,\n dragOffset,\n dragStart,\n target,\n } = this;\n\n this.lastCursor.copyFrom(e.data.global);\n this.dragOffset.set(lastCursor.x - dragStart.x, lastCursor.y - dragStart.y);\n\n if (!this.isDragging)\n {\n this.movementX = Math.abs(dragOffset.x);\n this.movementY = Math.abs(dragOffset.y);\n\n if ((this.movementX === 0 && this.movementY === 0)\n || Math.max(this.movementX, this.movementY) < target.dragThreshold)\n {\n return; // threshold\n }\n\n if (target.dragRestrictAxis !== null)\n {\n this.cancel = false;\n\n if (target.dragRestrictAxis === 'x' && this.movementY > this.movementX)\n {\n this.cancel = true;\n }\n else if (target.dragRestrictAxis === 'y' && this.movementY <= this.movementX)\n {\n this.cancel = true;\n }\n\n if (this.cancel)\n {\n this.onDragEndImpl(e);\n\n return;\n }\n }\n\n this.onDragStart(e);\n this.isDragging = true;\n }\n\n this.onDragMove(e, dragOffset);\n };\n\n private onDragEndImpl = (e: PIXI.interaction.InteractionEvent): void =>\n {\n if (e.data.identifier !== this.id)\n {\n return;\n }\n\n const { target } = this;\n\n if (this.isBound)\n {\n target.stage.removeListener('mousemove', this.onDragMoveImpl);\n target.stage.removeListener('touchmove', this.onDragMoveImpl);\n target.stage.removeListener('mouseup', this.onDragEndImpl);\n target.stage.removeListener('mouseupoutside', this.onDragEndImpl);\n target.stage.removeListener('touchend', this.onDragEndImpl);\n target.stage.removeListener('touchendoutside', this.onDragEndImpl);\n target.stage.removeListener('touchcancel', this.onDragEndImpl);\n\n this.isDragging = false;\n this.isBound = false;\n\n this.onDragEnd(e);\n this.onPress(e, false);\n }\n };\n}\n","import { ClickManager } from './ClickManager';\nimport { DragManager } from './DragManager';\nimport { EventManager } from './EventManager';\nimport { Widget } from '../Widget';\n\n/**\n * The event brokers allows you to access event managers without manually assigning\n * them to a widget. By default, the click (`PUXI.ClickManager`), dnd (`PUXI.DragManager`)\n * are defined. You can add event managers for all (new) widgets by adding an entry to\n * `EventBroker.MANAGER_MAP`.\n *\n * @memberof PUXI\n * @class\n */\nexport class EventBroker\n{\n [key: string]: EventManager | Widget;\n\n constructor(target: Widget)\n {\n this.target = target;\n\n for (const mgr of Object.keys(EventBroker.MANAGER_MAP))\n {\n Object.defineProperty(\n this,\n mgr,\n {\n get(): EventManager\n {\n if (!this[`_${mgr}`])\n {\n this[`_${mgr}`] = new EventBroker.MANAGER_MAP[mgr](this.target);\n }\n\n return this[`_${mgr}`];\n },\n },\n );\n }\n }\n\n static MANAGER_MAP = {\n click: ClickManager,\n dnd: DragManager,\n };\n}\n","import * as PIXI from 'pixi.js';\nimport { EventManager } from './EventManager';\nimport { Widget } from '../Widget';\n\n/**\n * Handles the `wheel` and `scroll` DOM events on widgets. It also registers\n * listeners for `mouseout` and `mouseover`.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.EventManager\n */\nexport class ScrollManager extends EventManager\n{\n private bound: boolean;\n private delta: PIXI.Point;\n private preventDefault: boolean;\n\n constructor(target: Widget, preventDefault = true)\n {\n super(target);\n\n this.bound = false;\n this.delta = new PIXI.Point();\n this.preventDefault = preventDefault;\n\n this.startEvent();\n }\n\n /**\n * @override\n */\n startEvent(): void\n {\n const { target, onHoverImpl, onMouseOutImpl } = this;\n\n target.contentContainer.on('mouseover', onHoverImpl);\n target.contentContainer.on('mouseout', onMouseOutImpl);\n }\n\n /**\n * @override\n */\n stopEvent(): void\n {\n const { target, onMouseScrollImpl, onHoverImpl, onMouseOutImpl } = this;\n\n if (this.bound)\n {\n document.removeEventListener('mousewheel', onMouseScrollImpl);\n document.removeEventListener('DOMMouseScroll', onMouseScrollImpl);\n\n this.bound = false;\n }\n\n target.contentContainer.removeListener('mouseover', onHoverImpl);\n target.contentContainer.removeListener('mouseout', onMouseOutImpl);\n }\n\n private onMouseScrollImpl = (e: WheelEvent): void =>\n {\n const { target, preventDefault, delta } = this;\n\n if (preventDefault)\n {\n event.preventDefault();\n }\n\n if (typeof e.deltaX !== 'undefined')\n {\n delta.set(e.deltaX, e.deltaY);\n }\n else // Firefox\n {\n delta.set(e.axis === 1 ? e.detail * 60 : 0,\n e.axis === 2 ? e.detail * 60 : 0);\n }\n\n this.onMouseScroll.call(target, event, delta);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private onHoverImpl = (e): void =>\n {\n const { onMouseScrollImpl } = this;\n\n if (!this.bound)\n {\n document.addEventListener('mousewheel', onMouseScrollImpl, false);\n document.addEventListener('DOMMouseScroll', onMouseScrollImpl, false);\n\n this.bound = true;\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private onMouseOutImpl = (e): void =>\n {\n const { onMouseScrollImpl } = this;\n\n if (this.bound)\n {\n document.removeEventListener('mousewheel', onMouseScrollImpl);\n document.removeEventListener('DOMMouseScroll', onMouseScrollImpl);\n\n this.bound = false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMouseScroll = function onMouseScroll(event, delta: PIXI.Point): void\n {\n // Default onMouseScroll.\n };\n}\n","import { DragManager } from './event/DragManager';\nimport { DragDropController } from './event/DragDropController';\nimport * as PIXI from 'pixi.js';\nimport { Insets } from './layout-options/Insets';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { MeasureMode, IMeasurable } from './IMeasurable';\nimport { Stage } from './Stage';\nimport { DropShadowFilter } from '@pixi/filter-drop-shadow';\nimport { EventBroker } from './event';\nimport { Style } from './Style';\nimport { Menu } from './Menu';\nimport { PopupMenu } from './PopupMenu';\n\nconst PADDING_PROPERTIES = ['paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom'];\n\nconst PADDING_AXIS_PROPERTIES = ['paddingHorizontal', 'paddingVertical'];\n\nexport const TEXT_STYLE_PROPERTIES = [\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'letterSpacing',\n];\n\n/**\n * A widget is a user interface control that renders content inside its prescribed\n * rectangle on the screen.\n *\n * @memberof PUXI\n * @class\n * @extends PIXI.utils.EventEmitter\n * @implements PUXI.IMeasurable\n */\nexport class Widget extends PIXI.utils.EventEmitter implements IMeasurable\n{\n /**\n * The minimum delay between two clicks to not consider them as a double-click.\n */\n public static CLICK_DELAY = 300;\n\n public readonly insetContainer: PIXI.Container;\n public readonly contentContainer: PIXI.Container;\n public readonly widgetChildren: Widget[];\n public readonly stage: Stage;\n\n initialized: boolean;\n protected dragInitialized: boolean;\n protected dropInitialized: boolean;\n protected isDragging: boolean;\n\n private draggable: boolean;\n private droppable: boolean;\n \n tint: number;\n dirty: boolean;\n _oldWidth: number;\n _oldHeight: number;\n pixelPerfect: boolean;\n\n parent: Widget;\n\n public layoutMeasure: Insets;\n public layoutOptions: LayoutOptions;\n\n protected blendMode: PIXI.BLEND_MODES;\n protected background: PIXI.Container;\n protected _measuredWidth: number;\n protected _measuredHeight: number;\n\n private _eventBroker: EventBroker;\n private _paddingLeft: number;\n private _paddingTop: number;\n private _paddingRight: number;\n private _paddingBottom: number;\n private _width: number;\n private _height: number;\n private _elevation: number;\n private _dropShadow: DropShadowFilter;\n private _layoutDirty: boolean;\n\n private singleClickTimeout: NodeJS.Timeout;\n private style: Style;\n private styleID: number;\n private contextMenu: Menu;\n private contextPopup: PopupMenu;\n\n constructor()\n {\n super();\n\n /**\n * This container owns the background + content of this widget.\n * @member {PIXI.Container}\n * @readonly\n */\n this.insetContainer = new PIXI.Container();\n\n /**\n * This container holds the content of this widget. Subclasses should add\n * renderable display-objects to this container.\n * @member {PIXI.Container}\n * @readonly\n */\n this.contentContainer = this.insetContainer.addChild(new PIXI.Container());\n\n /**\n * Children of this widget. Use `WidgetGroup` to position children.\n * @member {PUXI.Widget[]}\n * @readonly\n */\n this.widgetChildren = [];\n\n /**\n * Stage whose scene graph holds this widget. Once set, this cannot be changed.\n * @member {PUXI.Stage}\n * @readonly\n */\n this.stage = null;\n\n /**\n * Layout insets of this widget. In normal state, the widget should be in this\n * rectangle inside the parent reference frame.\n * @member {PUXI.Insets}\n * @readonly\n */\n this.layoutMeasure = new Insets();\n\n this.initialized = false;\n this.dragInitialized = false;\n this.dropInitialized = false;\n\n this.dirty = true;\n this._oldWidth = -1;\n this._oldHeight = -1;\n this.pixelPerfect = true;\n\n this._paddingLeft = 0;\n this._paddingTop = 0;\n this._paddingRight = 0;\n this._paddingBottom = 0;\n this._elevation = 0;\n\n this.tint = 0;\n this.blendMode = PIXI.BLEND_MODES.NORMAL;\n\n this.draggable = false;\n this.droppable = false;\n\n this.singleClickTimeout = null;\n this.style = null;\n this.styleID = -1;\n\n // Use a separate callback function to allow this.on* methods to be reassigned.\n this.insetContainer.on('pointerdown', (e: PIXI.InteractionEvent) => { this.onPointerPress(e); });\n this.insetContainer.on('pointermove', (e: PIXI.InteractionEvent) => { this.onPointerMove(e); });\n this.insetContainer.on('pointerup', (e: PIXI.InteractionEvent) => { this.onPointerRelease(e); });\n this.insetContainer.on('pointerover', (e: PIXI.InteractionEvent) => { this.onPointerEnter(e); });\n this.insetContainer.on('pointerout', (e: PIXI.InteractionEvent) => { this.onPointerExit(e); });\n this.insetContainer.on('rightclick', (e: PIXI.InteractionEvent) => { this.onRightClick(e); });\n }\n\n /**\n * Update method that is to be overriden. This is called before a `render()`\n * pass on widgets that are dirty.\n *\n * @private\n */\n update(): any\n {\n if (this._layoutDirty)\n {\n // console.log('here');\n setTimeout(() =>\n {\n if (this._layoutDirty)\n {\n this.stage.measureAndLayout();\n }\n }, 0);\n }\n\n if (this.style && this.styleID !== this.style.dirtyID)\n {\n this.onStyleChange(this.style);\n this.styleID = this.style.dirtyID;\n }\n }\n\n /**\n * The measured width that is used by the parent's layout manager to place this\n * widget.\n * @member {number}\n */\n get measuredWidth(): number\n {\n return this._measuredWidth;\n }\n\n /**\n * The measured height that is used by the parent's layout manager to place this\n * widget.\n * @member {number}\n */\n get measuredHeight(): number\n {\n return this._measuredHeight;\n }\n\n /**\n * Alias for `Widget.measuredWidth`.\n *\n * @returns {number} the measured width\n */\n getMeasuredWidth(): number\n {\n return this._measuredWidth;\n }\n\n /**\n * Alias for `Widget.measuredHeight`.\n *\n * @returns {number} the measured height\n */\n getMeasuredHeight(): number\n {\n return this._measuredHeight;\n }\n\n /**\n * Override this method to measure the dimensions for your widget. By default, it\n * will use the natural width/height of this widget's content (`contentContainer`)\n * plus any padding.\n *\n * @param {number} width - width of region provided by parent\n * @param {number} height - height of region provided by parent\n * @param {PUXI.MeasureMode} widthMode - mode in which provided width is to be used\n * @param {PUXI.MeasureMode} heightMode - mode in which provided height is to be used\n */\n onMeasure(width: number, height: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n const naturalWidth = this.contentContainer.width + this.paddingHorizontal;\n const naturalHeight = this.contentContainer.height + this.paddingVertical;\n\n switch (widthMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredWidth = width;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredWidth = naturalWidth;\n break;\n case MeasureMode.AT_MOST:\n this._measuredWidth = Math.min(width, naturalWidth);\n break;\n }\n\n switch (heightMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredHeight = height;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredHeight = naturalHeight;\n break;\n case MeasureMode.AT_MOST:\n this._measuredHeight = Math.min(height, naturalHeight);\n break;\n }\n }\n\n /**\n * This method calls `Widget.onMeasure` and should not be overriden. It does internal\n * bookkeeping.\n *\n * @param {number} width\n * @param {number} height\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n */\n measure(width: number, height: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n this.onMeasure(width, height, widthMode, heightMode);\n }\n\n /**\n * This method should set the frame in which rendering will occur and lay out\n * child widgets in that frame.\n *\n * @param l\n * @param t\n * @param r\n * @param b\n * @param dirty\n * @protected\n */\n onLayout(l: number, t: number = l, r: number = l, b: number = t, dirty = true): void\n {\n this.layoutMeasure.left = l;\n this.layoutMeasure.top = t;\n this.layoutMeasure.right = r;\n this.layoutMeasure.bottom = b;\n\n this._width = r - l;\n this._height = b - t;\n\n if (this.background)\n {\n this.background.x = 0;\n this.background.y = 0;\n this.background.width = r - l;\n this.background.height = b - t;\n }\n\n // Update parallel PIXI node too!\n this.insetContainer.x = l;\n this.insetContainer.y = t;\n this.contentContainer.x = this._paddingLeft;\n this.contentContainer.y = this._paddingTop;\n\n // Don't set width/height on inset, content because that would scale\n // the contents (we don't want that).\n\n this._layoutDirty = false;\n }\n\n layout(l: number, t: number = l, r: number = l, b: number = t, dirty = true): void\n {\n this.onLayout(l, t, r, b, dirty);\n }\n\n /**\n * Use this to specify how you want to layout this widget w.r.t its parent.\n * The specific layout options class depends on which layout you are\n * using in the parent widget.\n *\n * @param {PUXI.LayoutOptions} lopt\n * @returns {Widget} this\n */\n setLayoutOptions(lopt: LayoutOptions): Widget\n {\n this.layoutOptions = lopt;\n\n return this;\n }\n\n /**\n * This is invoked when a style is applied on the widget. If you override it, you must pass through the superclass\n * implementation.\n *\n * @param style\n */\n protected onStyleChange(style: Style): void\n {\n const styleData = style.getProperties(\n 'backgroundColor',\n 'background',\n 'elevation',\n 'padding',\n 'paddingHorizontal',\n 'paddingVertical',\n 'paddingLeft',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n );\n\n // Set background of widget\n if (styleData.background)\n {\n this.setBackground(styleData.background);\n }\n else if (typeof styleData.backgroundColor !== 'undefined')\n {\n this.setBackground(styleData.backgroundColor);\n }\n\n // Set elevation\n if (typeof styleData.elevation !== 'undefined')\n {\n this.setElevation(styleData.elevation);\n }\n\n // Set _paddingLeft, _paddingTop, _paddingRight, _paddingBottom\n PADDING_PROPERTIES.forEach((propName, i) =>\n {\n if (typeof styleData[propName] === 'number')\n {\n this[`_${propName}`] = styleData[propName];\n }\n else if (typeof styleData[PADDING_AXIS_PROPERTIES[i % 2]] === 'number')\n {\n this[`_${propName}`] = styleData[PADDING_AXIS_PROPERTIES[i % 2]];\n }\n else if (typeof styleData.padding === 'number')\n {\n this[`_${propName}`] = styleData.padding;\n }\n });\n\n this.dirty = true;\n }\n\n /**\n * Handles the pointer-entered event.\n *\n * If you override this method, you must call through to the superclass implementation.\n *\n * @param e - the triggering interaction event\n */\n onPointerEnter(e: PIXI.InteractionEvent): void\n {\n this.onHoverChange(e, true);\n }\n\n /**\n * Handles the pointer-exited event.\n *\n * If you override this method, you must call through to the superclass implementation.\n *\n * @param e\n */\n onPointerExit(e: PIXI.InteractionEvent): void\n {\n this.onHoverChange(e, false);\n }\n\n /**\n * Handles the pointer-down event. If you override this method, you must call through to the superclass\n * implementation.\n */\n onPointerPress(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n /**\n * Handles the pointer-move event. If you override this method, you must call through to the superclass\n * implementation.\n */\n onPointerMove(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n onPointerRelease(e: PIXI.InteractionEvent): void\n {\n if (!this.singleClickTimeout)\n {\n // Invoke onClick after ~300ms only if it isn't a double-click.\n this.singleClickTimeout = setTimeout(() =>\n {\n this.singleClickTimeout = null;\n }, Widget.CLICK_DELAY);\n\n this.onClick(e);\n }\n else\n {\n clearTimeout(this.singleClickTimeout);\n\n this.singleClickTimeout = null;\n\n // Invoke onDoubleClick after the onPointerPress handler.\n setTimeout(() => { this.onDoubleClick(e); }, 0);\n }\n\n return;\n }\n\n /**\n * Event handler for change in the hover state.\n *\n * @param e\n * @param hover\n */\n onHoverChange(e: PIXI.InteractionEvent, hover: boolean): void\n {\n return;\n }\n\n onClick(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n onDoubleClick(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n onRightClick(e: PIXI.InteractionEvent): void\n {\n console.log('RIGHT_CLICK');\n e.data.originalEvent.preventDefault();\n\n if (this.contextMenu)\n {\n if (!this.contextPopup)\n {\n // this.contextPopup = new PopupMenu(this.contextMenu);\n }\n\n const location = e.data.getLocalPosition(this.stage);\n\n // this.openPopupMenu(location.x, location.y);\n }\n\n return;\n }\n\n /**\n * The event broker for this widget that holds all the event managers. This can\n * be used to start/stop clicks, drags, scrolls and configure how those events\n * are handled/interpreted.\n * @member PUXI.EventBroker\n */\n get eventBroker(): EventBroker\n {\n if (!this._eventBroker)\n {\n this._eventBroker = new EventBroker(this);\n }\n\n return this._eventBroker;\n }\n\n /**\n * Padding on left side.\n * @member {number}\n */\n get paddingLeft(): number\n {\n return this._paddingLeft;\n }\n set paddingLeft(val: number)\n {\n this._paddingLeft = val;\n this.dirty = true;\n }\n\n /**\n * Padding on top side.\n * @member {number}\n */\n get paddingTop(): number\n {\n return this._paddingTop;\n }\n set paddingTop(val: number)\n {\n this._paddingTop = val;\n this.dirty = true;\n }\n\n /**\n * Padding on right side.\n * @member {number}\n */\n get paddingRight(): number\n {\n return this._paddingRight;\n }\n set paddingRight(val: number)\n {\n this._paddingRight = val;\n this.dirty = true;\n }\n\n /**\n * Padding on bottom side.\n * @member {number}\n */\n get paddingBottom(): number\n {\n return this._paddingBottom;\n }\n set paddingBottom(val: number)\n {\n this._paddingBottom = val;\n this.dirty = true;\n }\n\n /**\n * Sum of left & right padding.\n * @member {number}\n * @readonly\n */\n get paddingHorizontal(): number\n {\n return this._paddingLeft + this._paddingRight;\n }\n\n /**\n * Sum of top & bottom padding.\n * @member {number}\n * @readonly\n */\n get paddingVertical(): number\n {\n return this._paddingTop + this._paddingBottom;\n }\n\n /**\n * Whether this widget is interactive in the PixiJS scene graph.\n * @member {boolean}\n */\n get interactive(): boolean\n {\n return this.insetContainer.interactive;\n }\n set interactive(val: boolean)\n {\n this.insetContainer.interactive = true;\n this.contentContainer.interactive = true;\n }\n\n /**\n * Layout width of this widget.\n * @member {number}\n * @readonly\n */\n get width(): number\n {\n return this._width;\n }\n\n /**\n * Layout height of this widget.\n * @member {number}\n * @readonly\n */\n get height(): number\n {\n return this._height;\n }\n\n /**\n * Layout width of this widget's content, which is the width minus horizontal padding.\n * @member {number}\n * @readonly\n */\n get contentWidth(): number\n {\n return this._width - this.paddingHorizontal;\n }\n\n /**\n * Layout height of this widget's content, which is the height minus vertical padding.\n * @member {number}\n * @readonly\n */\n get contentHeight(): number\n {\n return this._height - this.paddingVertical;\n }\n\n /**\n * Alpha of this widget & its contents.\n * @member {number}\n */\n get alpha(): number\n {\n return this.insetContainer.alpha;\n }\n set alpha(val: number)\n {\n this.insetContainer.alpha = val;\n }\n\n /**\n * Sets the padding values.\n *\n * To set all paddings to one value:\n * ```\n * widget.setPadding(8);\n * ```\n *\n * To set horizontal & vertical padding separately:\n * ```\n * widget.setPadding(4, 12);\n * ```\n *\n * @param {number}[l=0] - left padding\n * @param {number}[t=l] - top padding (default is equal to left padding)\n * @param {number}[r=l] - right padding (default is equal to right padding)\n * @param {number}[b=t] - bottom padding (default is equal to top padding)\n */\n setPadding(l: number, t: number = l, r: number = l, b: number = t): Widget\n {\n this._paddingLeft = l;\n this._paddingTop = t;\n this._paddingRight = r;\n this._paddingBottom = b;\n this.dirty = true;\n\n return this;\n }\n\n /**\n * @returns {PIXI.Container} - the background display-object\n */\n getBackground(): PIXI.Container\n {\n return this.background;\n }\n\n /**\n * The background of a widget is a `PIXI.DisplayObject` that is rendered before\n * all of its children.\n *\n * @param {PIXI.Container | number | string} bg - the background display-object or\n * a color that will be used to generate a `PIXI.Graphics` as the background.\n */\n setBackground(bg: PIXI.Container | number | string): Widget\n {\n if (this.background)\n {\n this.insetContainer.removeChild(this.background);\n }\n\n if (typeof bg === 'string')\n {\n bg = PIXI.utils.string2hex(bg);\n }\n if (typeof bg === 'number')\n {\n bg = new PIXI.Graphics()\n .beginFill(bg)\n .drawRect(0, 0, 1, 1)\n .endFill();\n }\n\n this.background = bg;\n\n if (bg)\n {\n bg.width = this.width;\n bg.height = this.height;\n this.insetContainer.addChildAt(bg, 0);\n }\n\n if (bg && this._elevation && this._dropShadow)\n {\n if (!this.background.filters)\n {\n this.background.filters = [];\n }\n\n this.background.filters.push(this._dropShadow);\n }\n\n return this;\n }\n\n /**\n * @returns {number} the alpha on the background display-object.\n */\n getBackgroundAlpha(): number\n {\n return this.background ? this.background.alpha : 1;\n }\n\n /**\n * This can be used to set the alpha on the _background_ of this widget. This\n * does not affect the widget's contents nor individual components of the\n * background display-object.\n *\n * @param {number} val - background alpha\n */\n setBackgroundAlpha(val: number): Widget\n {\n if (!this.background)\n {\n this.setBackground(0xffffff);\n }\n\n this.background.alpha = val;\n\n return this;\n }\n\n /**\n * Set the context-menu to be shown on right-clicks.\n *\n * This feature is not released yet, i.e. does not work!\n *\n * @param menu\n * @alpha\n */\n setContextMenu(menu: Menu): void\n {\n this.contextMenu = menu;\n }\n\n /**\n * @return {number} the elevation set on this widget\n */\n getElevation(): number\n {\n return this._elevation;\n }\n\n /**\n * This can be used add a drop-shadow that will appear to raise this widget by\n * the given elevation against its parent.\n *\n * @param {number} val - elevation to use. 2px is good for most widgets.\n */\n setElevation(val: number): Widget\n {\n this._elevation = val;\n\n if (val === 0 && this._dropShadow)\n {\n if (!this.background)\n {\n return this;\n }\n\n const i = this.background.filters.indexOf(this._dropShadow);\n\n if (i > 0)\n {\n this.background.filters.splice(i, 1);\n }\n }\n else if (val > 0)\n {\n if (!this._dropShadow)\n {\n if (this.background && !this.background.filters)\n {\n this.background.filters = [];\n }\n\n this._dropShadow = new DropShadowFilter({ distance: val });\n\n if (this.background)\n {\n this.background.filters.push(this._dropShadow);\n }\n }\n\n this._dropShadow.distance = val;\n }\n\n return this;\n }\n\n /**\n * Set the style applied on this widget. To unset a style, simply pass {@code null}.\n *\n * @param style\n */\n setStyle(style?: Style): this\n {\n this.style = style;\n this.styleID = -1;\n\n return this;\n }\n\n /**\n * Will trigger a full layout pass next animation frame.\n */\n requestLayout(): void\n {\n this._layoutDirty = true;\n }\n\n /**\n * Adds the widgets as children of this one.\n *\n * @param {PUXI.Widget[]} widgets\n * @returns {Widget} - this widget\n */\n addChild(...widgets: Widget[]): Widget\n {\n for (let i = 0; i < widgets.length; i++)\n {\n const widget = widgets[i];\n\n if (widget.parent)\n {\n widget.parent.removeChild(widget);\n }\n\n widget.parent = this;\n this.contentContainer.addChild(widget.insetContainer);\n this.widgetChildren.push(widget);\n }\n\n return this;\n }\n\n /**\n * Orphans the widgets that are children of this one.\n *\n * @param {PUXI.Widget[]} widgets\n * @returns {Widget} - this widget\n */\n removeChild(...widgets: Widget[]): Widget\n {\n for (let i = 0; i < widgets.length; i++)\n {\n const widget = widgets[i];\n const index = this.widgetChildren.indexOf(widget);\n\n if (index !== -1)\n {\n widget.insetContainer.parent.removeChild(widget.insetContainer);\n this.widgetChildren.splice(index, 1);\n widget.parent = null;\n }\n }\n\n return this;\n }\n\n private openPopupMenu(x: number, y: number): void\n {\n const stage = this.stage;\n const lopt = this.contextPopup.layoutOptions as FastLayoutOptions;\n\n lopt.x = x;\n lopt.y = y;\n\n this.stage.addChild(this.contextPopup);\n }\n\n private closePopupMenu(): void\n {\n this.stage.removeChild(this.contextPopup);\n }\n\n /**\n * Makes this widget `draggable`.\n */\n makeDraggable(): Widget\n {\n this.draggable = true;\n\n if (this.initialized)\n {\n this.initDraggable();\n }\n\n return this;\n }\n\n /**\n * Makes this widget not `draggable`.\n */\n clearDraggable(): void\n {\n if (this.dragInitialized)\n {\n this.dragInitialized = false;\n (this.eventBroker.dnd as DragManager).stopEvent();\n }\n }\n\n /**\n * Widget initialization related to the stage. This method should always call\n * `super.initialize()`.\n *\n * This method expects `stage` to be set before calling it. This is handled\n * by the `Stage` itself.\n *\n * This will set `initialized` to true. If it was already set to true, it _should\n * do nothing_.\n *\n * @protected\n */\n initialize(): void\n {\n if (this.initialized)\n {\n return;\n }\n\n if (this.draggable)\n {\n this.initDraggable();\n }\n if (this.droppable)\n {\n this.initDroppable();\n }\n\n this.initialized = true;\n }\n\n private initDraggable(): void\n {\n if (this.dragInitialized)\n {\n return;\n }\n\n this.dragInitialized = true;\n\n const realPosition = new PIXI.Point();\n const dragPosition = new PIXI.Point();\n\n const dnd: DragManager = this.eventBroker.dnd as DragManager;\n const { insetContainer } = this;\n\n dnd.onDragStart = (e: PIXI.InteractionEvent): void =>\n {\n const added = DragDropController.add(this, e);\n\n if (!this.isDragging && added)\n {\n this.isDragging = true;\n insetContainer.interactive = false;\n realPosition.copyFrom(insetContainer.position);\n\n this.emit('draggablestart', e);\n }\n };\n\n dnd.onDragMove = (e: PIXI.InteractionEvent, offset: PIXI.Point): void =>\n {\n if (this.isDragging)\n {\n dragPosition.set(realPosition.x + offset.x, realPosition.y + offset.y);\n\n insetContainer.x = dragPosition.x;\n insetContainer.y = dragPosition.y;\n\n this.emit('draggablemove', e);\n }\n };\n\n dnd.onDragEnd = (e: PIXI.InteractionEvent): void =>\n {\n if (this.isDragging)\n {\n this.isDragging = false;\n DragDropController.getItem(this);\n\n // Return to container after 0ms if not picked up by a droppable\n setTimeout((): void =>\n {\n this.insetContainer.interactive = true;\n this.insetContainer.position.copyFrom(realPosition);\n\n this.emit('draggableend', e);\n }, 0);\n }\n };\n\n dnd.startEvent()\n }\n\n /**\n * Makes this widget `droppable`.\n */\n makeDroppable(): Widget\n {\n this.droppable = true;\n\n if (this.initialized)\n {\n this.initDroppable();\n }\n\n return this;\n }\n\n protected onDrop: (e: PIXI.interaction.InteractionEvent) => void;\n\n /**\n * Makes this widget not `droppable`.\n */\n clearDroppable(): void\n {\n if (this.dropInitialized)\n {\n this.dropInitialized = false;\n this.contentContainer.removeListener('mouseup', this.onDrop);\n this.contentContainer.removeListener('touchend', this.onDrop);\n }\n }\n\n private initDroppable(): void\n {\n if (!this.dropInitialized)\n {\n this.dropInitialized = true;\n const container = this.contentContainer;\n\n this.contentContainer.interactive = true;\n\n this.onDrop = (event): void =>\n {\n const item = DragDropController.getEventItem(event, this.dropGroup);\n\n if (item && item.isDragging)\n {\n item.isDragging = false;\n item.insetContainer.interactive = true;\n const parent = this.droppableReparent !== null ? this.droppableReparent : self;\n\n parent.container.toLocal(item.container.position, item.container.parent, item);\n if (parent.container != item.container.parent) { parent.addChild(item); }\n }\n };\n\n container.on('mouseup', this.onDrop);\n container.on('touchend', this.onDrop);\n }\n }\n\n /**\n * Creates a widget that holds the display-object as its content. If `content` is\n * a `PUXI.Widget`, then it will be returned.\n * @param {PIXI.Container | Widget} content\n * @static\n */\n static fromContent(content: PIXI.Container | Widget): Widget\n {\n if (content instanceof Widget)\n {\n return content;\n }\n\n const widget = new Widget();\n\n widget.contentContainer.addChild(content);\n\n return widget;\n }\n\n /**\n * Easy utility to resolve measured dimension.\n * @param {number} natural - your widget's natural dimension\n * @param {number} limit - width/height limit passed by parent\n * @param {PUXI.MeasureMode} mode - measurement mode passed by parent\n */\n static resolveMeasuredDimen(natural: number, limit: number, mode: MeasureMode): number\n {\n if (mode === MeasureMode.EXACTLY)\n {\n return limit;\n }\n else if (mode === MeasureMode.AT_MOST)\n {\n return Math.min(limit, natural);\n }\n\n return natural;\n }\n}\n","/**\n * Alignments supported by layout managers in PuxiJS core.\n *\n * @memberof PUXI\n * @enum\n */\nexport enum ALIGN\n{\n LEFT = 0,\n TOP = 0,\n MIDDLE = 0xff1,\n CENTER = 0xff1,\n RIGHT = 0xffff1,\n BOTTOM = 0xffff1,\n NONE = 0xffffffff\n}\n","/**\n * This are the base constraints that you can apply on a `PUXI.Widget` under any\n * layout manager. It specifies the dimensions of a widget, while the position\n * of the widget is left to the parent to decide. If a dimension (width or height)\n * is set to a value between -1 and 1, then it is interpreted as a percentage\n * of the parent's dimension.\n *\n * The following example will render a widget at 50% of the parent's width and 10px height:\n *\n * ```js\n * const widget = new PUXI.Widget();\n * const parent = new PUXI.Widget();\n *\n * widget.layoutOptions = new PUXI.LayoutOptions(\n * .5,\n * 10\n * );\n * parent.addChild(widget);\n * ```\n *\n * @memberof PUXI\n * @class\n */\nexport class LayoutOptions\n{\n public static FILL_PARENT = 0xfffffff1;\n public static WRAP_CONTENT = 0xfffffff2;\n public static MAX_DIMEN = 0xfffffff0;\n\n public static DEFAULT = new LayoutOptions();\n\n public width: number;\n public height: number;\n public cache: any;\n\n private _marginLeft: number;\n private _marginTop: number;\n private _marginRight: number;\n private _marginBottom: number;\n\n /**\n * @param {number}[width = LayoutOptions.WRAP_CONTENT]\n * @param {number}[height = LayoutOptions.WRAP_CONTENT]\n */\n constructor(width: number | string = LayoutOptions.WRAP_CONTENT, height: number | string = LayoutOptions.WRAP_CONTENT)\n {\n this.setWidth(width);\n this.setHeight(height);\n\n /**\n * Used by the layout manager to cache calculations.\n * @member {object}\n */\n this.cache = {};\n }\n\n /**\n * Utility method to store width that converts strings to their number format.\n *\n * @param {number | string} val\n * @example\n * ```\n * lopt.setWidth('68.7%');// 68.7% of parent's width\n * lopt.setWidth('96px');// 96px\n * lopt.setWidth(34);// 34px\n * lopt.setWidth(.45);// 45% of parent's width\n * ```\n */\n setWidth(val: number | string): void\n {\n /**\n * Preferred height of the widget in pixels. If its value is between -1 and 1, it\n * is interpreted as a percentage of the parent's height.\n * @member {number}\n * @default {PUXI.LayoutOptions.WRAP_CONTENT}\n */\n this.width = LayoutOptions.parseDimen(val);\n }\n\n /**\n * Utility method to store height that converts strings to their number format.\n *\n * @param {number | string} val\n * @example\n * ```\n * lopt.setHeight('68.7%');// 68.7% of parent's height\n * lopt.setHeight('96px');// 96px\n * lopt.setHeight(34);// 34px\n * lopt.setHeight(.45);// 45% of parent's height\n * ```\n */\n setHeight(val: number | string): void\n {\n /**\n * Preferred width of the widget in pixels. If its value is between -1 and 1, it\n * is interpreted as a percentage of the parent's width.\n * @member {number}\n * @default {PUXI.LayoutOptions.WRAP_CONTENT}\n */\n this.height = LayoutOptions.parseDimen(val);\n }\n\n /**\n * @member {boolean} - whether the specified width is a constant\n * (not a percentage, `WRAP_CONTENT`, or `FILL_PARENT`)\n */\n get isWidthPredefined(): boolean\n {\n return this.width > 1 && this.width <= LayoutOptions.MAX_DIMEN;\n }\n\n /**\n * @member {boolean} - whether the specified height is a constant\n * (not a percentage, `WRAP_CONTENT`, or `FILL_PARENT`)\n */\n get isHeightPredefined(): boolean\n {\n return this.height > 1 && this.height <= LayoutOptions.MAX_DIMEN;\n }\n\n /**\n * The left margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginLeft(): number\n {\n return this._marginLeft || 0;\n }\n set marginLeft(val: number)\n {\n this._marginLeft = val;\n }\n\n /**\n * This top margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginTop(): number\n {\n return this._marginTop || 0;\n }\n set marginTop(val: number)\n {\n this._marginTop = val;\n }\n\n /**\n * The right margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginRight(): number\n {\n return this._marginRight || 0;\n }\n set marginRight(val: number)\n {\n this._marginRight = val;\n }\n\n /**\n * The bottom margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginBottom(): number\n {\n return this._marginBottom || 0;\n }\n set marginBottom(val: number)\n {\n this._marginBottom = val;\n }\n\n /**\n * @param left\n * @param top\n * @param right\n * @param bottom\n */\n setMargin(left: number, top: number, right: number, bottom: number): void\n {\n this._marginLeft = left;\n this._marginTop = top;\n this._marginRight = right;\n this._marginBottom = bottom;\n }\n\n static parseDimen(val: number | string): number\n {\n if (typeof val === 'string')\n {\n if (val.endsWith('%'))\n {\n val = parseFloat(val.replace('%', '')) / 100;\n }\n else if (val.endsWith('px'))\n {\n val = parseFloat(val.replace('px', ''));\n }\n\n if (typeof val === 'string' || isNaN(val))\n {\n throw new Error('Width could not be parsed!');\n }\n }\n\n return val;\n }\n}\n","import { ALIGN } from './Align';\nimport { LayoutOptions } from './LayoutOptions';\n\ninterface IAnchorLayoutParams\n{\n anchorLeft?: number;\n anchorTop?: number;\n anchorRight?: number;\n anchorBottom?: number;\n horizontalAlign?: ALIGN;\n verticalAlign?: ALIGN;\n width: number | string;\n height: number | string;\n}\n\n/**\n * @memberof PUXI\n * @interface IAnchorLayoutParams\n * @property {number} anchorLeft - distance from parent's left inset to child's left edge\n * @property {number} anchorTop - distance from parent's top inset to child's top edge\n * @property {number} anchorRight - distance from parent's right inset to child's right edge\n * @property {number} anchorBottom - distance from parent's bottom insets to child's bottom edge\n * @property {PUXI.ALIGN} horizontalAlign - horizontal alignment of child in anchor region\n * @property {PUXI.ALIGN} verticalAlign - vertical alignment of child in anchor region\n * @property {number | string} width - requested width of widget (default is `WRAP_CONTENT`)\n * @property {number | string} height - requested height of widget (default is `WRAP_CONTENT`)\n */\n\n/**\n * Anchors the edge of a widget to defined offsets from the parent's insets.\n *\n * The following example will render a widget at (10px, 15%) with a width extending\n * to the parent's center and a height extending till 40px above the parent's bottom\n * inset.\n * ```js\n * new PUXI.AnchoredLayoutOptions({\n * anchorLeft: 10,\n * anchorTop: .15,\n * anchorRight: .5,\n * anchorBottom: 40\n * });\n * ```\n *\n * ### Intra-anchor region alignment\n *\n * You can specify how the widget should be aligned in the intra-anchor region using the\n * `horizontalAlign` and `verticalAlign` properties.\n *\n * ### Support for FILL_PARENT and percentage-of-parent dimensions\n *\n * Anchor layout does not support a width/height that is `LayoutOptions.FILL_PARENT`\n * or a percentage of the parent's width/height. Instead, you can define anchors that\n * result in the equivalent behaviour.\n *\n * @memberof PUXI\n * @extends PUXI.LayoutOptions\n * @class\n */\nexport class AnchorLayoutOptions extends LayoutOptions\n{\n public anchorLeft: number;\n public anchorTop: number;\n public anchorRight: number;\n public anchorBottom: number;\n\n public horizontalAlign: ALIGN;\n public verticalAlign: ALIGN;\n\n constructor(options: IAnchorLayoutParams)\n {\n super(options.width, options.height);\n\n this.anchorLeft = options.anchorLeft || 0;\n this.anchorTop = options.anchorTop || 0;\n this.anchorBottom = options.anchorBottom || 0;\n this.anchorRight = options.anchorRight || 0;\n\n this.horizontalAlign = options.horizontalAlign || ALIGN.LEFT;\n this.verticalAlign = options.verticalAlign || ALIGN.CENTER;\n }\n}\n","import { LayoutOptions } from './LayoutOptions';\nimport * as PIXI from 'pixi.js';\n\nexport interface IFastLayoutParams\n{\n width?: number | string;\n height?: number | string;\n x?: number;\n y?: number;\n anchor?: PIXI.Point;\n}\n\n/**\n * @memberof PUXI\n * @interface\n * @property {number} width\n * @property {number} height\n * @property {number} x\n * @property {number} y\n * @property {PIXI.Point} anchor\n */\n\n/**\n * `PUXI.FastLayoutOptions` is an extension to `PUXI.LayoutOptions` that also\n * defines the x & y coordinates. It is accepted by the stage and `PUXI.FastLayout`.\n *\n * If x or y is between -1 and 1, then that dimension will be interpreted as a\n * percentage of the parent's width or height.\n *\n * @memberof PUXI\n * @extends PUXI.LayoutOptions\n * @class\n */\nexport class FastLayoutOptions extends LayoutOptions\n{\n static DEFAULT_ANCHOR = new PIXI.Point(0, 0);\n static CENTER_ANCHOR = new PIXI.Point(0.5, 0.5);// fragile, shouldn't be modified\n\n x: number;\n y: number;\n anchor: PIXI.Point;\n\n constructor(options: IFastLayoutParams)\n {\n super(options.width, options.height);\n\n /**\n * X-coordinate of the widget in its parent's reference frame. If it is\n * absolutely less than 1, then it will be interpreted as a percent of\n * the parent's width.\n * @member {number}\n * @default 0\n */\n this.x = options.x || 0;\n\n /**\n * Y-coordinate of the widget in its parent's reference frame. If it is\n * absolutely less than 1, then it will be interpreted as a percent of\n * the parent's height.\n * @member {number}\n * @default 0\n */\n this.y = options.y || 0;\n\n /**\n * The anchor is a normalized point telling where the (x,y) position of the\n * widget lies inside of it. By default, it is (0, 0), which means that the\n * top-left corner of the widget will be at (x,y); however, setting it to\n * (.5,.5) will make the _center of the widget_ be at (x,y) in the parent's\n * reference frame.\n * @member {PIXI.Point}\n * @default PUXI.FastLayoutOptions.DEFAULT_ANCHOR\n */\n this.anchor = options.anchor || FastLayoutOptions.DEFAULT_ANCHOR.clone();\n }\n}\n","import { LayoutOptions } from './LayoutOptions';\nimport { ALIGN } from './Align';\n\nexport interface IBorderLayoutParams\n{\n width?: number;\n height?: number;\n region?: number;\n horizontalAlign?: ALIGN;\n verticalAlign?: ALIGN;\n}\n\n/**\n * @memberof PUXI\n * @interface IBorderLayoutParams\n * @property {number} width\n * @property {number} height\n * @property {number} region\n * @property {number} horizontalAlign\n * @property {number} verticalAlign\n */\n\n/**\n * `PUXI.BorderLayoutOptions` defines a simple layout with five regions - the center and\n * four regions along each border. The top and bottom regions span the full width of\n * the parent widget-group. The left and right regions span the height of the layout\n * minus the top and bottom region heights.\n *\n * ```\n * ------------------------------------------------\n * | TOP REGION |\n * ------------------------------------------------\n * | | | |\n * | LEFT | CENTER | RIGHT |\n * | REGION | REGION | REGION |\n * | | | |\n * ------------------------------------------------\n * | BOTTOM REGION |\n * ------------------------------------------------\n * ```\n *\n * The height of the layout is measured as the sum of the heights of the top, center, and bottom\n * regions. Similarly, the width of the layout is measured as the width of the left, center, and\n * right regions.\n *\n * As of now, border layout doesn't support percent widths and heights.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.LayoutOptions\n */\nexport class BorderLayoutOptions extends LayoutOptions\n{\n /**\n * Positions a widget inside the left border of the layout.\n * @static\n * @member {number}\n */\n static REGION_LEFT = 0xeff1;\n\n /**\n * Positions a widget below the top border of the layout.\n * @static\n * @member {number}\n */\n static REGION_TOP = 0xeff2;\n\n /**\n * Positions a widget below the right border of the layout.\n * @static\n * @member {number}\n */\n static REGION_RIGHT = 0xeff3;\n\n /**\n * Positions a widget below the top border of the layout.\n * @static\n * @member {number}\n */\n static REGION_BOTTOM = 0xeff4;\n\n /**\n * Positions a widget in the center of the layout. The main content of the layout\n * should be in the center.\n * @static\n * @member {number}\n */\n static REGION_CENTER = 0xeff5;\n\n region: number;\n horizontalAlign: number;\n verticalAlign: number;\n\n constructor(options: IBorderLayoutParams)\n {\n super(options.width, options.height);\n\n /**\n * The border along which the widget is to be placed. This can be one of `POS_LEFT`,\n * `POS_TOP`, `POS_RIGHT`, `POS_BOTTOM`.\n * @member {number}\n * @default {PUXI.BorderLayoutOptions#REGION_CENTER}\n */\n this.region = options.region || BorderLayoutOptions.REGION_CENTER;\n\n /**\n * Alignment of the widget horizontally in its region.\n * @member {PUXI.ALIGN}\n * @default {PUXI.ALIGN.LEFT}\n */\n this.horizontalAlign = options.horizontalAlign || ALIGN.LEFT;\n\n /**\n * Alignment of the widget vertically in its region.\n * @member {PUXI.ALIGN}\n * @default {PUXI.ALIGN.TOP}\n */\n this.verticalAlign = options.verticalAlign || ALIGN.TOP;\n }\n}\n","import { MeasureMode } from '../IMeasurable';\nimport { ILayoutManager } from './ILayoutManager';\nimport { LayoutOptions, FastLayoutOptions } from '../layout-options';\nimport { WidgetGroup } from '../WidgetGroup';\n\n/**\n * `PUXI.FastLayout` is used in conjunction with `PUXI.FastLayoutOptions`. It is the\n * default layout for most widget groups.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.ILayoutManager\n * @example\n * ```\n * parent.useLayout(new PUXI.FastLayout())\n * ```\n */\nexport class FastLayout implements ILayoutManager\n{\n private host: WidgetGroup;\n private _measuredWidth: number;\n private _measuredHeight: number;\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n }\n\n onLayout(): void\n {\n const parent = this.host;\n const { contentWidth: width, contentHeight: height, widgetChildren: children } = parent;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n\n let x = lopt.x ? lopt.x : 0;\n let y = lopt.y ? lopt.y : 0;\n\n if (Math.abs(x) < 1)\n {\n x *= width;\n }\n if (Math.abs(y) < 1)\n {\n y *= height;\n }\n\n const anchor = lopt.anchor || FastLayoutOptions.DEFAULT_ANCHOR;\n\n const l = x - (anchor.x * widget.getMeasuredWidth());\n const t = y - (anchor.y * widget.getMeasuredHeight());\n\n widget.layout(l, t,\n l + widget.getMeasuredWidth(),\n t + widget.getMeasuredHeight());\n }\n }\n\n onMeasure(maxWidth: number, maxHeight: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n // TODO: Passthrough optimization pass, if there is only one child with FILL_PARENT width or height\n // then don't measure twice.\n\n this._measuredWidth = maxWidth;\n this._measuredHeight = maxHeight;\n\n const children = this.host.widgetChildren;\n\n // Measure children\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n\n const loptWidth = (Math.abs(lopt.width) < 1) ? lopt.width * maxWidth : lopt.width;\n const loptHeight = (Math.abs(lopt.height) < 1) ? lopt.height * maxHeight : lopt.height;\n const widthMeasureMode = this.getChildMeasureMode(lopt.width, widthMode);\n const heightMeasureMode = this.getChildMeasureMode(lopt.height, heightMode);\n\n widget.measure(loptWidth, loptHeight, widthMeasureMode, heightMeasureMode);\n }\n\n this._measuredWidth = this.measureWidthReach(maxWidth, widthMode);\n this._measuredHeight = this.measureHeightReach(maxHeight, heightMode);\n\n this.measureChildFillers();\n }\n\n private getChildMeasureMode(dimen: number, parentMeasureMode: MeasureMode): MeasureMode\n {\n if (dimen === LayoutOptions.WRAP_CONTENT)\n {\n // No MeasureMode.EXACTLY!\n return parentMeasureMode === MeasureMode.UNBOUNDED ? MeasureMode.UNBOUNDED : MeasureMode.AT_MOST;\n }\n\n return parentMeasureMode;\n }\n\n private measureWidthReach(parentWidthLimit: number, widthMode: MeasureMode): number\n {\n if (widthMode === MeasureMode.EXACTLY)\n {\n return parentWidthLimit;\n }\n\n const children = this.host.widgetChildren;\n let measuredWidth = 0;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const childWidth = widget.getMeasuredWidth();\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n const x = lopt.x ? lopt.x : 0;\n const anchor = lopt.anchor ? lopt.anchor : FastLayoutOptions.DEFAULT_ANCHOR;\n\n // If lopt.x is %, then (1 - lopt.x)% of parent width should be as large\n // as (1 - anchor.x)% child's width.\n const minr = (Math.abs(x) < 1 ? (1 - anchor.x) * childWidth / (1 - x) : x + childWidth);\n\n measuredWidth = Math.max(measuredWidth, minr);\n }\n\n if (widthMode === MeasureMode.AT_MOST)\n {\n measuredWidth = Math.min(parentWidthLimit, measuredWidth);\n }\n\n return measuredWidth;\n }\n\n private measureHeightReach(parentHeightLimit: number, heightMode: MeasureMode): number\n {\n if (heightMode === MeasureMode.EXACTLY)\n {\n return parentHeightLimit;\n }\n\n const children = this.host.widgetChildren;\n let measuredHeight = 0;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const childHeight = widget.getMeasuredHeight();\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n const y = lopt.y ? lopt.y : 0;\n const anchor = lopt.anchor ? lopt.anchor : FastLayoutOptions.DEFAULT_ANCHOR;\n\n const minb = (Math.abs(y) < 1 ? (1 - anchor.y) * childHeight / (1 - y) : y + childHeight);\n\n measuredHeight = Math.max(measuredHeight, minb);\n }\n\n if (heightMode === MeasureMode.AT_MOST)\n {\n measuredHeight = Math.min(parentHeightLimit, measuredHeight);\n }\n\n return measuredHeight;\n }\n\n private measureChildFillers(): void\n {\n const children = this.host.widgetChildren;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n let loptWidth = (Math.abs(lopt.width) < 1) ? lopt.width * this._measuredWidth : lopt.width;\n let loptHeight = (Math.abs(lopt.height) < 1) ? lopt.height * this._measuredHeight : lopt.height;\n\n if (loptWidth === LayoutOptions.WRAP_CONTENT)\n {\n loptWidth = widget.getMeasuredWidth();\n }\n if (loptHeight === LayoutOptions.WRAP_CONTENT)\n {\n loptHeight = widget.getMeasuredHeight();\n }\n\n if (lopt.width === LayoutOptions.FILL_PARENT || lopt.height === LayoutOptions.FILL_PARENT)\n {\n widget.measure(\n lopt.width === LayoutOptions.FILL_PARENT ? this._measuredWidth : loptWidth,\n lopt.height === LayoutOptions.FILL_PARENT ? this._measuredHeight : loptHeight,\n MeasureMode.EXACTLY,\n MeasureMode.EXACTLY,\n );\n }\n }\n }\n\n getMeasuredWidth(): number\n {\n return this._measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this._measuredHeight;\n }\n}\n","import { Widget } from './Widget';\nimport { ILayoutManager } from './layout-manager/ILayoutManager';\nimport { MeasureMode } from './IMeasurable';\nimport { FastLayout } from './layout-manager/FastLayout';\n\n/**\n * A widget group is a layout owner that can position its children according\n * to the layout given to it.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n * @example\n * ```\n * const group = new PUXI.InteractiveGroup();\n *\n * group.useLayout(new PUXI.AnchorLayout());\n *\n * group.addChild(new PUXI.Button({ text: \"Hey\" })\n * .setLayoutOptions(\n * new PUXI.AnchorLayoutOptions({\n * anchorLeft: 100,\n * anchorTop: 300,\n * anchorRight: .4,\n * anchorBottom: 500,\n * horizontalAlign: PUXI.ALIGN.CENTER\n * })\n * )\n * )\n * ```\n */\nexport class WidgetGroup extends Widget\n{\n public layoutMgr: ILayoutManager;// lazily initialized (via useLayout(), useDefaultLayout())\n\n /**\n * Will set the given layout-manager to be used for positioning child widgets.\n *\n * @param {PUXI.ILayoutManager} layoutMgr\n */\n useLayout(layoutMgr: ILayoutManager): WidgetGroup\n {\n if (this.layoutMgr)\n {\n this.layoutMgr.onDetach();\n }\n\n this.layoutMgr = layoutMgr;\n\n if (layoutMgr)\n {\n this.layoutMgr.onAttach(this);\n }\n\n return this;\n }\n\n /**\n * Sets the widget-recommended layout manager. By default (if not overriden by widget\n * group class), this is a fast-layout.\n */\n useDefaultLayout(): void\n {\n this.useLayout(new FastLayout());\n }\n\n onMeasure(width: number, height: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n super.onMeasure(width, height, widthMode, heightMode);\n\n if (this.widgetChildren.length === 0)\n {\n return;\n }\n if (!this.layoutMgr)\n {\n this.useDefaultLayout();\n }\n\n this.layoutMgr.onMeasure(width - this.paddingHorizontal, height - this.paddingVertical, widthMode, heightMode);\n\n this._measuredWidth = Math.max(this.measuredWidth, this.layoutMgr.getMeasuredWidth());\n this._measuredHeight = Math.max(this.measuredHeight, this.layoutMgr.getMeasuredHeight());\n }\n\n onLayout(l: number, t: number, r: number, b: number, dirty = true): void\n {\n super.onLayout(l, t, r, b, dirty);\n\n if (this.widgetChildren.length === 0)\n {\n return;\n }\n if (!this.layoutMgr)\n {\n this.useDefaultLayout();\n }\n\n this.layoutMgr.onLayout();// layoutMgr is attached to this\n }\n}\n","import { WidgetGroup } from './WidgetGroup';\nimport * as PIXI from 'pixi.js';\n\n/**\n * An interactive container.\n *\n * @class\n * @extends PUXI.WidgetGroup\n * @memberof PUXI\n */\nexport class InteractiveGroup extends WidgetGroup\n{\n private hitArea: PIXI.Rectangle;\n\n constructor()\n {\n super();\n this.hitArea = new PIXI.Rectangle();\n this.insetContainer.hitArea = this.hitArea;\n }\n\n update(): void\n {\n super.update();\n }\n\n layout(l: number, t: number, r: number, b: number, dirty: boolean): void\n {\n super.layout(l, t, r, b, dirty);\n\n this.hitArea.width = this.width;\n this.hitArea.height = this.height;\n }\n}\n\n","import * as PIXI from 'pixi.js';\nimport { TabGroup, FocusController } from './ctl/FocusController';\nimport { InteractiveGroup } from './InteractiveGroup';\nimport { IFocusable } from './IFocusable';\n\n/**\n * @namespace PUXI\n * @interface\n * @property {PIXI.Container}[background]\n * @property {number}[tabIndex]\n * @property {PUXI.TabGroup}[tabGroup]\n */\nexport interface IFocusableOptions\n{\n background?: PIXI.Container;\n tabIndex?: number;\n tabGroup?: any;\n focusController?: FocusController;\n}\n\n/**\n * Represents a view that can gain or loose focus. It is primarily subclassed by\n * input/form widgets.\n *\n * Generally, it is a good idea not use layouts on these types of widgets.\n *\n * @class\n * @extends PUXI.Widget\n * @memberof PUXI\n */\nexport abstract class FocusableWidget extends InteractiveGroup implements IFocusable\n{\n _isFocused: boolean;\n _isMousePressed: boolean;\n _focusController: FocusController;\n\n tabIndex: number;\n tabGroup: TabGroup;\n\n\n /**\n * @param {PUXI.IInputBaseOptions} options\n * @param {PIXI.Container}[options.background]\n * @param {number}[options.tabIndex]\n * @param {any}[options.tabGroup]\n */\n constructor(options: IFocusableOptions = {})\n {\n super();\n\n if (options.background)\n {\n super.setBackground(options.background);\n }\n\n // for detached context (from stage)\n if (options.focusController)\n {\n this._focusController = options.focusController\n }\n\n // Prevents double focusing/blurring.\n this._isFocused = false;\n\n // Used to lose focus when mouse-down outside widget.\n this._isMousePressed = false;\n\n this.interactive = true;\n\n /**\n * @member {number}\n * @readonly\n */\n this.tabIndex = options.tabIndex;\n\n /**\n * The name of the tab group in which this widget's focus will move on\n * pressing tab.\n * @member {PUXI.TabGroup}\n * @readonly\n */\n this.tabGroup = options.tabGroup;\n\n this.insetContainer.on('pointerdown', (ev: PIXI.interaction.InteractionEvent) =>\n {\n this.focus(ev);\n this._isMousePressed = true;\n });\n\n this.insetContainer.on('pointerup', () => { this._isMousePressed = false; });\n this.insetContainer.on('pointerupoutside', () => { this._isMousePressed = false; });\n }\n\n /**\n * Brings this widget into focus.\n */\n focus(ev?: PIXI.interaction.InteractionEvent): void\n {\n if (this.isFocused)\n {\n return;\n }\n\n this.focusController.notifyFocus(this);\n\n this._isFocused = true;\n this.bindEvents();\n\n this.emit('focusChanged', true);\n this.emit('focus');\n }\n\n /**\n * Brings this widget out of focus.\n */\n blur(): void\n {\n if (!this._isFocused)\n {\n return;\n }\n\n this.focusController.notifyBlur();\n\n this._isFocused = false;\n this.clearEvents();\n\n this.emit('focusChanged', false);\n this.emit('blur');\n }\n\n /**\n * Whether this widget is in focus.\n * @member {boolean}\n * @readonly\n */\n get isFocused(): boolean\n {\n return this._isFocused;\n }\n\n private bindEvents = (): void =>\n {\n this.stage.on('pointerdown', this.onDocumentPointerDownImpl);\n document.addEventListener('keydown', this.onKeyDownImpl);\n };\n\n private clearEvents = (): void =>\n {\n this.stage.off('pointerdown', this.onDocumentPointerDownImpl);\n document.removeEventListener('keydown', this.onKeyDownImpl);\n };\n\n protected onKeyDownImpl = (e: any): void =>\n {\n const focusCtl = this.stage.focusController;\n\n if (e.which === 9 && focusCtl.useTab)\n {\n focusCtl.onTab();\n e.preventDefault();\n }\n else if (e.which === 38 && focusCtl.useBack)\n {\n focusCtl.onBack();\n e.preventDefault();\n }\n else if (e.which === 40 && focusCtl.useForward)\n {\n focusCtl.onForward();\n e.preventDefault();\n }\n\n this.emit('keydown');\n };\n\n private onDocumentPointerDownImpl = (): void =>\n {\n if (!this._isMousePressed)\n {\n this.blur();\n }\n };\n\n initialize(): void\n {\n super.initialize();\n this.focusController.in(this, this.tabIndex, this.tabGroup);\n }\n\n /**\n * Fired when the widget comes into focus.\n * @event focus\n */\n\n /**\n * Fired when the widget goes out of focus.\n * @event blur\n */\n\n /**\n * Fired when the widgets comes into or goes out of focus.\n * @event focusChanged\n * @param {boolean} isFocused - whether the widget is in focus.\n */\n\n protected get focusController() {\n return this._focusController || this.stage.focusController\n }\n}\n","import { Widget, TEXT_STYLE_PROPERTIES } from './Widget';\nimport * as PIXI from 'pixi.js';\nimport { Style } from './Style';\n\n/**\n * A static text widget. It cannot retain children.\n *\n * @memberof PUXI\n * @public\n */\nexport class TextWidget extends Widget\n{\n public textDisplay: PIXI.Text;\n\n /**\n * @param {string} text - text content\n * @param {PIXI.TextStyle} textStyle - styled used for text\n */\n constructor(text: string, textStyle?: PIXI.TextStyle)\n {\n super();\n\n this.textDisplay = new PIXI.Text(text, textStyle);\n this.contentContainer.addChild(this.textDisplay);\n }\n\n update(): void\n {\n super.update();\n\n const fill = this.textDisplay.style.fill\n if (!this.tint && typeof(fill) == \"string\" && fill.startsWith(\"#\")) {\n this.tint = parseInt(fill.slice(1), 16)\n }\n\n if (this.tint !== null)\n {\n this.textDisplay.tint = this.tint;\n this.textDisplay.style.fill = this.tint;\n }\n\n if (this.blendMode !== null)\n {\n this.textDisplay.blendMode = this.blendMode;\n }\n }\n\n /**\n * @deprecated\n */\n get value(): string\n {\n return this.textDisplay.text;\n }\n set value(val: string)\n {\n this.textDisplay.text = val;\n }\n\n get text(): string\n {\n return this.value;\n }\n set text(val: string)\n {\n this.value = val;\n }\n\n /**\n * Get the text style. You can set properties directly on the style.\n */\n getTextStyle(): PIXI.TextStyle\n {\n return this.textDisplay.style;\n }\n\n /**\n * Set the text style directly\n *\n * @param textStyle\n * @example\n * textWidget.setTextStyle({\n * fontFamily: 'Roboto',\n * fontSize: 14\n * })\n */\n setTextStyle(textStyle: PIXI.TextStyle): this\n {\n this.textDisplay.style = textStyle;\n\n return this;\n }\n\n protected onStyleChange(style: Style): void\n {\n super.onStyleChange(style);\n\n const styleData = style.getProperties(...TEXT_STYLE_PROPERTIES);\n const textStyle = this.textDisplay.style;\n\n TEXT_STYLE_PROPERTIES.forEach((propName: string) =>\n {\n if (styleData[propName] !== undefined)\n {\n textStyle[propName] = styleData[propName];\n }\n });\n }\n}\n","import { ClickManager } from './event/ClickManager';\nimport { FocusableWidget, IFocusableOptions } from './FocusableWidget';\nimport { TextWidget } from './TextWidget';\nimport * as PIXI from 'pixi.js';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { Style } from './Style';\n\n/**\n * @memberof PUXI\n * @interface\n * @extends PUXI.IFocusableOptions\n * @property {PUXI.TextWidget | string} text\n */\nexport interface IButtonOptions extends IFocusableOptions\n{\n background?: PIXI.Container;\n text?: TextWidget | string;\n tabIndex?: number;\n tabGroup?: any;\n}\n\n/**\n * Button that can be clicked.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.FocusableWidget\n */\nexport class Button extends FocusableWidget\n{\n isHover: boolean;\n\n protected textWidget: TextWidget;\n\n click: () => void;\n /**\n * @param [options.background}] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for Button\n * @param [options.text=null] {PIXI.UI.Text} optional text\n * @param [options.tabIndex=0] {Number} input tab index\n * @param [options.tabGroup=0] {Number|String} input tab group\n * @param [options.width=options.background.width] {Number|String} width\n * @param [options.height=options.background.height] {Number|String} height\n */\n constructor(options: IButtonOptions)\n {\n super(options);\n\n this.isHover = false;\n\n if (typeof options.text === 'string')\n {\n options.text = new TextWidget(options.text, new PIXI.TextStyle());\n }\n\n this.textWidget = options.text.setLayoutOptions(\n new FastLayoutOptions({\n width: LayoutOptions.WRAP_CONTENT,\n height: LayoutOptions.WRAP_CONTENT,\n x: 0.5,\n y: 0.5,\n anchor: FastLayoutOptions.CENTER_ANCHOR,\n }),\n ) as TextWidget;\n\n if (this.textWidget)\n {\n this.addChild(this.textWidget);\n }\n\n this.contentContainer.buttonMode = true;\n }\n\n onClick(e: PIXI.InteractionEvent): void\n {\n super.onClick(e);\n\n this.emit('click', e);\n }\n\n onDoubleClick(e: PIXI.InteractionEvent): void\n {\n super.onDoubleClick(e);\n\n this.emit('doubleclick', e);\n }\n\n update(): void\n {\n super.update();\n // No update needed\n }\n\n initialize(): void\n {\n super.initialize();\n\n this.insetContainer.interactiveChildren = false;\n // lazy to make sure all children is initialized (trying to get the bedst hitArea possible)\n }\n\n /**\n * Label for this button.\n * @member {string}\n */\n get value(): string\n {\n if (this.textWidget)\n {\n return this.textWidget.text;\n }\n\n return '';\n }\n set value(val: string)\n {\n if (this.textWidget)\n {\n this.textWidget.text = val;\n }\n }\n\n get text(): any\n {\n return this.textWidget;\n }\n set text(val: any)\n {\n this.value = val;\n }\n\n onStyleChange(style: Style): void\n {\n // eslint-disable-next-line\n // @ts-ignore\n this.textWidget.onStyleChange(style);\n }\n}\n\n/*\n * Features:\n * Button, radio button (checkgroups)\n *\n * Methods:\n * blur()\n * focus()\n *\n * Properties:\n * checked: get/set Button checked\n * value: get/set Button value\n *\n * Events:\n * \"hover\" param: [bool]isHover (hover/leave)\n * \"press\" param: [bool]isPressed (pointerdown/pointerup)\n * \"click\"\n * \"blur\"\n * \"focus\"\n * \"focusChanged\" param: [bool]isFocussed\n *\n */\n","import { FocusableWidget, IFocusableOptions } from './FocusableWidget';\nimport { ClickManager } from './event/ClickManager';\nimport { InteractiveGroup } from './InteractiveGroup';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { CheckGroup } from './ctl';\nimport { TextWidget } from './TextWidget';\n\ninterface ICheckBoxOptions extends IFocusableOptions\n{\n checked?: boolean;\n background: PIXI.Container;\n checkmark?: PIXI.Container;\n checkGroup?: CheckGroup;\n value?: string;\n tabIndex?: number;\n tabGroup?: number;\n}\n\n/**\n * @memberof PUXI\n * @extends PUXI.IFocusableOptions\n * @member {boolean} checked\n * @member {PIXI.Container}[checkmark]\n * @member {PUXI.CheckGroup}[checkGroup]\n * @member {string}[value]\n */\n\n/**\n * A checkbox is a button can be selected (checked). It has a on/off state that\n * can be controlled by the user.\n *\n * When used in a checkbox group, the group will control whether the checkbox can\n * be selected or not.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.FocusableWidget\n */\nexport class CheckBox extends FocusableWidget\n{\n private _checked: boolean;\n private _value: string;\n\n private label: TextWidget;\n private checkmark: InteractiveGroup;\n\n checkGroup: CheckGroup;\n\n /**\n * @param {PUXI.ICheckBoxOptions} options\n * @param [options.checked=false] {bool} is checked\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for CheckBox\n * @param options.checkmark {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as checkmark for CheckBox\n * @param {PUXI.CheckGroup}[options.checkGroup=null] CheckGroup name\n * @param options.value {String} mostly used along with checkgroup\n * @param [options.tabIndex=0] {Number} input tab index\n * @param [options.tabGroup=0] {Number|String} input tab group\n */\n constructor(options: ICheckBoxOptions)\n {\n super(options);\n this._checked = options.checked !== undefined ? options.checked : false;\n this._value = options.value || '';\n this.checkGroup = options.checkGroup || null;\n\n this.checkmark = new InteractiveGroup();\n this.checkmark.contentContainer.addChild(options.checkmark);\n this.checkmark.setLayoutOptions(\n new FastLayoutOptions({\n width: LayoutOptions.WRAP_CONTENT,\n height: LayoutOptions.WRAP_CONTENT,\n x: 0.5,\n y: 0.5,\n anchor: FastLayoutOptions.CENTER_ANCHOR,\n }),\n );\n this.checkmark.alpha = this._checked ? 1 : 0;\n this.addChild(this.checkmark);\n\n this.contentContainer.buttonMode = true;\n }\n\n update(): void\n {\n // No need for updating\n }\n\n get checked(): boolean\n {\n return this._checked;\n }\n set checked(val: boolean)\n {\n if (val !== this._checked)\n {\n if (this.checkGroup !== null && val)\n {\n this.stage.checkBoxGroupController.notifyCheck(this);\n }\n\n this._checked = val;\n this.change(val);\n }\n }\n\n get value(): string\n {\n return this._value;\n }\n set value(val: string)\n {\n this._value = val;\n\n if (this.checked)\n {\n this.stage.checkBoxGroupController.notifyCheck(this);\n }\n }\n\n get selectedValue(): string\n {\n return this.stage\n ?.checkBoxGroupController\n .getSelected(this.checkGroup)\n .value;\n }\n\n initialize(): void\n {\n super.initialize();\n\n const clickMgr = (this.eventBroker.click as ClickManager);\n\n clickMgr.onHover = (_, over): void =>\n {\n this.emit('hover', over);\n };\n\n clickMgr.onPress = (e, isPressed): void =>\n {\n if (isPressed)\n {\n this.focus();\n e.data.originalEvent.preventDefault();\n }\n\n this.emit('press', isPressed);\n };\n\n clickMgr.onClick = (): void =>\n {\n this.click();\n };\n\n if (this.checkGroup !== null)\n {\n this.stage.checkBoxGroupController.in(this, this.checkGroup);\n }\n }\n\n protected change = (val: boolean): void =>\n {\n if (this.checkmark)\n {\n this.checkmark.alpha = val ? 1 : 0;\n }\n };\n\n protected click = (): void =>\n {\n this.emit('click');\n\n if (this.checkGroup !== null && this.checked)\n {\n return;\n }\n\n this.checked = !this.checked;\n this.emit('changed', this.checked);\n };\n\n /**\n * This event is fired when the user's cursor hovers over this checkbox.\n * @event hover\n */\n\n /**\n * This event is fired when the user clicks on the checkbox, regardless of whether\n * the checkbox was selected or deselected.\n * @event click\n */\n\n /**\n * This event is fired when the user selects/deselects the checkbox, i.e. the \"value\"\n * of the checkbox changes. This is also fired when setting the `checked` property\n * directly.\n * @event changed\n * @param {boolean} checked - whether the checkbox is checked\n */\n}\n\n/*\n * Features:\n * checkbox, radio button (checkgroups)\n *\n * Methods:\n * blur()\n * focus()\n * change(checked) //only exposed to overwrite (if you dont want to hard toggle alpha of checkmark)\n *\n * Properties:\n * checked: get/set checkbox checked\n * value: get/set checkbox value\n * selectedValue: get/set selected value for checkgroup\n *\n * Events:\n * \"hover\" param: [bool]isHover (hover/leave)\n * \"press\" param: [bool]isPressed (pointerdown/pointerup)\n * \"click\"\n * \"blur\"\n * \"focus\"\n * \"focusChanged\" param: [bool]isFocussed\n * \"change\" param: [bool]isChecked\n *\n */\n","class EaseBase\n{\n getPosition(p)\n {\n return p;\n }\n}\n\nexport { EaseBase };\n","import { EaseBase } from './EaseBase';\n\nfunction ExponentialEase(power, easeIn, easeOut)\n{\n const pow = power;\n const t = easeIn && easeOut ? 3 : easeOut ? 1 : 2;\n\n this.getPosition = function (p)\n {\n let r = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\n if (pow === 1)\n {\n r *= r;\n }\n else if (pow === 2)\n {\n r *= r * r;\n }\n else if (pow === 3)\n {\n r *= r * r * r;\n }\n else if (pow === 4)\n {\n r *= r * r * r * r;\n }\n\n return (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n };\n}\n\nExponentialEase.prototype = Object.create(EaseBase.prototype);\nExponentialEase.prototype.constructor = ExponentialEase;\n\nexport { ExponentialEase };\n\n","import { EaseBase } from './EaseBase';\nimport { ExponentialEase } from './ExponentialEase';\n\nconst Ease = {};\n\nconst HALF_PI = Math.PI * 0.5;\n\nexport function create(fn)\n{\n const e = Object.create(EaseBase.prototype);\n\n e.getPosition = fn;\n\n return e;\n}\n\nconst Linear = new EaseBase();\n\n// Liear\nEase.Linear = Linear;\n\n// Exponetial Eases\nexport function wrapEase(easeInFunction, easeOutFunction, easeInOutFunction)\n{\n return {\n easeIn: easeInFunction,\n easeOut: easeOutFunction,\n easeInOut: easeInOutFunction,\n };\n}\n\nEase.Power0 = {\n easeNone: Linear,\n};\n\nEase.Power1 = Ease.Quad = wrapEase(\n new ExponentialEase(1, 1, 0),\n new ExponentialEase(1, 0, 1),\n new ExponentialEase(1, 1, 1));\n\nEase.Power2 = Ease.Cubic = wrapEase(\n new ExponentialEase(2, 1, 0),\n new ExponentialEase(2, 0, 1),\n new ExponentialEase(2, 1, 1));\n\nEase.Power3 = Ease.Quart = wrapEase(\n new ExponentialEase(3, 1, 0),\n new ExponentialEase(3, 0, 1),\n new ExponentialEase(3, 1, 1));\n\nEase.Power4 = Ease.Quint = wrapEase(\n new ExponentialEase(4, 1, 0),\n new ExponentialEase(4, 0, 1),\n new ExponentialEase(4, 1, 1));\n\n// Bounce\nEase.Bounce = {\n BounceIn: create(function (p)\n {\n if ((p = 1 - p) < 1 / 2.75)\n {\n return 1 - (7.5625 * p * p);\n }\n else if (p < 2 / 2.75)\n {\n return 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\n }\n else if (p < 2.5 / 2.75)\n {\n return 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\n }\n\n return 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\n }),\n BounceOut: create(function (p)\n {\n if (p < 1 / 2.75)\n {\n return 7.5625 * p * p;\n }\n else if (p < 2 / 2.75)\n {\n return 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n }\n else if (p < 2.5 / 2.75)\n {\n return 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n }\n\n return 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n }),\n BounceInOut: create(function (p)\n {\n const invert = (p < 0.5);\n\n if (invert)\n {\n p = 1 - (p * 2);\n }\n else\n {\n p = (p * 2) - 1;\n }\n if (p < 1 / 2.75)\n {\n p = 7.5625 * p * p;\n }\n else if (p < 2 / 2.75)\n {\n p = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n }\n else if (p < 2.5 / 2.75)\n {\n p = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n }\n else\n {\n p = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n }\n\n return invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\n }),\n};\n\n// Circ\nEase.Circ = {\n CircIn: create(function (p)\n {\n return -(Math.sqrt(1 - (p * p)) - 1);\n }),\n CircOut: create(function (p)\n {\n return Math.sqrt(1 - (p = p - 1) * p);\n }),\n CircInOut: create(function (p)\n {\n return ((p *= 2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\n }),\n};\n\n// Expo\nEase.Expo = {\n ExpoIn: create(function (p)\n {\n return Math.pow(2, 10 * (p - 1)) - 0.001;\n }),\n ExpoOut: create(function (p)\n {\n return 1 - Math.pow(2, -10 * p);\n }),\n ExpoInOut: create(function (p)\n {\n return ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n }),\n};\n\n// Sine\nEase.Sine = {\n SineIn: create(function (p)\n {\n return -Math.cos(p * HALF_PI) + 1;\n }),\n SineOut: create(function (p)\n {\n return Math.sin(p * HALF_PI);\n }),\n SineInOut: create(function (p)\n {\n return -0.5 * (Math.cos(Math.PI * p) - 1);\n }),\n};\n\nexport { Ease };\n","export const Helpers = {\n Lerp(start: number, stop: number, amt: number): number\n {\n if (amt > 1) amt = 1;\n else if (amt < 0) amt = 0;\n\n return start + (stop - start) * amt;\n },\n Round(number: number, decimals: number): number\n {\n const pow = Math.pow(10, decimals);\n\n return Math.round(number * pow) / pow;\n },\n componentToHex(c: any): string\n {\n const hex = c.toString(16);\n\n return hex.length == 1 ? `0${hex}` : hex;\n },\n rgbToHex(r: number, g: number, b: number): string\n {\n return `#${this.componentToHex(r)}${this.componentToHex(g)}${this.componentToHex(b)}`;\n },\n rgbToNumber(r: number, g: number, b: number): number\n {\n return r * 65536 + g * 256 + b;\n },\n numberToRgb(c: number): any\n {\n return {\n r: Math.floor(c / (256 * 256)),\n g: Math.floor(c / 256) % 256,\n b: c % 256,\n };\n },\n hexToRgb(hex: any): any\n {\n if (hex === null)\n {\n hex = 0xffffff;\n }\n if (!isNaN(hex))\n {\n return this.numberToRgb(hex);\n }\n\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n\n hex = hex.replace(shorthandRegex, function (m, r, g, b)\n {\n return r + r + g + g + b + b;\n });\n\n const result = (/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i).exec(hex);\n\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n } : null;\n },\n};\n","import { Widget } from './Widget';\nimport * as PIXI from 'pixi.js';\n\n/**\n * An UI sprite object\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n */\nexport class Sprite extends Widget\n{\n private spriteDisplay: PIXI.Sprite;\n\n constructor(texture: PIXI.Texture)\n {\n super();\n\n this.spriteDisplay = new PIXI.Sprite(texture);\n this.contentContainer.addChild(this.spriteDisplay);\n }\n\n update(): void\n {\n if (this.tint !== null)\n {\n this.spriteDisplay.tint = this.tint;\n }\n\n if (this.blendMode !== null)\n {\n this.spriteDisplay.blendMode = this.blendMode;\n }\n }\n\n static fromImage(imageUrl): Sprite\n {\n return new Sprite(new PIXI.Texture(new PIXI.BaseTexture(imageUrl)));\n }\n}\n\nexport type ImageWidget = Sprite;\nexport const ImageWidget = Sprite;\n","import { ILayoutManager } from './ILayoutManager';\nimport { Widget } from '../Widget';\nimport { AnchorLayoutOptions, ALIGN, LayoutOptions } from '../layout-options';\nimport { MeasureMode } from '../IMeasurable';\nimport { WidgetGroup } from '../WidgetGroup';\n\ninterface IAnchorCache {\n remeasure: boolean;\n}\n\n/**\n * `AnchorLayout` is used in conjunction with `AnchorLayoutOptions`.\n *\n * @memberof PUXI\n * @class\n * @example\n * ```\n * parent.useLayout(new PUXI.AnchorLayout());\n * ```\n */\nexport class AnchorLayout implements ILayoutManager\n{\n private measuredWidth: number;\n private measuredHeight: number;\n\n private host: WidgetGroup;\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n }\n\n onLayout(): void\n {\n const parent = this.host;\n const { widgetChildren } = parent;\n\n const parentWidth = parent.contentWidth;\n const parentHeight = parent.contentHeight;\n\n for (let i = 0; i < widgetChildren.length; i++)\n {\n const child = widgetChildren[i];\n const layoutOptions = (child.layoutOptions || {}) as AnchorLayoutOptions;\n\n const childWidth = child.getMeasuredWidth();\n const childHeight = child.getMeasuredHeight();\n const anchorLeft = this.calculateAnchor(layoutOptions.anchorLeft || 0, parentWidth, false);\n const anchorTop = this.calculateAnchor(layoutOptions.anchorTop || 0, parentHeight, false);\n const anchorRight = this.calculateAnchor(layoutOptions.anchorRight || 0, parentWidth, true);\n const anchorBottom = this.calculateAnchor(layoutOptions.anchorBottom || 0, parentHeight, true);\n\n let x = anchorLeft;\n let y = anchorTop;\n\n switch (layoutOptions.horizontalAlign)\n {\n case ALIGN.MIDDLE:\n x = (anchorRight + anchorLeft - childWidth) / 2;\n break;\n case ALIGN.RIGHT:\n x = anchorRight - childWidth;\n break;\n }\n\n switch (layoutOptions.verticalAlign)\n {\n case ALIGN.MIDDLE:\n y = (anchorBottom + anchorTop - childHeight) / 2;\n break;\n case ALIGN.BOTTOM:\n y = anchorBottom - childHeight;\n break;\n }\n\n child.layout(x, y, x + childWidth, y + childHeight);\n }\n }\n\n onMeasure(widthLimit: number, heightLimit: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n const children = this.host.widgetChildren;\n\n let naturalWidth = 0;\n let naturalHeight = 0;\n\n const baseWidthMode = widthMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n const baseHeightMode = heightMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : heightMode;\n\n let hasFillers = false;\n\n // First pass: measure children and find our natural width/height. If we have a upper\n // limit, then pass that on.\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as AnchorLayoutOptions;\n\n if (lopt.width === LayoutOptions.FILL_PARENT)\n {\n throw new Error('AnchorLayout does not support width = FILL_PARENT. Use anchorLeft = 0 & anchorRight = 0');\n }\n if (lopt.height === LayoutOptions.FILL_PARENT)\n {\n throw new Error('AnchorLayout does not support height = FILL_PARENT. Use anchorTop = 0 & anchorBottom = 0');\n }\n\n const anchorLeft = this.calculateAnchor(lopt.anchorLeft || 0, widthLimit, false);\n const anchorTop = this.calculateAnchor(lopt.anchorTop || 0, heightLimit, false);\n const anchorRight = this.calculateAnchor(lopt.anchorRight || 0, widthLimit, true);\n const anchorBottom = this.calculateAnchor(lopt.anchorBottom || 0, heightLimit, true);\n\n // Does child have a pre-determined width or height?\n const widthConst = lopt.isWidthPredefined;\n const heightConst = lopt.isHeightPredefined;\n const widgetWidthLimit = widthConst ? lopt.width : anchorRight - anchorLeft;\n const widgetHeightLimit = heightConst ? lopt.height : anchorBottom - anchorTop;\n\n const widgetWidthMode = widthConst ? MeasureMode.EXACTLY : baseWidthMode;\n const widgetHeightMode = heightConst ? MeasureMode.EXACTLY : baseHeightMode;\n\n // Fillers need to be remeasured using EXACTLY.\n hasFillers = hasFillers || lopt.width === 0 || lopt.height === 0;\n\n widget.measure(widgetWidthLimit, widgetHeightLimit, widgetWidthMode, widgetHeightMode);\n\n const horizontalReach = this.calculateReach(\n lopt.anchorLeft || 0, lopt.anchorRight || 0, widget.getMeasuredWidth());\n const verticalReach = this.calculateReach(\n lopt.anchorTop || 0, lopt.anchorBottom || 0, widget.getMeasuredHeight());\n\n naturalWidth = Math.max(naturalWidth, horizontalReach);\n naturalHeight = Math.max(naturalHeight, verticalReach);\n }\n\n this.measuredWidth = Widget.resolveMeasuredDimen(naturalWidth, widthLimit, widthMode);\n this.measuredHeight = Widget.resolveMeasuredDimen(naturalHeight, heightLimit, heightMode);\n\n if (!hasFillers)\n {\n return;\n }\n\n // Handle fillers.\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as AnchorLayoutOptions;\n\n if (lopt.width === 0 || lopt.height === 0)\n {\n const anchorLeft = this.calculateAnchor(lopt.anchorLeft || 0, this.measuredWidth, false);\n const anchorTop = this.calculateAnchor(lopt.anchorTop || 0, this.measuredHeight, false);\n const anchorRight = this.calculateAnchor(lopt.anchorRight || 0, this.measuredWidth, true);\n const anchorBottom = this.calculateAnchor(lopt.anchorBottom || 0, this.measuredHeight, true);\n\n widget.measure(\n lopt.isWidthPredefined ? lopt.width : anchorRight - anchorLeft,\n lopt.isHeightPredefined ? lopt.height : anchorBottom - anchorTop,\n lopt.width === 0 || lopt.isWidthPredefined ? MeasureMode.EXACTLY : MeasureMode.AT_MOST,\n lopt.height === 0 || lopt.isHeightPredefined ? MeasureMode.EXACTLY : MeasureMode.AT_MOST,\n );\n }\n }\n }\n\n getMeasuredWidth(): number\n {\n return this.measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this.measuredHeight;\n }\n\n /**\n * Calculates the actual value of the anchor, given the parent's dimension.\n *\n * @param {number} anchor - anchor as given in layout options\n * @param {number} limit - parent's dimension\n * @param {boolean} limitSubtract - true for right/bottom anchors, false for left/top\n */\n protected calculateAnchor(anchor: number, limit: number, limitSubtract: boolean): number\n {\n const offset = Math.abs(anchor) < 1 ? anchor * limit : anchor;\n\n return limitSubtract ? limit - offset : offset;\n }\n\n /**\n * Calculates the \"reach\" of a child widget, which is the minimum dimension of\n * the parent required to fully fit the child.\n *\n * @param {number} startAnchor - left or top anchor as given in layout options\n * @param {number} endAnchor - right or bottom anchor as given in layout options\n * @param {number} dimen - measured dimension of the widget (width or height)\n */\n protected calculateReach(startAnchor: number, endAnchor: number, dimen: number): number\n {\n if (Math.abs(startAnchor) < 1 && Math.abs(endAnchor) < 1)\n {\n return dimen / (1 - endAnchor - startAnchor);\n }\n else if (Math.abs(startAnchor) < 1)\n {\n return (endAnchor + dimen) / (1 - startAnchor);\n }\n else if (Math.abs(endAnchor) < 1)\n {\n return (startAnchor + dimen) / (1 - endAnchor);\n }\n\n return startAnchor + dimen + endAnchor;\n }\n}\n","import { IMeasurable } from '../IMeasurable';\nimport { WidgetGroup } from '../WidgetGroup';\n\nexport interface ILayoutManager extends IMeasurable\n{\n onAttach(host: WidgetGroup): void;\n onDetach(): void;\n onLayout(): void;\n}\n\n/**\n * Represents a layout manager that can be attached to any widget group. A layout\n * manager handles the positions and dimensions of child widgets.\n *\n * @memberof PUXI\n * @interface\n */\n\n/**\n * Attaches the layout manager to a widget. This is automatically done by `WidgetGroup#useLayout`.\n *\n * @memberof PUXI.ILayoutManager#\n * @method onAttach\n * @param {PUXI.WidgetGroup} host\n */\n\n/**\n * Detaches the layout manager from a widget. This is done by `WidgetGroup#useLayout`. Do\n * not use this on your own.\n *\n * @memberof PUXI.ILayoutManager#\n * @method onDetach\n */\n\n/**\n * Lays out the children of the layout's host. It assumes that the layout is attached.\n *\n * Contract: Between an `onMeasure` and `onLayout` call, it is expected that the children\n * of the widget-group have _not changed_. This prevents the layout's cache (if any)\n * from becoming invalidated.\n *\n * @memberof PUXI.ILayoutManager#\n * @method onLayout\n */\n","import { ILayoutManager } from './ILayoutManager';\nimport { WidgetGroup } from '../WidgetGroup';\nimport { Widget } from '../Widget';\nimport { LayoutOptions, ALIGN } from '../layout-options';\nimport { BorderLayoutOptions } from '../layout-options/BorderLayoutOptions';\nimport { MeasureMode } from '../IMeasurable';\n\nconst {\n REGION_LEFT,\n REGION_TOP,\n REGION_RIGHT,\n REGION_BOTTOM,\n REGION_CENTER,\n} = BorderLayoutOptions;\n\nconst {\n FILL_PARENT,\n} = LayoutOptions;\n\nconst {\n EXACTLY,\n AT_MOST,\n} = MeasureMode;\n\n/**\n * `PUXI.BorderLayout` is used in conjunction with `PUXI.BorderLayoutOptions`.\n *\n * This layout guarantees that the \"center\" region will always be in the center of\n * the widget-group.\n *\n * WARNING: This layout may have some bugs in edge cases that haven't been reported.\n *\n * @memberof PUXI\n * @class\n * @implements PUXI.ILayoutManager\n */\nexport class BorderLayout implements ILayoutManager\n{\n protected host: WidgetGroup;\n\n protected leftWidgets: Widget[];\n protected topWidgets: Widget[];\n protected rightWidgets: Widget[];\n protected bottomWidgets: Widget[];\n protected centerWidgets: Widget[];\n\n protected measuredLeftWidth: number;\n protected measuredRightWidth: number;\n protected measuredCenterWidth: number;\n protected measuredWidth: number;\n\n protected measuredTopHeight: number;\n protected measuredBottomHeight: number;\n protected measuredCenterHeight: number;\n protected measuredHeight: number;\n\n constructor()\n {\n this.leftWidgets = [];\n this.topWidgets = [];\n this.rightWidgets = [];\n this.bottomWidgets = [];\n this.centerWidgets = [];\n }\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n this.clearMeasureCache();\n this.clearRegions();\n }\n\n onLayout(): void\n {\n this.layoutChildren(\n this.leftWidgets,\n 0,\n this.measuredTopHeight,\n this.measuredLeftWidth,\n this.measuredCenterHeight);\n this.layoutChildren(this.topWidgets, 0, 0, this.measuredWidth, this.measuredTopHeight);\n this.layoutChildren(\n this.rightWidgets,\n this.measuredWidth - this.measuredRightWidth,\n this.measuredTopHeight,\n this.measuredRightWidth,\n this.measuredCenterHeight,\n );\n this.layoutChildren(\n this.bottomWidgets,\n 0,\n this.measuredTopHeight + this.measuredCenterHeight,\n this.measuredWidth,\n this.measuredBottomHeight,\n );\n this.layoutChildren(\n this.centerWidgets,\n this.measuredLeftWidth,\n this.measuredTopHeight,\n this.measuredCenterWidth,\n this.measuredCenterHeight,\n );\n }\n\n layoutChildren(\n widgets: Widget[],\n regionX: number,\n regionY: number,\n regionWidth: number,\n regionHeight: number,\n ): void\n {\n for (let i = 0, j = widgets.length; i < j; i++)\n {\n const widget = widgets[i];\n\n let x = 0;\n let y = 0;\n\n switch ((widget.layoutOptions as BorderLayoutOptions)?.horizontalAlign)\n {\n case ALIGN.CENTER: x = (regionWidth - widget.getMeasuredWidth()) / 2; break;\n case ALIGN.RIGHT: x = regionWidth - widget.getMeasuredWidth(); break;\n default: x = 0; break;\n }\n\n switch ((widget.layoutOptions as BorderLayoutOptions)?.verticalAlign)\n {\n case ALIGN.CENTER: y = (regionHeight - widget.getMeasuredHeight()) / 2; break;\n case ALIGN.BOTTOM: y = regionHeight - widget.getMeasuredHeight(); break;\n default: y = 0; break;\n }\n\n x += regionX;\n y += regionY;\n\n widget.layout(x, y, x + widget.getMeasuredWidth(), y + widget.getMeasuredHeight(), true);\n }\n }\n\n /**\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n * @override\n */\n onMeasure(maxWidth: number, maxHeight: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n this.indexRegions();\n this.clearMeasureCache();\n\n // Children can be aligned inside region if smaller\n const childWidthMode = widthMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n const childHeightMode = heightMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n\n // Measure top, bottom, and center. The max. of each row's width will be our \"reference\".\n let [tw, th, , thmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.topWidgets,\n maxWidth,\n maxHeight,\n childWidthMode, childHeightMode,\n );\n let [bw, bh,, bhmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.bottomWidgets,\n maxWidth,\n maxHeight,\n childWidthMode, childHeightMode,\n );\n let [cw, ch, cwmin, chmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.centerWidgets,\n maxWidth,\n maxHeight,\n childWidthMode,\n heightMode);\n\n // Measure left & right regions. Their heights will equal center's height.\n let [lw, , lwmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.leftWidgets,\n maxWidth,\n ch,\n childWidthMode, MeasureMode.AT_MOST);\n let [rw, , rwmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.rightWidgets,\n maxWidth,\n ch,\n childWidthMode, MeasureMode.AT_MOST);\n\n // Check if total width/height is greater than our limit. If so, then downscale\n // each row's height or each column's (in middle row) width.\n\n const middleRowWidth = lw + rw + cw;\n const netWidth = Math.max(tw, bw, middleRowWidth);\n const netHeight = th + bh + ch;\n\n // Resolve our limits.\n if (widthMode === MeasureMode.EXACTLY)\n {\n this.measuredWidth = maxWidth;\n }\n else if (widthMode === MeasureMode.AT_MOST)\n {\n this.measuredWidth = Math.min(netWidth, maxWidth);\n }\n else\n {\n this.measuredWidth = netWidth;\n }\n\n if (heightMode === MeasureMode.EXACTLY)\n {\n this.measuredHeight = maxHeight;\n }\n else if (heightMode === MeasureMode.AT_MOST)\n {\n this.measuredHeight = Math.min(netHeight, maxHeight);\n }\n else\n {\n this.measuredHeight = netHeight;\n }\n\n tw = this.measuredWidth;\n bw = this.measuredWidth;\n\n if (netHeight > this.measuredHeight)\n {\n const hmin = (thmin + chmin + bhmin);\n\n // Redistribute heights minus min-heights.\n if (hmin < this.measuredHeight)\n {\n const downscale = (this.measuredHeight - hmin) / (netHeight - hmin);\n\n th = thmin + ((th - thmin) * downscale);\n bh = bhmin + ((bh - bhmin) * downscale);\n ch = chmin + ((ch - chmin) * downscale);\n }\n // Redistribute full heights.\n else\n {\n const downscale = this.measuredHeight / netHeight;\n\n th *= downscale;\n bh *= downscale;\n ch *= downscale;\n }\n }\n\n if (netWidth > this.measuredWidth)\n {\n const wmin = lwmin + cwmin + rwmin;\n\n // Redistribute widths minus min. widths\n if (wmin < this.measuredWidth)\n {\n const downscale = (this.measuredWidth - wmin) / (netWidth - wmin);\n\n lw = lwmin + ((lw - lwmin) * downscale);\n cw = cwmin + ((cw - cwmin) * downscale);\n rw = rwmin + ((rw - rwmin) * downscale);\n }\n // Redistribute full widths\n else\n {\n const downscale = this.measuredWidth / netWidth;\n\n lw *= downscale;\n cw *= downscale;\n rw *= downscale;\n }\n }\n\n // Useful to know!\n this.measuredLeftWidth = lw;\n this.measuredRightWidth = rw;\n this.measuredCenterWidth = cw;\n this.measuredTopHeight = th;\n this.measuredBottomHeight = bh;\n this.measuredCenterHeight = ch;\n\n this.fitChildren(this.leftWidgets, this.measuredLeftWidth, this.measuredCenterHeight);\n this.fitChildren(this.topWidgets, this.measuredWidth, this.measuredTopHeight);\n this.fitChildren(this.rightWidgets, this.measuredRightWidth, this.measuredCenterHeight);\n this.fitChildren(this.bottomWidgets, this.measuredWidth, this.measuredBottomHeight);\n this.fitChildren(this.centerWidgets, this.measuredCenterWidth, this.measuredCenterHeight);\n }\n\n /**\n * This measures the list of widgets given the constraints. The max width and\n * height amongst the children is returned.\n *\n * @param {PUXI.Widget[]} list\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n * @returns {number[]} - [width, height, widthFixedLowerBound, heightFixedLowerBound] -\n * the max. width and height amongst children. Also, the minimum required width/height\n * for the region (as defined in layout-options).\n */\n protected measureChildren(\n list: Widget[],\n maxWidth: number,\n maxHeight: number,\n widthMode: MeasureMode,\n heightMode: MeasureMode,\n ): number[]\n {\n let width = 0;\n let height = 0;\n let widthFixedLowerBound = 0;\n let heightFixedLowerBound = 0;\n\n for (let i = 0, j = list.length; i < j; i++)\n {\n const widget = list[i];\n const lopt = widget.layoutOptions || LayoutOptions.DEFAULT;\n\n let w = maxWidth;\n let h = maxHeight;\n let wmd = widthMode;\n let hmd = heightMode;\n\n if (lopt.width <= LayoutOptions.MAX_DIMEN)\n {\n w = lopt.width;\n wmd = EXACTLY;\n\n widthFixedLowerBound = Math.max(widthFixedLowerBound, w);\n }\n if (lopt.height <= LayoutOptions.MAX_DIMEN)\n {\n h = lopt.height;\n hmd = EXACTLY;\n\n heightFixedLowerBound = Math.max(heightFixedLowerBound, h);\n }\n\n widget.measure(w, h, wmd, hmd);\n\n width = Math.max(width, widget.getMeasuredWidth());\n height = Math.max(height, widget.getMeasuredHeight());\n }\n\n return [width, height, widthFixedLowerBound, heightFixedLowerBound];\n }\n\n /**\n * Ensures all widgets in the list measured their dimensions below the region\n * width & height. Widgets that are too large are remeasured in the those\n * limits (using `MeasureMode.AT_MOST`).\n *\n * This will handle widgets that have \"FILL_PARENT\" width or height.\n *\n * @param {PUXI.Widget[]} list\n * @param {number} measuredRegionWidth\n * @param {number} measuredRegionHeight\n */\n protected fitChildren(\n list: Widget[],\n measuredRegionWidth: number,\n measuredRegionHeight: number,\n ): void\n {\n for (let i = 0, j = list.length; i < j; i++)\n {\n const widget = list[i];\n\n if (widget.getMeasuredWidth() <= measuredRegionWidth\n && widget.getMeasuredHeight() <= measuredRegionHeight\n && widget.getMeasuredWidth() > 0\n && widget.getMeasuredHeight() > 0\n && widget.layoutOptions?.width !== FILL_PARENT\n && widget.layoutOptions?.height !== FILL_PARENT)\n {\n continue;\n }\n\n if (measuredRegionWidth > 0 && measuredRegionHeight > 0)\n {\n const wm = widget.layoutOptions?.width === FILL_PARENT ? EXACTLY : AT_MOST;\n const hm = widget.layoutOptions?.height === FILL_PARENT ? EXACTLY : AT_MOST;\n\n widget.measure(measuredRegionWidth, measuredRegionHeight, wm, hm);\n }\n }\n }\n\n /**\n * Indexes the list of left, top, right, bottom, and center widget lists.\n */\n protected indexRegions(): void\n {\n this.clearRegions();\n const { widgetChildren: children } = this.host;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as BorderLayoutOptions;\n\n const region = lopt.region || REGION_CENTER;\n\n switch (region)\n {\n case REGION_LEFT: this.leftWidgets.push(widget); break;\n case REGION_TOP: this.topWidgets.push(widget); break;\n case REGION_RIGHT: this.rightWidgets.push(widget); break;\n case REGION_BOTTOM: this.bottomWidgets.push(widget); break;\n default: this.centerWidgets.push(widget);\n }\n }\n }\n\n /**\n * Clears the left, top, right, bottom, and center widget lists.\n */\n protected clearRegions(): void\n {\n this.leftWidgets.length = 0;\n this.topWidgets.length = 0;\n this.rightWidgets.length = 0;\n this.bottomWidgets.length = 0;\n }\n\n /**\n * Zeros the measured dimensions.\n */\n protected clearMeasureCache(): void\n {\n this.measuredLeftWidth = 0;\n this.measuredRightWidth = 0;\n this.measuredCenterWidth = 0;\n this.measuredTopHeight = 0;\n this.measuredBottomHeight = 0;\n this.measuredCenterHeight = 0;\n }\n\n getMeasuredWidth(): number\n {\n return this.measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this.measuredHeight;\n }\n}\n","import { ILayoutManager } from './ILayoutManager';\nimport { WidgetGroup } from '../WidgetGroup';\nimport { MeasureMode } from '../IMeasurable';\nimport { LayoutOptions } from '../layout-options';\n\ntype Gravity = 'left' | 'center' | 'right' | 'top' | 'middle' | 'bottom';\n\nexport class LinearLayout implements ILayoutManager\n{\n private host: WidgetGroup;\n private orientation: 'vertical' | 'horizontal';\n private gravity: Gravity;\n private measuredWidth: number;\n private measuredHeight: number;\n\n constructor(orientation: 'vertical' | 'horizontal' = 'vertical', gravity: Gravity = 'center')\n {\n this.orientation = orientation;\n this.gravity = gravity;\n }\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n }\n\n onLayout(): void\n {\n let position = 0;\n const children = this.host.widgetChildren;\n const breadth = this.orientation === 'vertical'\n ? this.measuredWidth\n : this.measuredHeight;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n\n // along axis\n const u = this.orientation === 'vertical'\n ? widget.getMeasuredWidth()\n : widget.getMeasuredHeight();\n const v = this.orientation === 'vertical'\n ? widget.getMeasuredHeight()\n : widget.getMeasuredWidth();\n\n let p = 0;\n\n if (u < breadth)\n {\n switch (this.gravity)\n {\n case 'center':\n case 'middle':\n p = (breadth - u) / 2;\n break;\n case 'right':\n case 'bottom':\n p = breadth - u;\n break;\n }\n }\n\n if (this.orientation === 'vertical')\n {\n widget.layout(p, position, p + u, position + v);\n }\n else\n {\n widget.layout(position, p, position + v, p + u);\n }\n\n position += v;\n }\n }\n\n onMeasure(widthLimit: number, heightLimit: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n const children = this.host.widgetChildren;\n const baseWidthMode = widthMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n const baseHeightMode = heightMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : heightMode;\n\n let length = 0;\n let breadth = 0;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT);\n\n const widgetWidthLimit = lopt.isWidthPredefined ? lopt.width : widthLimit;\n const widgetHeightLimit = lopt.isHeightPredefined ? lopt.height : heightLimit;\n const widgetWidthMode = lopt.isWidthPredefined ? MeasureMode.EXACTLY : baseWidthMode;\n const widgetHeightMode = lopt.isHeightPredefined ? MeasureMode.EXACTLY : baseHeightMode;\n\n widget.measure(widgetWidthLimit, widgetHeightLimit, widgetWidthMode, widgetHeightMode);\n\n if (this.orientation === 'vertical')\n {\n breadth = Math.max(breadth, widget.getMeasuredWidth());\n length += widget.getMeasuredHeight();\n }\n else\n {\n breadth = Math.max(breadth, widget.getMeasuredHeight());\n length += widget.getMeasuredWidth();\n }\n }\n\n if (this.orientation === 'vertical')\n {\n this.measuredWidth = breadth;\n this.measuredHeight = length;\n }\n else\n {\n this.measuredWidth = length;\n this.measuredHeight = breadth;\n }\n }\n\n getMeasuredWidth(): number\n {\n return this.measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this.measuredHeight;\n }\n}\n","import { IButtonOptions, Button } from './Button';\nimport { ImageWidget } from './Sprite';\nimport { Texture } from 'pixi.js';\nimport { LinearLayout } from './layout-manager';\n\nexport interface IImageButtonOptions extends IButtonOptions\n{\n icon: string | Texture | ImageWidget;\n}\n\nexport class ImageButton extends Button\n{\n iconWidget: ImageWidget;\n\n constructor(options: IImageButtonOptions)\n {\n super(options);\n\n if (!(options.icon instanceof ImageWidget))\n {\n const texture = options.icon instanceof Texture ? options.icon\n : Texture.from(options.icon);\n\n options.icon = new ImageWidget(texture);\n }\n\n this.textWidget.setLayoutOptions(null);// a little redundant maybe?\n this.iconWidget = options.icon;\n\n this.removeChild(this.textWidget);\n this.addChild(this.iconWidget);\n this.addChild(this.textWidget);\n\n this.useLayout(new LinearLayout('vertical'));\n }\n}\n","import { Widget } from './Widget';\nimport { DragManager } from './event/DragManager';\nimport { Tween } from './Tween';\nimport { Ease } from './Ease/Ease';\nimport { Helpers } from './Helpers';\nimport { Sprite } from './Sprite';\nimport * as PIXI from 'pixi.js';\nimport { MeasureMode } from './IMeasurable';\n\nexport interface ISliderOptions\n{\n track?: PIXI.Container | Widget;\n handle?: PIXI.Container | Widget;\n fill?: Sprite;\n orientation?: number;\n value?: number;\n minValue?: number;\n maxValue?: number;\n decimals?: number;\n onValueChange?: () => void;\n onValueChanging?: () => void;\n}\n\n/**\n * @memberof PUXI\n * @interface ISliderOptions\n * @property {PIXI.Container}[track]\n * @property {PIXI.Container}[handle]\n */\n\n/**\n * These options are used to configure a `PUXI.Slider`.\n *\n * @memberof PUXI\n * @interface ISliderOptions\n * @property {PIXI.Container}[track]\n * @property {PIXI.Container}[fill]\n * @property {boolean}[vertical]\n * @property {number}[value]\n * @property {number}[minValue]\n * @property {number}[maxValue]\n * @property {number}[decimals]\n * @property {Function}[onValueChange]\n * @property {Function}[onValueChanging]\n */\n\n/**\n * A slider is a form of input to set a variable to a value in a continuous\n * range. It cannot have its own children.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n */\nexport class Slider extends Widget\n{\n protected _disabled: boolean;\n\n track: Widget;\n handle: Widget;\n fill: Sprite;\n\n public readonly orientation: number;\n\n protected percentValue: number;\n protected _minValue: number;\n protected _maxValue: number;\n\n private _localCursor: PIXI.Point;\n\n decimals: number;\n vertical: boolean;\n\n _lastChange: number;\n _lastChanging: number;\n\n onValueChange: (n: number) => void;\n onValueChanging: (n: number) => void;\n\n /**\n * @param options {Object} Slider settings\n * @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the slider track\n * @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as slider handle\n * @param [options.fill=null] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used for slider fill\n * @param [options.vertical=false] {boolean} Direction of the slider\n * @param [options.value=0] {number} value of the slider\n * @param [options.minValue=0] {number} minimum value\n * @param [options.maxValue=100] {number} max value\n * @param [options.decimals=0] {boolean} the decimal precision (use negative to round tens and hundreds)\n * @param [options.onValueChange=null] {callback} Callback when the value has changed\n * @param [options.onValueChanging=null] {callback} Callback while the value is changing\n */\n constructor(options: ISliderOptions)\n {\n super();\n\n /**\n * The value expressed as a percentage from min. to max. This will always\n * be between 0 and 1.\n *\n * The actual value is: `this.minValue + this.percentValue * (this.maxValue - this.minValue`).\n *\n * @member {number}\n */\n this.percentValue = 0;\n this._disabled = false;\n\n this.fill = options.fill || null;\n this.percentValue = this._minValue;\n this._minValue = options.minValue || 0;\n this._maxValue = options.maxValue || 100;\n this.decimals = options.decimals || 0;\n this.orientation = options.orientation || Slider.HORIZONTAL;\n this.onValueChange = options.onValueChange || null;\n this.onValueChanging = options.onValueChanging || null;\n this.value = options.value || 50;\n\n // set options\n this.track = Widget.fromContent(options.track\n || (this.orientation === Slider.HORIZONTAL\n ? Slider.DEFAULT_HORIZONTAL_TRACK.clone()\n : Slider.DEFAULT_VERTICAL_TRACK.clone()));\n this.handle = Widget.fromContent(options.handle || Slider.DEFAULT_HANDLE.clone());\n\n this.addChild(this.track, this.handle);// initialize(), update() usage\n\n this._localCursor = new PIXI.Point();\n this.handle.contentContainer.buttonMode = true;\n }\n\n initialize(): void\n {\n super.initialize();\n\n let startValue = 0;\n let trackSize;\n\n const triggerValueChange = (): void =>\n {\n this.emit('change', this.value);\n\n if (this._lastChange != this.value)\n {\n this._lastChange = this.value;\n\n if (typeof this.onValueChange === 'function')\n {\n this.onValueChange(this.value);\n }\n }\n };\n\n const triggerValueChanging = (): void =>\n {\n this.emit('changing', this.value);\n\n if (this._lastChanging != this.value)\n {\n this._lastChanging = this.value;\n\n if (typeof this.onValueChanging === 'function')\n {\n this.onValueChanging(this.value);\n }\n }\n };\n\n const updatePositionToMouse = (mousePosition, soft): void =>\n {\n this.percentValue = this.getValueAtPhysicalPosition(mousePosition);\n this.layoutHandle();\n triggerValueChanging();\n };\n\n // Handles dragging\n const handleDrag: DragManager = this.handle.eventBroker.dnd as DragManager;\n\n handleDrag.onPress = (event: PIXI.interaction.InteractionEvent): void =>\n {\n event.stopPropagation();\n };\n\n handleDrag.onDragStart = (): void =>\n {\n startValue = this.percentValue;\n trackSize = this.orientation === Slider.HORIZONTAL\n ? this.track.width\n : this.track.height;\n };\n\n handleDrag.onDragMove = (event, offset: PIXI.Point): void =>\n {\n this.percentValue = Math.max(0, Math.min(\n 1,\n startValue + ((this.orientation === Slider.HORIZONTAL ? offset.x : offset.y) / trackSize\n )));\n\n triggerValueChanging();\n this.layoutHandle();\n };\n\n handleDrag.onDragEnd = (): void =>\n {\n triggerValueChange();\n this.layoutHandle();\n };\n\n // Bar pressing/dragging\n const trackDrag: DragManager = this.track.eventBroker.dnd as DragManager;\n\n trackDrag.onPress = (event, isPressed): void =>\n {\n if (isPressed)\n {\n updatePositionToMouse(event.data.global, true);\n }\n\n event.stopPropagation();\n };\n\n trackDrag.onDragMove = (event: PIXI.interaction.InteractionEvent): void =>\n {\n updatePositionToMouse(event.data.global, false);\n };\n\n trackDrag.onDragEnd = (): void =>\n {\n triggerValueChange();\n };\n\n this.layoutHandle();\n }\n\n get value(): number\n {\n return Helpers.Round(Helpers.Lerp(this._minValue, this._maxValue, this.percentValue), this.decimals);\n }\n set value(val: number)\n {\n if (val === this.value)\n {\n return;\n }\n if (isNaN(val))\n {\n throw new Error('Cannot use NaN as a value');\n }\n\n this.percentValue = (Math.max(this._minValue, Math.min(this._maxValue, val)) - this._minValue) / (this._maxValue - this._minValue);\n\n if (typeof this.onValueChange === 'function')\n {\n this.onValueChange(this.value);\n }\n if (typeof this.onValueChanging === 'function')\n {\n this.onValueChanging(this.value);\n }\n\n if (this.handle && this.initialized)\n {\n this.layoutHandle();\n }\n }\n\n get minValue(): number\n {\n return this._minValue;\n }\n set minValue(val: number)\n {\n this._minValue = val;\n this.update();\n }\n\n get maxValue(): number\n {\n return this._maxValue;\n }\n set maxValue(val: number)\n {\n this._maxValue = val;\n this.update();\n }\n\n get disabled(): boolean\n {\n return this._disabled;\n }\n set disabled(val: boolean)\n {\n if (val !== this._disabled)\n {\n this._disabled = val;\n this.handle.contentContainer.buttonMode = !val;\n this.handle.contentContainer.interactive = !val;\n this.track.contentContainer.interactive = !val;\n }\n }\n\n /**\n * @protected\n * @returns the amount of the freedom that handle has in physical units, i.e. pixels. This\n * is the width of the track minus the handle's size.\n */\n protected getPhysicalRange(): number\n {\n return this.orientation === Slider.HORIZONTAL\n ? this.contentWidth - this.handle.getMeasuredWidth()\n : this.contentHeight - this.handle.getMeasuredHeight();\n }\n\n /**\n * @protected\n * @param {PIXI.Point} cursor\n * @returns the value of the slider if the handle's center were (globally)\n * positioned at the given point.\n */\n protected getValueAtPhysicalPosition(cursor: PIXI.Point): number\n {\n // Transform position\n const localCursor = this.contentContainer.toLocal(cursor, null, this._localCursor, true);\n\n let offset: number;\n let range: number;\n\n if (this.orientation === Slider.HORIZONTAL)\n {\n const handleWidth = this.handle.getMeasuredWidth();\n\n offset = localCursor.x - this.paddingLeft - (handleWidth / 4);\n range = this.contentWidth - handleWidth;\n }\n else\n {\n const handleHeight = this.handle.getMeasuredHeight();\n\n offset = localCursor.y - this.paddingTop - (handleHeight / 4);\n range = this.contentHeight - handleHeight;\n }\n\n return offset / range;\n }\n\n /**\n * Re-positions the handle. This should be called after `_value` has been changed.\n */\n protected layoutHandle(): void\n {\n const handle = this.handle;\n\n const handleWidth = handle.getMeasuredWidth();\n const handleHeight = handle.getMeasuredHeight();\n let width = this.width - this.paddingHorizontal;\n let height = this.height - this.paddingVertical;\n\n let handleX: number;\n let handleY: number;\n\n if (this.orientation === Slider.HORIZONTAL)\n {\n width -= handleWidth;\n\n handleY = (height - handleHeight) / 2;\n handleX = (width * this.percentValue);\n }\n else\n {\n height -= handleHeight;\n\n handleX = (width - handleWidth) / 2;\n handleY = (height * this.percentValue);\n }\n\n handle.layout(handleX, handleY, handleX + handleWidth, handleY + handleHeight);\n }\n\n /**\n * Slider measures itself using the track's natural dimensions in its non-oriented\n * direction. The oriented direction will be the equal the range's size times\n * the track's resolution.\n *\n * @param width\n * @param height\n * @param widthMode\n * @param heightMode\n */\n onMeasure(width: number, height: number, widthMode: number, heightMode: number): void\n {\n const naturalWidth = ((this.orientation === Slider.HORIZONTAL)\n ? this._maxValue - this._minValue\n : Math.max(this.handle.contentContainer.width, this.track.contentContainer.width))\n + this.paddingHorizontal;\n const naturalHeight = ((this.orientation === Slider.VERTICAL)\n ? this._maxValue - this._minValue\n : Math.max(this.handle.contentContainer.height, this.track.contentContainer.height))\n + this.paddingVertical;\n\n switch (widthMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredWidth = width;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredWidth = naturalWidth;\n break;\n case MeasureMode.AT_MOST:\n this._measuredWidth = Math.min(width, naturalWidth);\n break;\n }\n\n switch (heightMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredHeight = height;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredHeight = naturalHeight;\n break;\n case MeasureMode.AT_MOST:\n this._measuredHeight = Math.min(height, naturalHeight);\n break;\n }\n }\n\n /**\n * `Slider` lays the track to fill all of its width and height. The handle is aligned\n * in the middle in the non-oriented direction.\n *\n * @param l\n * @param t\n * @param r\n * @param b\n * @param dirty\n * @override\n */\n onLayout(l: number, t: number, r: number, b: number, dirty: boolean): void\n {\n super.onLayout(l, t, r, b, dirty);\n const { handle, track } = this;\n\n track.layout(0, 0, this.width - this.paddingHorizontal, this.height - this.paddingVertical);\n\n // Layout doesn't scale the widget\n // TODO: Create a Track widget, this won't work for custom tracks that don't wanna\n // scale (and it looks ugly.)\n track.insetContainer.width = track.width;\n track.insetContainer.height = track.height;\n\n handle.measure(this.width, this.height, MeasureMode.AT_MOST, MeasureMode.AT_MOST);\n\n this.layoutHandle();\n }\n\n /**\n * The default track for horizontally oriented sliders.\n * @static\n */\n static DEFAULT_HORIZONTAL_TRACK: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0xffffff, 1)\n .drawRect(0, 0, 16, 16) // natural width & height = 16\n .endFill()\n .lineStyle(1, 0x000000, 0.7, 1, true) // draw line in middle\n .moveTo(1, 8)\n .lineTo(15, 8);\n\n /**\n * The default track for vertically oriented sliders.\n * @static\n */\n static DEFAULT_VERTICAL_TRACK: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0xffffff, 1)\n .drawRect(0, 0, 16, 16) // natural width & height = 16\n .endFill()\n .lineStyle(1, 0x000000, 0.7, 1, true) // draw line in middle\n .moveTo(8, 1)\n .lineTo(8, 15);\n\n /**\n * @static\n */\n static DEFAULT_HANDLE: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0x000000)\n .drawCircle(16, 16, 8)\n .endFill()\n .beginFill(0x000000, 0.5)\n .drawCircle(16, 16, 16)\n .endFill();\n /**\n * Horizontal orientation\n * @static\n */\n static HORIZONTAL = 0xff5;\n\n /**\n * Vertical orientation\n * @static\n */\n static VERTICAL = 0xffe;\n}\n","import { Helpers } from './Helpers';\nconst _tweenItemCache = [];\nconst _callbackItemCache = [];\nconst _tweenObjects = {};\nconst _activeTweenObjects = {};\nlet _currentId = 1;\n\nclass TweenObject\n{\n public object: T;\n public tweens: Record;\n public active: boolean;\n public onUpdate: () => void;\n\n constructor(object: T)\n {\n this.object = object;\n this.tweens = {};\n this.active = false;\n this.onUpdate = null;\n }\n}\n\nclass CallbackItem\n{\n key: string;\n obj: any;\n parent: any;\n time: number;\n callback: Function;\n currentTime: number;\n\n private _ready: boolean;\n\n constructor()\n {\n this._ready = false;\n this.obj = null;\n this.parent = null;\n this.key = '';\n this.time = 0;\n this.callback = null;\n this.currentTime = 0;\n }\n\n remove(): void\n {\n this._ready = true;\n delete this.parent.tweens[this.key];\n if (!Object.keys(this.parent.tweens).length)\n {\n this.parent.active = false;\n this.parent.onUpdate = null;\n delete _activeTweenObjects[this.obj._tweenObjectId];\n }\n }\n\n set(obj, callback, time): void\n {\n this.obj = obj.object;\n\n if (!this.obj._currentCallbackID)\n { this.obj._currentCallbackID = 1; }\n else\n { this.obj._currentCallbackID++; }\n\n this.time = time;\n this.parent = obj;\n this.callback = callback;\n this._ready = false;\n this.key = `cb_${this.obj._currentCallbackID}`;\n this.currentTime = 0;\n if (!this.parent.active)\n {\n this.parent.active = true;\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\n }\n }\n\n update(delta: number): void\n {\n this.currentTime += delta;\n if (this.currentTime >= this.time)\n {\n this.remove();\n this.callback.call(this.parent);\n }\n }\n}\n\nclass TweenItem\n{\n key: string;\n parent: any;\n obj: any;\n\n from: any;\n to: any;\n time: number;\n ease: any;\n currentTime: number;\n t: number;\n isColor: boolean;\n currentColor: any;\n surfix: any;\n\n _ready: boolean;\n\n constructor()\n {\n this._ready = false;\n this.parent = null;\n this.obj = null;\n this.key = '';\n this.from = 0;\n this.to = 0;\n this.time = 0;\n this.ease = 0;\n this.currentTime = 0;\n this.t = 0;\n this.isColor = false;\n }\n\n remove(): void\n {\n this._ready = true;\n delete this.parent.tweens[this.key];\n if (!Object.keys(this.parent.tweens).length)\n {\n this.parent.active = false;\n delete _activeTweenObjects[this.obj._tweenObjectId];\n }\n }\n\n set(obj: any, key: string, from: any, to: any, time: number, ease: any): void\n {\n this.isColor = isNaN(from) && from[0] === '#' || isNaN(to) && to[0] === '#';\n this.parent = obj;\n this.obj = obj.object;\n this.key = key;\n this.surfix = getSurfix(to);\n\n if (this.isColor)\n {\n this.to = Helpers.hexToRgb(to);\n this.from = Helpers.hexToRgb(from);\n this.currentColor = { r: this.from.r, g: this.from.g, b: this.from.b };\n }\n else\n {\n this.to = getToValue(to);\n this.from = getFromValue(from, to, this.obj, key);\n }\n\n this.time = time;\n this.currentTime = 0;\n this.ease = ease;\n this._ready = false;\n\n if (!this.parent.active)\n {\n this.parent.active = true;\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\n }\n }\n\n update(delta: number): void\n {\n this.currentTime += delta;\n this.t = Math.min(this.currentTime, this.time) / this.time;\n if (this.ease)\n { this.t = this.ease.getPosition(this.t); }\n\n if (this.isColor)\n {\n this.currentColor.r = Math.round(Helpers.Lerp(this.from.r, this.to.r, this.t));\n this.currentColor.g = Math.round(Helpers.Lerp(this.from.g, this.to.g, this.t));\n this.currentColor.b = Math.round(Helpers.Lerp(this.from.b, this.to.b, this.t));\n this.obj[this.key] = Helpers.rgbToNumber(this.currentColor.r, this.currentColor.g, this.currentColor.b);\n }\n else\n {\n const val = Helpers.Lerp(this.from, this.to, this.t);\n\n this.obj[this.key] = this.surfix ? val + this.surfix : val;\n }\n\n if (this.currentTime >= this.time)\n {\n this.remove();\n }\n }\n}\n\nconst widthKeys = ['width', 'minWidth', 'maxWidth', 'anchorLeft', 'anchorRight', 'left', 'right', 'x'];\nconst heightKeys = ['height', 'minHeight', 'maxHeight', 'anchorTop', 'anchorBottom', 'top', 'bottom', 'y'];\n\nfunction getFromValue(from, to, obj, key): number\n{\n // both number\n if (!isNaN(from) && !isNaN(to))\n { return from; }\n\n // both percentage\n if (isNaN(from) && isNaN(to) && from.indexOf('%') !== -1 && to.indexOf('%') !== -1)\n { return parseFloat(from.replace('%', '')); }\n\n // convert from to px\n if (isNaN(from) && !isNaN(to) && from.indexOf('%') !== -1)\n {\n if (widthKeys.indexOf(key) !== -1)\n { return obj.parent._width * (parseFloat(from.replace('%', '')) * 0.01); }\n else if (heightKeys.indexOf(key) !== -1)\n { return obj.parent._height * (parseFloat(from.replace('%', '')) * 0.01); }\n\n return 0;\n }\n\n // convert from to percentage\n if (!isNaN(from) && isNaN(to) && to.indexOf('%') !== -1)\n {\n if (widthKeys.indexOf(key) !== -1)\n { return from / obj.parent._width * 100; }\n else if (heightKeys.indexOf(key) !== -1)\n { return from / obj.parent._height * 100; }\n\n return 0;\n }\n\n return 0;\n}\n\nfunction getSurfix(to: number | string): any\n{\n if (isNaN(to) && to.indexOf('%') !== -1)\n { return '%'; }\n}\n\nfunction getToValue(to: number | string): any\n{\n if (!isNaN(to))\n { return to; }\n if (isNaN(to) && to.indexOf('%') !== -1)\n { return parseFloat(to.replace('%', '')); }\n}\n\nfunction getObject(obj: any): any\n{\n if (!obj._tweenObjectId)\n {\n obj._tweenObjectId = _currentId;\n _currentId++;\n }\n let object = _tweenObjects[obj._tweenObjectId];\n\n if (!object)\n {\n object = _tweenObjects[obj._tweenObjectId] = new TweenObject(obj);\n }\n\n return object;\n}\n\nfunction getTweenItem(): TweenItem\n{\n for (let i = 0; i < _tweenItemCache.length; i++)\n {\n if (_tweenItemCache[i]._ready)\n { return _tweenItemCache[i]; }\n }\n\n const tween = new TweenItem();\n\n _tweenItemCache.push(tween);\n\n return tween;\n}\n\nfunction getCallbackItem(): CallbackItem\n{\n for (let i = 0; i < _callbackItemCache.length; i++)\n {\n if (_callbackItemCache[i]._ready)\n { return _callbackItemCache[i]; }\n }\n\n const cb = new CallbackItem();\n\n _callbackItemCache.push(cb);\n\n return cb;\n}\n\nexport const Tween = {\n to(obj, time, params, ease?)\n {\n const object = getObject(obj);\n let onUpdate = null;\n\n for (const key in params)\n {\n if (key === 'onComplete')\n {\n const cb = getCallbackItem();\n\n cb.set(object, params[key], time);\n object.tweens[cb.key] = cb;\n continue;\n }\n\n if (key === 'onUpdate')\n {\n onUpdate = params[key];\n continue;\n }\n\n if (time)\n {\n const match = params[key] === obj[key];\n\n if (typeof obj[key] === 'undefined') continue;\n\n if (match)\n {\n if (object.tweens[key]) object.tweens[key].remove();\n }\n else\n {\n if (!object.tweens[key])\n { object.tweens[key] = getTweenItem(); }\n object.tweens[key].set(object, key, obj[key], params[key], time, ease);\n }\n }\n }\n\n if (time)\n { object.onUpdate = onUpdate; }\n else this.set(obj, params);\n },\n from(obj, time, params, ease)\n {\n const object = getObject(obj);\n let onUpdate = null;\n\n for (const key in params)\n {\n if (key === 'onComplete')\n {\n const cb = getCallbackItem();\n\n cb.set(object, params[key], time);\n object.tweens[cb.key] = cb;\n continue;\n }\n\n if (key === 'onUpdate')\n {\n onUpdate = params[key];\n continue;\n }\n\n if (time)\n {\n const match = params[key] == obj[key];\n\n if (typeof obj[key] === 'undefined') continue;\n\n if (match)\n {\n if (object.tweens[key]) object.tweens[key].remove();\n }\n else\n {\n if (!object.tweens[key])\n { object.tweens[key] = getTweenItem(); }\n object.tweens[key].set(object, key, params[key], obj[key], time, ease);\n }\n }\n }\n\n if (time)\n { object.onUpdate = onUpdate; }\n else this.set(obj, params);\n },\n fromTo(obj, time, paramsFrom, paramsTo, ease)\n {\n const object = getObject(obj);\n let onUpdate = null;\n\n for (const key in paramsTo)\n {\n if (key === 'onComplete')\n {\n const cb = getCallbackItem();\n\n cb.set(object, paramsTo[key], time);\n object.tweens[cb.key] = cb;\n continue;\n }\n\n if (key === 'onUpdate')\n {\n onUpdate = paramsTo[key];\n continue;\n }\n\n if (time)\n {\n const match = paramsFrom[key] == paramsTo[key];\n\n if (typeof obj[key] === 'undefined' || typeof paramsFrom[key] === 'undefined') continue;\n\n if (match)\n {\n if (object.tweens[key]) object.tweens[key].remove();\n obj[key] = paramsTo[key];\n }\n else\n {\n if (!object.tweens[key])\n {\n object.tweens[key] = getTweenItem();\n }\n object.tweens[key].set(object, key, paramsFrom[key], paramsTo[key], time, ease);\n }\n }\n }\n\n if (time)\n { object.onUpdate = onUpdate; }\n else this.set(obj, paramsTo);\n },\n set(obj, params)\n {\n const object = getObject(obj);\n\n for (const key in params)\n {\n if (typeof obj[key] === 'undefined') continue;\n if (object.tweens[key]) object.tweens[key].remove();\n obj[key] = params[key];\n }\n },\n _update(delta)\n {\n for (const id in _activeTweenObjects)\n {\n const object = _activeTweenObjects[id];\n\n for (const key in object.tweens)\n {\n object.tweens[key].update(delta);\n }\n if (object.onUpdate)\n {\n object.onUpdate.call(object.object, delta);\n }\n }\n },\n};\n","import { Slider, ISliderOptions } from './Slider';\nimport { Tween } from './Tween';\nimport { Sprite } from './Sprite';\nimport { ScrollWidget } from './ScrollWidget';\nimport * as PIXI from 'pixi.js';\n\ninterface IScrollBarOptions extends ISliderOptions\n{\n track?: Sprite;\n handle?: Sprite;\n scrollingContainer: ScrollWidget;\n orientation: number;\n autohide?: boolean;\n}\n\n/**\n * @memberof PUXI\n * @interface IScrollBarOptions\n * @property {PUXI.Sprite} track\n * @property {PUXI.Sprite} handle\n */\n\n/**\n * An UI scrollbar to control a ScrollingContainer\n *\n * @class\n * @extends PUXI.Slider\n * @memberof PUXI\n * @param options {Object} ScrollBar settings\n * @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the scrollbar track\n * @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as scrollbar handle\n * @param options.scrollingContainer {PIXI.UI.ScrollingContainer} The container to control\n * @param [options.vertical=false] {boolean} Direction of the scrollbar\n * @param [options.autohide=false] {boolean} Hides the scrollbar when not needed\n */\nexport class ScrollBar extends Slider\n{\n scrollingContainer: ScrollWidget;\n autohide: boolean;\n _hidden: boolean;\n\n constructor(options: IScrollBarOptions)\n {\n super({\n track: options.track || ScrollBar.DEFAULT_TRACK.clone(),\n handle: options.handle || ScrollBar.DEFAULT_HANDLE.clone(),\n fill: null,\n orientation: options.orientation,\n minValue: 0,\n maxValue: 1,\n });\n\n this.scrollingContainer = options.scrollingContainer;\n this.autohide = options.autohide;\n this._hidden = false;\n }\n\n initialize(): void\n {\n super.initialize();\n this.decimals = 3; // up decimals to trigger ValueChanging more often\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n this.on('changing', (): void =>\n {\n this.scrollingContainer.forcePctPosition(\n this.orientation === Slider.HORIZONTAL ? 'x' : 'y',\n this.percentValue);\n });\n\n this.on('change', (): void =>\n {\n this.scrollingContainer.setScrollPosition();\n });\n }\n\n toggleHidden(hidden: boolean): void\n {\n if (this.autohide)\n {\n if (hidden && !this._hidden)\n {\n Tween.to(this, 0.2, { alpha: 0 });\n this._hidden = true;\n }\n else if (!hidden && this._hidden)\n {\n Tween.to(this, 0.2, { alpha: 1 });\n this._hidden = false;\n }\n }\n }\n\n /**\n * @static\n */\n static DEFAULT_TRACK = new PIXI.Graphics()\n .beginFill(0xffffff)\n .drawRect(0, 0, 8, 8)\n .endFill();\n\n /**\n * @static\n */\n static DEFAULT_HANDLE: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0x000000)\n .drawCircle(8, 8, 4)\n .endFill()\n .beginFill(0x000000, 0.5)\n .drawCircle(8, 8, 8)\n .endFill();\n}\n\n","import { InteractiveGroup } from './InteractiveGroup';\nimport { Helpers } from './Helpers';\nimport { DragManager } from './event/DragManager';\nimport { ScrollManager } from './event/ScrollManager';\nimport * as PIXI from 'pixi.js';\nimport { Widget } from './Widget';\nimport { WidgetGroup } from './WidgetGroup';\nimport { BorderLayout } from './layout-manager';\nimport { ScrollBar } from './ScrollBar';\nimport { ALIGN, BorderLayoutOptions, LayoutOptions } from './layout-options';\nimport { Slider } from './Slider';\n\n/**\n * @namespace PUXI\n * @interface\n */\ninterface IScrollingContainerOptions\n{\n scrollX?: boolean;\n scrollY?: boolean;\n dragScrolling?: boolean;\n softness?: number;\n radius?: number;\n expandMask?: number;\n overflowY?: number;\n overflowX?: number;\n scrollBars?: boolean;\n}\n\n/**\n * `ScrollWidget` masks its contents to its layout bounds and translates\n * its children when scrolling. It uses the anchor layout.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.InteractiveGroup\n */\nexport class ScrollWidget extends InteractiveGroup\n{\n private mask: PIXI.Graphics;\n public readonly innerContainer: WidgetGroup;\n private innerBounds: PIXI.Rectangle;\n\n scrollX: boolean;\n scrollY: boolean;\n dragScrolling: boolean;\n softness: number;\n radius: number;\n expandMask: number;\n overflowY: number;\n overflowX: number;\n\n animating: boolean;\n scrolling: boolean;\n\n protected scrollBars: ScrollBar[];\n protected scrollPosition: PIXI.Point;\n protected scrollVelocity: PIXI.Point;\n protected targetPosition: PIXI.Point;\n protected lastPosition: PIXI.Point;\n protected stop: boolean;\n\n private boundCached: number;\n private lastWidth: number;\n private lastHeight: number;\n\n /**\n * @param {PUXI.IScrollingContainerOptions} options\n * @param [options.scrollX=false] {Boolean} Enable horizontal scrolling\n * @param [options.scrollY=false] {Boolean} Enable vertical scrolling\n * @param [options.dragScrolling=true] {Boolean} Enable mousedrag scrolling\n * @param [options.softness=0.5] {Number} (0-1) softness of scrolling\n * @param [options.width=0] {Number|String} container width\n * @param [options.height=0] {Number} container height\n * @param [options.radius=0] {Number} corner radius of clipping mask\n * @param [options.expandMask=0] {Number} mask expand (px)\n * @param [options.overflowY=0] {Number} how much can be scrolled past content dimensions\n * @param [options.overflowX=0] {Number} how much can be scrolled past content dimensions\n */\n constructor(options: IScrollingContainerOptions = {})\n {\n super();\n\n this.mask = new PIXI.Graphics();\n this.innerContainer = new InteractiveGroup();\n this.innerBounds = new PIXI.Rectangle();\n super.addChild(this.innerContainer);\n this.contentContainer.addChild(this.mask);\n this.contentContainer.mask = this.mask;\n\n this.scrollX = options.scrollX !== undefined ? options.scrollX : false;\n this.scrollY = options.scrollY !== undefined ? options.scrollY : false;\n this.dragScrolling = options.dragScrolling !== undefined ? options.dragScrolling : true;\n this.softness = options.softness !== undefined ? Math.max(Math.min(options.softness || 0, 1), 0) : 0.5;\n this.radius = options.radius || 0;\n this.expandMask = options.expandMask || 0;\n this.overflowY = options.overflowY || 0;\n this.overflowX = options.overflowX || 0;\n\n this.scrollVelocity = new PIXI.Point();\n\n /**\n * Widget's position in a scroll.\n * @member {PIXI.Point}\n * @private\n */\n this.scrollPosition = new PIXI.Point();\n\n /**\n * Position that the cursor is at, i.e. our scroll \"target\".\n * @member {PIXI.Point}\n * @private\n */\n this.targetPosition = new PIXI.Point();\n this.lastPosition = new PIXI.Point();\n\n this.useLayout(new BorderLayout());\n\n this.animating = false;\n this.scrolling = false;\n this.scrollBars = [];\n\n if (options.scrollBars && this.scrollX)\n {\n const horizontalScrollBar: ScrollBar = new ScrollBar({\n orientation: ScrollBar.HORIZONTAL,\n scrollingContainer: this,\n minValue: 0,\n maxValue: 1,\n })\n .setLayoutOptions(\n new BorderLayoutOptions({\n width: LayoutOptions.FILL_PARENT,\n height: LayoutOptions.WRAP_CONTENT,\n region: BorderLayoutOptions.REGION_BOTTOM,\n horizontalAlign: ALIGN.CENTER,\n verticalAlign: ALIGN.BOTTOM,\n }),\n )\n .setBackground(0xff)\n .setBackgroundAlpha(0.8) as ScrollBar;\n\n super.addChild(horizontalScrollBar);\n this.scrollBars.push(horizontalScrollBar);\n }\n if (options.scrollBars && this.scrollY)\n {\n const verticalScrollBar: ScrollBar = new ScrollBar({\n orientation: ScrollBar.VERTICAL,\n scrollingContainer: this,\n minValue: 0,\n maxValue: 1,\n })\n .setLayoutOptions(\n new BorderLayoutOptions({\n width: LayoutOptions.WRAP_CONTENT,\n height: LayoutOptions.FILL_PARENT,\n region: BorderLayoutOptions.REGION_RIGHT,\n horizontalAlign: ALIGN.RIGHT,\n verticalAlign: ALIGN.CENTER,\n }),\n )\n .setBackground(0xff)\n .setBackgroundAlpha(0.8) as ScrollBar;\n\n super.addChild(verticalScrollBar);\n this.scrollBars.push(verticalScrollBar);\n }\n\n this.boundCached = 0;\n }\n\n /**\n * Updates the mask and scroll position before rendering.\n *\n * @override\n */\n update(): void\n {\n super.update();\n\n if (this.lastWidth !== this.width || this.lastHeight !== this.height)\n {\n const of = this.expandMask;\n\n this.mask.clear();\n this.mask.lineStyle(0);\n this.mask.beginFill(0xFFFFFF, 1);\n\n if (this.radius === 0)\n {\n this.mask.drawRect(-of, -of, this.width + of, this.height + of);\n }\n else\n {\n this.mask.drawRoundedRect(-of, -of, this.width + of, this.height + of, this.radius);\n }\n\n this.mask.endFill();\n\n this.lastWidth = this.width;\n this.lastHeight = this.height;\n }\n }\n\n /**\n * Adds this scrollbar. It is expected that the given scrollbar has been\n * given proper border-layout options.\n *\n * @todo This only works for TOP, LEFT scrollbars as BOTTOM, RIGHT are occupied.\n * @param {PUXI.ScrollBar} scrollBar\n */\n addScrollBar(scrollBar: ScrollBar): ScrollWidget\n {\n super.addChild(scrollBar);\n this.scrollBars.push(scrollBar);\n\n return this;\n }\n\n /**\n * @param {PUXI.Widget[]} newChildren\n * @returns {ScrollWidget} this widget\n */\n addChild(...newChildren: Widget[]): Widget\n {\n for (let i = 0; i < newChildren.length; i++)\n {\n this.innerContainer.addChild(newChildren[i]);\n }\n\n this.getInnerBounds(true); // make sure bounds is updated instantly when a child is added\n\n return this;\n }\n\n /**\n * Updates the scroll bar values, and should be called when scrolled.\n */\n updateScrollBars(): void\n {\n for (let i = 0, j = this.scrollBars.length; i < j; i++)\n {\n const scrollBar = this.scrollBars[i];\n\n if (scrollBar.orientation === Slider.HORIZONTAL)\n {\n const x = this.getPercentPosition('x');\n\n scrollBar.value = x;\n }\n else if (scrollBar.orientation === Slider.VERTICAL)\n {\n const y = this.getPercentPosition('y');\n\n scrollBar.value = y;\n }\n }\n }\n\n getInnerBounds(force?: boolean): PIXI.Rectangle\n {\n // this is a temporary fix, because we cant rely on innercontainer height if the children is positioned > 0 y.\n if (force || performance.now() - this.boundCached > 1000)\n {\n this.innerContainer.insetContainer.getLocalBounds(this.innerBounds);\n\n this.innerBounds.height = this.innerBounds.y + this.innerContainer.height || 0;\n this.innerBounds.width = this.innerBounds.x + this.innerContainer.width || 0;\n this.boundCached = performance.now();\n }\n\n return this.innerBounds;\n }\n\n /**\n * @override\n */\n initialize(): void\n {\n super.initialize();\n\n if (this.scrollX || this.scrollY)\n {\n this.initScrolling();\n }\n }\n\n private initScrolling(): void\n {\n const container = this.innerContainer.insetContainer;\n const realPosition = new PIXI.Point();\n const {\n scrollPosition,\n targetPosition,\n } = this;\n\n // Drag scroll\n if (this.dragScrolling)\n {\n const drag: DragManager = this.eventBroker.dnd as DragManager;\n\n drag.onDragStart = (e): void =>\n {\n if (!this.scrolling)\n {\n realPosition.copyFrom(container.position);\n scrollPosition.copyFrom(container.position);\n this.scrolling = true;\n this.setScrollPosition();\n\n this.emit('scrollstart', e);\n }\n };\n\n drag.onDragMove = (_, offset): void =>\n {\n if (this.scrollX)\n {\n targetPosition.x = realPosition.x + offset.x;\n }\n if (this.scrollY)\n {\n targetPosition.y = realPosition.y + offset.y;\n }\n\n this.setScrollPosition();\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n drag.onDragEnd = (e): void =>\n {\n if (this.scrolling)\n {\n this.scrolling = false;\n this.emit('scrollend', e);\n }\n };\n }\n\n // Mouse scroll\n const scrollSpeed = new PIXI.Point();\n const scroll = new ScrollManager(this, true);\n\n scroll.onMouseScroll = (e, delta: PIXI.Point): void =>\n {\n scrollSpeed.set(-delta.x * 0.2, -delta.y * 0.2);\n this.setScrollPosition(scrollSpeed);\n };\n\n this.updateScrollBars();\n }\n\n /**\n * @param {string} direction - `'x'` or `'y'`\n * @returns {number} a value between 0 and 1 indicating how scrolling\n * has occured in that direction (called percent position).\n */\n getPercentPosition(direction: 'x' | 'y'): number\n {\n const bounds = this.getInnerBounds();\n const container = this.innerContainer.insetContainer;\n\n if (direction === 'x')\n {\n return container.x / (this.width - bounds.width);\n }\n else if (direction === 'y')\n {\n return container.y / (this.height - bounds.height);\n }\n\n return 0;\n }\n\n forcePctPosition = (direction: string, pct: number): void =>\n {\n const bounds = this.getInnerBounds();\n const container = this.innerContainer.insetContainer;\n\n if (this.scrollX && direction === 'x')\n {\n container.position[direction] = -((bounds.width - this.width) * pct);\n }\n if (this.scrollY && direction === 'y')\n {\n container.position[direction] = -((bounds.height - this.height) * pct);\n }\n\n this.scrollPosition[direction] = this.targetPosition[direction] = container.position[direction];\n };\n\n focusPosition = (pos: PIXI.Point): void =>\n {\n const bounds = this.getInnerBounds();\n const container = this.innerContainer.insetContainer;\n\n let dif;\n\n if (this.scrollX)\n {\n const x = Math.max(0, (Math.min(bounds.width, pos.x)));\n\n if (x + container.x > this.width)\n {\n dif = x - this.width;\n container.x = -dif;\n }\n else if (x + container.x < 0)\n {\n dif = x + container.x;\n container.x -= dif;\n }\n }\n if (this.scrollY)\n {\n const y = Math.max(0, (Math.min(bounds.height, pos.y)));\n\n if (y + container.y > this.height)\n {\n dif = y - this.height;\n container.y = -dif;\n }\n else if (y + container.y < 0)\n {\n dif = y + container.y;\n container.y -= dif;\n }\n }\n\n this.lastPosition.copyFrom(container.position);\n this.targetPosition.copyFrom(container.position);\n this.scrollPosition.copyFrom(container.position);\n\n this.updateScrollBars();\n };\n\n /**\n * @param {PIXI.Point}[velocity]\n */\n setScrollPosition = (velocity?: PIXI.Point): void =>\n {\n if (velocity)\n {\n this.scrollVelocity.copyFrom(velocity);\n }\n\n const container = this.innerContainer.insetContainer;\n\n if (!this.animating)\n {\n this.animating = true;\n this.lastPosition.copyFrom(container.position);\n this.targetPosition.copyFrom(container.position);\n\n PIXI.Ticker.shared.add(this.updateScrollPosition);\n }\n };\n\n /**\n * @param {number} delta\n * @protected\n */\n protected updateScrollPosition = (delta: number): void =>\n {\n this.stop = true;\n\n if (this.scrollX)\n {\n this.updateDirection('x', delta);\n }\n if (this.scrollY)\n {\n this.updateDirection('y', delta);\n }\n\n if (this.stop)\n {\n PIXI.Ticker.shared.remove(this.updateScrollPosition);\n this.animating = false;\n }\n\n this.updateScrollBars();\n };\n\n /**\n * @param {'x' | 'y'} direction\n * @param {number} delta\n * @protected\n */\n protected updateDirection = (direction: string, delta: number): void =>\n {\n const bounds = this.getInnerBounds();\n const {\n scrollPosition,\n scrollVelocity,\n targetPosition,\n lastPosition,\n } = this;\n const container = this.innerContainer.insetContainer;\n\n let min;\n\n if (direction === 'y')\n {\n min = Math.round(Math.min(0, this.height - bounds.height));\n }\n else\n {\n min = Math.round(Math.min(0, this.width - bounds.width));\n }\n\n if (!this.scrolling && Math.round(scrollVelocity[direction]) !== 0)\n {\n targetPosition[direction] += scrollVelocity[direction];\n scrollVelocity[direction] = Helpers.Lerp(\n scrollVelocity[direction],\n 0,\n (5 + 2.5 / Math.max(this.softness, 0.01)) * delta);\n\n if (targetPosition[direction] > 0)\n {\n targetPosition[direction] = 0;\n }\n else if (targetPosition[direction] < min)\n {\n targetPosition[direction] = min;\n }\n }\n\n if (!this.scrolling\n && Math.round(scrollVelocity[direction]) === 0\n && (container[direction] > 0\n || container[direction] < min))\n {\n const target = this.scrollPosition[direction] > 0 ? 0 : min;\n\n scrollPosition[direction] = Helpers.Lerp(\n scrollPosition[direction],\n target,\n (40 - (30 * this.softness)) * delta);\n this.stop = false;\n }\n else if (this.scrolling || Math.round(scrollVelocity[direction]) !== 0)\n {\n if (this.scrolling)\n {\n scrollVelocity[direction] = this.scrollPosition[direction] - lastPosition[direction];\n lastPosition.copyFrom(scrollPosition);\n }\n if (targetPosition[direction] > 0)\n {\n scrollVelocity[direction] = 0;\n scrollPosition[direction] = 100 * this.softness * (1 - Math.exp(targetPosition[direction] / -200));\n }\n else if (targetPosition[direction] < min)\n {\n scrollVelocity[direction] = 0;\n scrollPosition[direction] = min - (100 * this.softness * (1 - Math.exp((min - targetPosition[direction]) / -200)));\n }\n else\n {\n scrollPosition[direction] = targetPosition[direction];\n }\n\n this.stop = false;\n }\n\n container.position[direction] = Math.round(scrollPosition[direction]);\n };\n\n /**\n * This is fired when the user starts scrolling.\n * @event scrollstart\n */\n\n /**\n * This is fired when the user stops scrolling.\n * @event scrollend\n */\n}\n","import { InteractiveGroup } from './InteractiveGroup';\nimport { Tween } from './Tween';\nimport { EaseBase } from './Ease/EaseBase';\nimport { Widget } from './Widget';\n\n/**\n * An UI Container object\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n * @param desc {Boolean} Sort the list descending\n * @param tweenTime {Number} if above 0 the sort will be animated\n * @param tweenEase {PIXI.UI.Ease} ease method used for animation\n */\nexport class SortableList extends InteractiveGroup\n{\n desc: boolean;\n tweenTime: number;\n tweenEase: EaseBase;\n items: any[];\n\n _sortTimeout: NodeJS.Timeout;\n\n constructor(desc, tweenTime, tweenEase)\n {\n super(0, 0);\n\n this.desc = typeof desc !== 'undefined' ? desc : false;\n this.tweenTime = tweenTime || 0;\n this.tweenEase = tweenEase;\n this.items = [];\n }\n\n addChild(UIObject: any, fnValue?, fnThenBy?): void\n {\n super.addChild(UIObject);\n\n if (this.items.indexOf(UIObject) === -1)\n {\n this.items.push(UIObject);\n }\n\n if (typeof fnValue === 'function')\n {\n UIObject._sortListValue = fnValue;\n }\n\n if (typeof fnThenBy === 'function')\n {\n UIObject._sortListThenByValue = fnThenBy;\n }\n\n if (!UIObject._sortListRnd)\n {\n UIObject._sortListRnd = Math.random();\n }\n\n this.sort();\n }\n\n removeChild(UIObject): void\n {\n if (arguments.length > 1)\n {\n for (let i = 0; i < arguments.length; i++)\n {\n this.removeChild(arguments[i]);\n }\n }\n else\n {\n super.removeChild(UIObject);\n const index = this.items.indexOf(UIObject);\n\n if (index !== -1)\n {\n this.items.splice(index, 1);\n }\n\n this.sort();\n }\n }\n\n sort(instant = false): void\n {\n clearTimeout(this._sortTimeout);\n\n if (instant)\n {\n this._sort();\n\n return;\n }\n\n this._sortTimeout = setTimeout(() => { this._sort(); }, 0);\n }\n\n _sort()\n {\n const desc = this.desc;\n let y = 0;\n let alt = true;\n\n this.items.sort(function (a, b)\n {\n let res = a._sortListValue() < b._sortListValue() ? desc ? 1 : -1\n : a._sortListValue() > b._sortListValue() ? desc ? -1 : 1 : 0;\n\n if (res === 0 && a._sortListThenByValue && b._sortListThenByValue)\n {\n res = a._sortListThenByValue() < b._sortListThenByValue() ? desc ? 1 : -1\n : a._sortListThenByValue() > b._sortListThenByValue() ? desc ? -1 : 1 : 0;\n }\n if (res === 0)\n {\n res = a._sortListRnd > b._sortListRnd ? 1\n : a._sortListRnd < b._sortListRnd ? -1 : 0;\n }\n\n return res;\n });\n\n for (let i = 0; i < this.items.length; i++)\n {\n const item = this.items[i];\n\n alt = !alt;\n\n if (this.tweenTime > 0)\n {\n Tween.fromTo(item, this.tweenTime, { x: item.x, y: item.y }, { x: 0, y }, this.tweenEase);\n }\n else\n {\n item.x = 0;\n item.y = y;\n }\n y += item.height;\n if (typeof item.altering === 'function')\n { item.altering(alt); }\n }\n\n // force it to update parents when sort animation is done (prevent scrolling container bug)\n if (this.tweenTime > 0)\n {\n setTimeout(() =>\n {\n this.updatesettings(false, true);\n }, this.tweenTime * 1000);\n }\n }\n}\n\n","import { Widget } from './Widget';\nimport * as PIXI from 'pixi.js';\n\n/**\n * A sliced sprite with dynamic width and height.\n *\n * @class\n * @memberof PUXI\n * @param Texture {PIXI.Texture} the texture for this SliceSprite\n * @param BorderWidth {Number} Width of the sprite borders\n * @param horizontalSlice {Boolean} Slice the sprite horizontically\n * @param verticalSlice {Boolean} Slice the sprite vertically\n * @param [tile=false] {Boolean} tile or streach\n */\nexport class SliceSprite extends Widget\n{\n ftl: PIXI.Rectangle;\n ftr: PIXI.Rectangle;\n\n fbl: PIXI.Rectangle;\n fbr: PIXI.Rectangle;\n\n ft: PIXI.Rectangle;\n fb: PIXI.Rectangle;\n fr: PIXI.Rectangle;\n fl: PIXI.Rectangle;\n ff: PIXI.Rectangle;\n\n stl: PIXI.Sprite;\n str: PIXI.Sprite;\n sbl: PIXI.Sprite;\n sbr: PIXI.Sprite;\n\n st: PIXI.Sprite;\n sb: PIXI.Sprite;\n sl: PIXI.Sprite;\n sr: PIXI.Sprite;\n\n sf: PIXI.Sprite;\n\n bw: number;\n vs: boolean;\n hs: boolean;\n t: PIXI.BaseTexture;\n f: PIXI.Rectangle;\n\n tile: any;\n\n constructor(texture: PIXI.Texture, borderWidth, horizontalSlice, verticalSlice, tile)\n {\n super(texture.width, texture.height);\n\n this.bw = borderWidth || 5;\n this.vs = typeof verticalSlice !== 'undefined' ? verticalSlice : true;\n this.hs = typeof horizontalSlice !== 'undefined' ? horizontalSlice : true;\n this.t = texture.baseTexture;\n this.f = texture.frame;\n this.tile = tile;\n\n if (this.hs)\n {\n this.setting.minWidth = borderWidth * 2;\n }\n if (this.vs)\n {\n this.setting.minHeight = borderWidth * 2;\n }\n\n /**\n * Updates the sliced sprites position and size\n *\n * @private\n */\n this.update = function ()\n {\n if (!this.initialized) return;\n if (vs && hs)\n {\n str.x = sbr.x = sr.x = this._width - bw;\n sbl.y = sbr.y = sb.y = this._height - bw;\n sf.width = st.width = sb.width = this._width - bw * 2;\n sf.height = sl.height = sr.height = this._height - bw * 2;\n }\n else if (hs)\n {\n sr.x = this._width - bw;\n sl.height = sr.height = sf.height = this._height;\n sf.width = this._width - bw * 2;\n }\n else\n { // vs\n sb.y = this._height - bw;\n st.width = sb.width = sf.width = this._width;\n sf.height = this._height - bw * 2;\n }\n\n if (this.tint !== null)\n {\n sf.tint = this.tint;\n if (vs && hs) stl.tint = str.tint = sbl.tint = sbr.tint = this.tint;\n if (hs) sl.tint = sr.tint = this.tint;\n if (vs) st.tint = sb.tint = this.tint;\n }\n\n if (this.blendMode !== null)\n {\n sf.blendMode = this.blendMode;\n if (vs && hs) stl.blendMode = str.blendMode = sbl.blendMode = sbr.blendMode = this.blendMode;\n if (hs) sl.blendMode = sr.blendMode = this.blendMode;\n if (vs) st.blendMode = sb.blendMode = this.blendMode;\n }\n };\n }\n\n initialize()\n {\n super.initialize();\n const { f, bw } = this;\n\n // get frames\n if (this.vs && this.hs)\n {\n this.ftl = new PIXI.Rectangle(f.x, f.y, bw, bw);\n this.ftr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, bw);\n this.fbl = new PIXI.Rectangle(f.x, f.y + f.height - bw, bw, bw);\n this.fbr = new PIXI.Rectangle(f.x + f.width - bw, f.y + f.height - bw, bw, bw);\n this.ft = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, bw);\n this.fb = new PIXI.Rectangle(f.x + bw, f.y + f.height - bw, f.width - bw * 2, bw);\n this.fl = new PIXI.Rectangle(f.x, f.y + bw, bw, f.height - bw * 2);\n this.fr = new PIXI.Rectangle(f.x + f.width - bw, f.y + bw, bw, f.height - bw * 2);\n this.ff = new PIXI.Rectangle(f.x + bw, f.y + bw, f.width - bw * 2, f.height - bw * 2);\n }\n else if (this.hs)\n {\n this.fl = new PIXI.Rectangle(this.f.x, f.y, bw, f.height);\n this.fr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, f.height);\n this.ff = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, f.height);\n }\n else\n { // vs\n this.ft = new PIXI.Rectangle(f.x, f.y, f.width, bw);\n this.fb = new PIXI.Rectangle(f.x, f.y + f.height - bw, f.width, bw);\n this.ff = new PIXI.Rectangle(f.x, f.y + bw, f.width, f.height - bw * 2);\n }\n\n // TODO: swap frames if rotation\n\n const { t, ff, fl, fr, ft, fb } = this;\n\n // make sprites\n this.sf = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, ff))\n : new PIXI.Sprite(new PIXI.Texture(t, ff));\n this.contentContainer.addChildAt(this.sf, 0);\n\n if (this.vs && this.hs)\n {\n this.stl = new PIXI.Sprite(new PIXI.Texture(t, this.ftl));\n this.str = new PIXI.Sprite(new PIXI.Texture(t, this.ftr));\n this.sbl = new PIXI.Sprite(new PIXI.Texture(t, this.fbl));\n this.sbr = new PIXI.Sprite(new PIXI.Texture(t, this.fbr));\n this.contentContainer.addChildAt(this.stl, 0);\n this.contentContainer.addChildAt(this.str, 0);\n this.contentContainer.addChildAt(this.sbl, 0);\n this.contentContainer.addChildAt(this.sbr, 0);\n }\n if (hs)\n {\n this.sl = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, fl))\n : new PIXI.Sprite(new PIXI.Texture(t, fl));\n this.sr = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, fr))\n : new PIXI.Sprite(new PIXI.Texture(t, fr));\n\n this.contentContainer.addChildAt(this.sl, 0);\n this.contentContainer.addChildAt(this.sr, 0);\n }\n if (this.vs)\n {\n this.st = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, ft))\n : new PIXI.Sprite(new PIXI.Texture(t, ft));\n this.sb = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, fb))\n : new PIXI.Sprite(new PIXI.Texture(t, fb));\n this.contentContainer.addChildAt(this.st, 0);\n this.contentContainer.addChildAt(this.sb, 0);\n }\n\n // set constant position and sizes\n if (this.vs && this.hs)\n {\n this.st.x = bw;\n this.sb.x = bw;\n this.sl.y = bw;\n this.sr.y = bw;\n this.stl.width = bw;\n this.str.width = bw;\n this.sbl.width = bw;\n this.sbr.width = bw;\n this.stl.height = bw;\n this.str.height = bw;\n this.sbl.height = bw;\n this.sbr.height = bw;\n }\n\n if (this.hs)\n {\n this.sf.x = this.sl.width = this.sr.width = bw;\n }\n if (this.vs)\n {\n this.sf.y = this.st.height = this.sb.height = bw;\n }\n }\n\n update(): void\n {\n // NO updates\n }\n}\n\n","import { Stage } from '../Stage';\nimport { Widget } from '../Widget';\nimport * as PIXI from 'pixi.js';\n\nexport abstract class Controller extends PIXI.utils.EventEmitter\n{\n stage: Stage;\n\n constructor(stage: Stage)\n {\n super();\n this.stage = stage;\n }\n\n abstract in(widget: T): any;\n\n abstract out(widget: T): any;\n}\n\n/**\n * A controller handles a stage-level state that can be held by wigets. For example,\n * `PUXI.FocusController` handles which widget is focused.\n *\n * @memberof PUXI\n * @class Controller\n */\n\n/**\n * Enables the widget to enter the controller's state.\n *\n * @memberof PUXI.Controller#\n * @method in\n * @param {PUXI.Widget} widget\n */\n\n/**\n * Disables the widget from the controller's state.\n *\n * @memberof PUXI.Controller#\n * @method out\n * @param {PUXI.Widget} widget\n */\n","import { Controller } from './Controller';\nimport { CheckBox } from '../CheckBox';\nimport { Stage } from '../Stage';\n\nexport type CheckGroup = string;\n\n/**\n * @memberof PUXI\n * @typedef {string} CheckGroup\n */\n\ninterface CBGroup\n{\n checks: Array;\n selected: CheckBox;\n}\n\n/**\n * Check boxes use this controller to deselect other checkboxes in the group when\n * they are selected.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Controller\n */\nexport class CheckBoxGroupController extends Controller\n{\n protected checkGroups: Map;\n\n constructor(stage: Stage)\n {\n super(stage);\n this.checkGroups = new Map();\n }\n\n /**\n * @param {PUXI.CheckBox} widget\n * @param {PUXI.CheckGroup} checkGroup\n * @override\n */\n in(widget: CheckBox, checkGroup?: CheckGroup): void\n {\n if (!checkGroup)\n {\n throw new Error('Default check groups don\\'t exist!');\n }\n\n const group = this.checkGroups.get(checkGroup) || this.initGroup(checkGroup);\n\n group.checks.push(widget);\n widget.checkGroup = checkGroup;\n }\n\n /**\n * @override\n */\n out(widget: CheckBox): void\n {\n const group = this.checkGroups.get(widget.checkGroup);\n const i = group.checks.indexOf(widget);\n\n if (i > 0)\n {\n group.checks.splice(i, 1);\n }\n\n widget.checkGroup = null;\n }\n\n /**\n * Called when a checkbox is selected. Do not call from outside.\n *\n * @param {CheckBox} widget\n */\n notifyCheck(widget: CheckBox): void\n {\n const group = this.checkGroups.get(widget.checkGroup);\n\n if (!group)\n {\n return;\n }\n\n const { checks } = group;\n\n for (let i = 0, j = checks.length; i < j; i++)\n {\n if (checks[i] !== widget)\n {\n checks[i].checked = false;\n }\n }\n\n group.selected = widget;\n }\n\n /**\n * @param {PUXI.CheckGroup} group\n * @returns {CheckBox} the selected checkbox in the group\n */\n getSelected(group: CheckGroup): CheckBox\n {\n return this.checkGroups.get(group)?.selected;\n }\n\n /**\n * Ensures that the check group exists in `this.checkGroups`.\n *\n * @param {PUXI.CheckGroup} id\n * @protected\n */\n protected initGroup(id: CheckGroup): CBGroup\n {\n const cgroup: CBGroup = {\n checks: [],\n selected: null,\n };\n\n this.checkGroups.set(id, cgroup);\n\n return cgroup;\n }\n}\n","import { Controller } from './Controller';\nimport { Stage } from '../Stage';\nimport { IFocusable } from '../IFocusable';\n\nexport type TabGroup = string;\n\n/**\n * Pressing tab on a focused widget will make the next widget its tab group\n * focused. If no tab group is specified for a focusable widget, then it\n * has the `'default'` tab group.\n *\n * @memberof PUXI\n * @typedef {string} TabGroup\n */\n\n/**\n * @memberof PUXI\n * @class\n * @extends PUXI.Controller\n */\nexport class FocusController extends Controller\n{\n stage: Stage;\n\n protected tabGroups: Map;\n protected currentItem: IFocusable;\n\n useTab: boolean;\n useForward: boolean;\n useBack: boolean;\n\n constructor(stage: Stage)\n {\n super(stage);\n\n /**\n * Map of tab-group names to the widgets in those groups.\n * @member {Map}\n * @protected\n */\n this.tabGroups = new Map();\n\n /**\n * Whether to enable tab-based focus movement.\n * @member {boolean}\n */\n this.useTab = true;\n\n /**\n * Whether to enable forward arrow key focus movement.\n * @member {boolean}\n */\n this.useForward = true;\n\n /**\n * Whether to enable back arrow key focus movement.\n * @member {boolean}\n */\n this.useBack = true;\n }\n\n /**\n * Adds the (focusable) widget to the tab group so that pressing tab repeatedly\n * will eventually bring it into focus.\n *\n * @param {PUXI.IFocusable} widget - the widget to add\n * @param {number}[tabIndex=0] - unique index for the widget in tab group used for ordering\n * @param {PUXI.TabGroup}[tabGroup='default'] - tab group name\n */\n in(widget: IFocusable, tabIndex = 0, tabGroup = 'default'): void\n {\n let widgets = this.tabGroups.get(tabGroup);\n\n if (!widgets)\n {\n widgets = [];\n this.tabGroups.set(tabGroup, widgets);\n }\n\n const i = widgets.indexOf(widget);\n\n // Push widget into tab group list if not present already.\n if (i === -1)\n {\n widget.tabIndex = tabIndex !== undefined ? tabIndex : -1;\n widget.tabGroup = tabGroup;\n\n widgets.push(widget);\n widgets.sort((a, b) => a.tabIndex - b.tabIndex);\n }\n }\n\n /**\n * @param {PUXI.IFocusable} widget\n * @override\n */\n out(widget: IFocusable): void\n {\n const widgets = this.tabGroups.get(widget.tabGroup);\n\n if (!widgets)\n {\n return;\n }\n\n const i = widgets.indexOf(widget);\n\n if (i !== -1)\n {\n // Widgets should already be sorted & so deleting should not unsort it.\n widgets.splice(i, 1);\n }\n }\n\n /**\n * Called when a widget comes into focus. Do not call this yourself.\n *\n * @param {IFocusable} widget\n */\n notifyFocus(widget: IFocusable): void\n {\n const lastItem = this.currentItem;\n\n if (lastItem)\n {\n lastItem.blur();\n this.emit('blur', lastItem);\n }\n\n this.currentItem = widget;\n\n this.emit('focus', widget);\n this.emit('focusChanged', widget, lastItem);\n }\n\n /**\n * Clears the currently focused item without blurring it. It is called\n * when a widget goes out of focus.\n */\n notifyBlur(): void\n {\n this.emit('blur', this.currentItem);\n this.emit('focusChanged', null, this.currentItem);\n\n this.currentItem = null;\n }\n\n /**\n * Brings the widget into focus.\n *\n * @param {IFocusable} item\n */\n focus(item: IFocusable): void\n {\n const lastItem = this.currentItem;\n\n if (lastItem)\n {\n lastItem.blur();\n this.emit('blur', lastItem);\n }\n\n item.focus();\n\n this.emit('focus', item);\n this.emit('focusChanged', item, lastItem);\n }\n\n /**\n * Blurs the currently focused widget out of focus.\n */\n blur(): void\n {\n if (this.currentItem)\n {\n this.currentItem.blur();\n\n this.emit('blur', this.currentItem);\n this.emit('focusChanged', null, this.currentItem);\n\n this.currentItem = null;\n }\n }\n\n /**\n * Called when tab is pressed on a focusable widget.\n */\n onTab(): void\n {\n const { tabGroups, currentItem } = this;\n\n if (currentItem)\n {\n const tabGroup = tabGroups.get(currentItem.tabGroup);\n\n let i = tabGroup.indexOf(currentItem) + 1;\n\n if (i >= tabGroup.length)\n {\n i = 0;\n }\n\n this.focus(tabGroup[i]);\n }\n }\n\n /**\n * Focuses the next item without wrapping, i.e. it does not go to the first\n * item if the current one is the last item. This is called when the user\n * presses the forward arrow key.\n */\n onForward(): void\n {\n if (!this.useForward)\n {\n return;\n }\n\n const { currentItem, tabGroups } = this;\n\n if (currentItem)\n {\n const tabGroup = tabGroups.get(currentItem.tabGroup);\n\n let i = tabGroup.indexOf(currentItem) + 1;\n\n if (i >= tabGroup.length)\n {\n i = tabGroup.length - 1;\n }\n\n this.focus(tabGroup[i]);\n }\n }\n\n /**\n * Focuses the last item without wrapping, i.e. it does not go to the last\n * item if the current item is the first one. This is called when the user\n * presses the back arrow button.\n */\n onBack(): void\n {\n const { currentItem, tabGroups } = this;\n\n if (currentItem)\n {\n const tabGroup = tabGroups.get(currentItem.tabGroup);\n let i = tabGroup.indexOf(currentItem) - 1;\n\n if (i < 0) i = 0;\n\n this.focus(tabGroup[i]);\n }\n }\n\n /**\n * Fired when a widget gains focus.\n * @event focus\n * @param {PUXI.IFocusable} widget - the widget that gained focus.\n */\n\n /**\n * Fired when a widget looses focus.\n * @event blur\n * @param {PUXI.IFocusable} widget - the widget that lost focus.\n */\n\n /**\n * Fired when a new widget comes into focus or one looses focus.\n * @event focusChanged\n * @param {PUXI.IFocusable}[newFocus] - the widget that came into focus. It may\n * be null if only a blur occured.\n * @param {PUXI.IFocusable}[oldFocus] - the widget that lost focus. It may be\n * null if a widget gained focused for the first time.\n */\n}\n","import { Widget } from './Widget';\nimport * as PIXI from 'pixi.js';\nimport { MeasureMode } from './IMeasurable';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { FocusController, Controller, CheckBoxGroupController } from './ctl';\n\n/**\n * The stage is the root node in the PUXI scene graph. It does not provide a\n * sophisticated layout model; however, it will accept constraints defined by\n * `PUXI.FastLayoutOptions` or `PUXI.LayoutOptions` in its children.\n *\n * The stage is not a `PUXI.Widget` and its dimensions are always fixed.\n *\n * @memberof PUXI\n * @class\n * @extends PIXI.Container\n */\nexport class Stage extends PIXI.Container\n{\n __width: number;\n __height: number;\n minWidth: number;\n minHeight: number;\n initialized: boolean;\n widgetChildren: Widget[];\n\n stage: any;\n\n private _checkBoxGroupCtl: CheckBoxGroupController;\n private _focusCtl: FocusController;\n\n protected background: PIXI.Container;\n\n /**\n * @param {number} width - width of the stage\n * @param {number} height - height of the stage\n */\n constructor(width: number, height: number)\n {\n super();\n\n this.__width = width;\n this.__height = height;\n this.minWidth = 0;\n this.minHeight = 0;\n\n this.widgetChildren = [];\n this.interactive = true;\n this.stage = this;\n this.hitArea = new PIXI.Rectangle(0, 0, 0, 0);\n this.initialized = true;\n this.resize(width, height);\n\n this._checkBoxGroupCtl = new Stage.CHECK_BOX_GROUP_CONTROLLER(this);\n this._focusCtl = new Stage.FOCUS_CONTROLLER(this);\n }\n\n public measureAndLayout(): void\n {\n if (this.background)\n {\n this.background.width = this.width;\n this.background.height = this.height;\n }\n\n for (let i = 0, j = this.widgetChildren.length; i < j; i++)\n {\n const widget = this.widgetChildren[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n\n const widthMeasureMode = lopt.width < LayoutOptions.MAX_DIMEN\n ? MeasureMode.EXACTLY\n : MeasureMode.AT_MOST;\n const heightMeasureMode = lopt.height < LayoutOptions.MAX_DIMEN\n ? MeasureMode.EXACTLY\n : MeasureMode.AT_MOST;\n const loptWidth = (Math.abs(lopt.width) < 1) ? lopt.width * this.width : lopt.width;\n const loptHeight = (Math.abs(lopt.height) < 1) ? lopt.height * this.height : lopt.height;\n\n widget.measure(\n widthMeasureMode === MeasureMode.EXACTLY ? loptWidth : this.width,\n heightMeasureMode === MeasureMode.EXACTLY ? loptHeight : this.height,\n widthMeasureMode,\n heightMeasureMode);\n\n let x = lopt.x ? lopt.x : 0;\n let y = lopt.y ? lopt.y : 0;\n\n if (Math.abs(x) < 1)\n {\n x *= this.width;\n }\n if (Math.abs(y) < 1)\n {\n y *= this.height;\n }\n\n const anchor = lopt.anchor || FastLayoutOptions.DEFAULT_ANCHOR;\n const l = x - (anchor.x * widget.getMeasuredWidth());\n const t = y - (anchor.y * widget.getMeasuredHeight());\n\n widget.layout(l, t,\n l + widget.getMeasuredWidth(),\n t + widget.getMeasuredHeight(),\n true);\n }\n }\n\n getBackground(): PIXI.Container\n {\n return this.background;\n }\n\n setBackground(bg: PIXI.Container): void\n {\n if (this.background)\n {\n super.removeChild(this.background);\n }\n\n this.background = bg;\n\n if (bg)\n {\n super.addChildAt(bg, 0);\n\n this.background.width = this.width;\n this.background.height = this.height;\n }\n }\n\n private update(widgets: Widget[]): void\n {\n this.emit('preupdate', this);\n\n for (let i = 0, j = widgets.length; i < j; i++)\n {\n const widget = widgets[i];\n\n widget.stage = this;\n\n if (!widget.initialized)\n {\n widget.initialize();\n }\n\n this.update(widget.widgetChildren);\n widget.update();\n }\n\n this.emit('postupdate', this);\n }\n\n render(renderer: PIXI.Renderer): void\n {\n this.update(this.widgetChildren);\n super.render(renderer);\n }\n\n addChild(UIObject: Widget): void\n {\n const argumentLenght = arguments.length;\n\n if (argumentLenght > 1)\n {\n for (let i = 0; i < argumentLenght; i++)\n {\n this.addChild(arguments[i]);\n }\n }\n else\n {\n if (UIObject.parent)\n {\n UIObject.parent.removeChild(UIObject);\n }\n\n UIObject.parent = this;\n this.widgetChildren.push(UIObject);\n super.addChild(UIObject.insetContainer);\n // UIObject.updatesettings(true);\n }\n\n this.measureAndLayout();\n }\n\n removeChild(UIObject: Widget): void\n {\n const argumentLenght = arguments.length;\n\n if (argumentLenght > 1)\n {\n for (let i = 0; i < argumentLenght; i++)\n {\n this.removeChild(arguments[i]);\n }\n }\n else\n {\n super.removeChild(UIObject.insetContainer);\n\n const index = this.widgetChildren.indexOf(UIObject);\n\n if (index !== -1)\n {\n this.children.splice(index, 1);\n UIObject.parent = null;\n }\n }\n\n this.measureAndLayout();\n }\n\n resize(width?: number, height?: number): void\n {\n this.width = width;\n this.height = height;\n\n if (this.hitArea)\n {\n (this.hitArea as PIXI.Rectangle).width = this.__width;\n (this.hitArea as PIXI.Rectangle).height = this.__height;\n }\n\n this.measureAndLayout();\n }\n\n get width(): number\n {\n return this.__width;\n }\n set width(val: number)\n {\n if (!isNaN(val))\n {\n this.__width = val;\n this.resize();\n }\n }\n\n get height(): number\n {\n return this.__height;\n }\n set height(val: number)\n {\n if (!isNaN(val))\n {\n this.__height = val;\n this.resize();\n }\n }\n\n /**\n * The check box group controller for check boxes in this stage.\n *\n * @member {PUXI.CheckBoxGroupController}\n */\n get checkBoxGroupController(): CheckBoxGroupController\n {\n return this._checkBoxGroupCtl;\n }\n\n /**\n * The focus controller for widgets in this stage. You can use this to bring a\n * widget into focus.\n *\n * @member {PUXI.FocusController}\n */\n get focusController(): FocusController\n {\n return this._focusCtl;\n }\n\n /**\n * Use this to override which class is used for the check box group controller. It\n * should extend from `PUXI.CheckBoxGroupController`.\n *\n * @static\n */\n static CHECK_BOX_GROUP_CONTROLLER: typeof CheckBoxGroupController = CheckBoxGroupController;\n\n /**\n * Use this to override which class is used for the focus controller. It should\n * extend from `PUXI.FocusController`.\n *\n * @static\n */\n static FOCUS_CONTROLLER: typeof FocusController = FocusController;\n}\n","import * as PIXI from 'pixi.js';\n\nexport type StyleData = {\n [id: string]: any;\n backgroundColor?: string | number;\n background?: PIXI.Container;\n fontFamily?: string;\n fontSize?: number;\n paddingLeft?: number;\n paddingTop?: number;\n paddingRight?: number;\n paddingBottom?: number;\n padding?: number;\n\n// [':hover']?: StyleData;\n// [':focus']?: StyleData;\n};\n\n/**\n * A StyleSheet provides a mechansim to style widgets in a shared fashion.\n */\nexport class Style extends PIXI.utils.EventEmitter\n{\n public dirtyID: number;\n\n private data: StyleData;\n private extends: Style[];\n\n private computedData: StyleData;\n private computedDirty: boolean;\n\n constructor(data: StyleData = {})\n {\n super();\n\n this.dirtyID = 0;\n\n this.data = data;\n this.extends = [];\n\n this.computedData = data;\n this.computedDirty = false;\n }\n\n /**\n * @param prop\n */\n getProperty(prop: string): any\n {\n if (this.computedDirty)\n {\n this.compute();\n }\n\n return this.computedData[prop];\n }\n\n /**\n * @param props\n * @example\n * style.getProperties('paddingLeft', 'paddingRight')\n */\n getProperties(...props: string[]): Record\n {\n if (this.computedDirty)\n {\n this.compute();\n }\n\n const result = { };\n\n for (let i = 0, j = props.length; i < j; i++)\n {\n result[props[i]] = this.computedData[props[i]];\n }\n\n return result;\n }\n\n /**\n * @param prop\n * @param value\n */\n setProperty(prop: string, value: any): void\n {\n // Ensure computedData is up-to-date to ensure child styles get the correct information.\n if (this.computedDirty)\n {\n this.compute();\n }\n\n this.data[prop] = value;\n this.computedData[prop] = value;\n this.emit('setProperty', prop, value, this);\n\n ++this.dirtyID;\n }\n\n /**\n * Extend the given style so that properties not set on this style are derived from it. If multiple styles\n * are extended, the ones extended later have a higher priority.\n *\n * @param style\n */\n extend(style: Style): void\n {\n this.extends.push(style);\n this.computedDirty = true;\n\n ++this.dirtyID;\n\n // Recompute the set-property for this style\n style.on('setProperty', this.onParentSetProperty);\n }\n\n /**\n * Recomputes the style data\n */\n private compute(): void\n {\n const superStyles = this.extends;\n\n this.computedData = {};\n\n for (let i = 0, j = superStyles.length; i < j; i++)\n {\n Object.assign(this.computedData, superStyles[i].computedData);\n }\n\n this.computedDirty = false;\n }\n\n private onParentSetProperty = (propertyName: string, value: any, style: Style): void =>\n {\n const superStyles = this.extends;\n const superIndex = superStyles.indexOf(style);\n\n if (superIndex === -1)\n {\n throw new Error('onParentSetProperty triggered when by a non-super style.');\n }\n\n const thisValue = this.computedData[propertyName];\n\n for (let i = superIndex, j = superStyles.length; i < j; i++)\n {\n const superStyle = superStyles[i];\n\n if (superStyle.computedData[propertyName])\n {\n this.computedData[propertyName] = superStyle.computedData[propertyName];\n }\n }\n\n if (this.data[propertyName])\n {\n this.computedData[propertyName] = this.data[propertyName];\n }\n\n if (thisValue !== this.computedData[propertyName])\n {\n this.emit('setProperty', propertyName, this.computedData[propertyName], this);\n }\n };\n\n /**\n * @param data\n * @example\n * Style.create({\n * backgroundColor: 0xabcdef,\n * padding: 8\n * })\n */\n static create(data: StyleData): Style\n {\n return new Style(data);\n }\n}\n","import { Style, StyleData } from './Style';\n\nexport class StyleSheet\n{\n [id: string]: Style;\n\n static create(sheetData: { [id: string]: StyleData }): StyleSheet\n {\n const sheet = new StyleSheet();\n\n for (const key in sheetData)\n {\n sheet[key] = Style.create(sheetData[key]);\n }\n\n return sheet;\n }\n}\n","import { FocusableWidget, IFocusableOptions } from './FocusableWidget';\nimport { ScrollWidget } from './ScrollWidget';\nimport * as PIXI from 'pixi.js';\nimport { LayoutOptions } from './layout-options';\nimport { DragManager } from './event/DragManager';\n\n/**\n * @memberof PUXI\n * @interface\n */\ninterface ITextInputOptions extends IFocusableOptions\n{\n multiLine?: boolean;\n style?: PIXI.TextStyle;\n background?: PIXI.Container;\n selectedColor?: string | number[];\n selectedBackgroundColor?: string;\n width?: number;\n height?: number;\n padding?: number;\n paddingTop?: number;\n paddingBottom?: number;\n paddingLeft?: number;\n paddingRight?: number;\n tabIndex?: number;\n tabGroup?: number;\n maxLength?: number;\n caretWidth?: number;\n lineHeight?: number;\n value?: string;\n}\n\n// Dummy element created for mobile keyboards\nlet mockDOMInput: any;\n\nfunction initMockDOMInput(): void\n{\n // create temp input (for mobile keyboard)\n if (typeof mockDOMInput === 'undefined')\n {\n mockDOMInput = document.createElement('INPUT');\n mockDOMInput.setAttribute('type', 'text');\n mockDOMInput.setAttribute('id', '_pui_tempInput');\n mockDOMInput.setAttribute('style', 'position:fixed; left:-10px; top:-10px; width:0px; height: 0px;');\n document.body.appendChild(mockDOMInput);\n }\n}\n\n/**\n * An UI text object\n *\n * @class\n * @extends PIXI.UI.InputBase\n * @memberof PIXI.UI\n */\nexport class TextInput extends FocusableWidget\n{\n protected options: ITextInputOptions;\n\n protected _listeners: any;\n protected _dirtyText: boolean;\n protected _value: string;\n protected _lastValue: string;\n\n protected _lastWidth: number;\n protected _lastHeight: number;\n\n protected selection: PIXI.Graphics;\n protected textContainer: ScrollWidget;\n\n public maxLength: number;\n\n protected chars: any[];\n protected multiLine: boolean;\n protected color: string;\n protected selectedColor: string;\n protected selectedBackgroundColor: string;\n protected tempText: PIXI.Text;\n protected textHeight: number;\n protected lineHeight: number;\n\n protected caret: PIXI.Graphics;\n protected caretInterval: NodeJS.Timeout;\n protected si: number; // startIndex\n protected sie: boolean; // startIndexEnd\n protected ei: number; // endIndex\n protected eie: boolean; // endIndexEnd\n protected sp: PIXI.Point; // startposition\n protected ds: PIXI.Point; // dragStart\n protected de: PIXI.Point; // dragend\n protected rdd: boolean; // Reverse drag direction\n protected vrdd: boolean; // vertical Reverse drag direction\n\n protected selectionStart: number;\n protected selectionEnd: number;\n protected hasSelection: boolean;\n protected t: number; // timestamp\n protected cc: number; // click counter\n protected textLengthPX: number;\n protected textHeightPX: number;\n protected lineIndexMax: number;\n\n protected ctrlDown: boolean;\n protected shiftDown: boolean;\n protected shiftKey: number;\n protected ctrlKey: number;\n protected cmdKey: number;\n\n protected _sp: PIXI.Point;\n\n /**\n * @param {PUXI.ITextInputOptions} options\n * @param {string} options.value Text content\n * @param {boolean} [options.multiLine=false] Multiline input\n * @param options.style {PIXI.TextStyle} Style used for the Text\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\n * @param [options.selectedColor='#ffffff'] {String|Array} Fill color of selected text\n * @param [options.selectedBackgroundColor='#318cfa'] {String} BackgroundColor of selected text\n * @param [options.width=150] {Number} width of input\n * @param [options.height=20] {Number} height of input\n * @param [options.padding=3] {Number} input padding\n * @param [options.paddingTop=0] {Number} input padding\n * @param [options.paddingBottom=0] {Number} input padding\n * @param [options.paddingLeft=0] {Number} input padding\n * @param [options.paddingRight=0] {Number} input padding\n * @param [options.tabIndex=0] {Number} input tab index\n * @param [options.tabGroup=0] {Number|String} input tab group\n * @param [options.maxLength=0] {Number} 0 = unlimited\n * @param [options.caretWidth=1] {Number} width of the caret\n * @param [options.lineHeight=0] {Number} 0 = inherit from text\n */\n constructor(options: ITextInputOptions)\n {\n super(options);\n initMockDOMInput();\n\n this.options = options;\n\n this._listeners = {};\n this._dirtyText = true;\n this.maxLength = options.maxLength || 0;\n this._value = this._lastValue = options.value || '';\n\n if (this.maxLength)\n {\n this._value = this._value.slice(0, this.maxLength);\n }\n\n this.chars = [];\n this.multiLine = options.multiLine !== undefined ? options.multiLine : false;\n this.color = options.style && options.style.fill ? options.style.fill : '#000000';\n this.selectedColor = options.selectedColor || '#ffffff';\n this.selectedBackgroundColor = options.selectedBackgroundColor || '#318cfa';\n this.tempText = new PIXI.Text('1', options.style);\n this.textHeight = this.tempText.height;\n this.lineHeight = options.lineHeight || this.textHeight || this._height;\n\n this.tempText.destroy();\n\n // set cursor\n // this.container.cursor = \"text\";\n\n // selection graphics\n this.selection = new PIXI.Graphics();\n this.selection.visible = false;\n this.selection._startIndex = 0;\n this.selection._endIndex = 0;\n\n // caret graphics\n this.caret = new PIXI.Graphics();\n this.caret.visible = false;\n this.caret._index = 0;\n this.caret.lineStyle(\n options.caretWidth || 1,\n typeof(this.color) == \"number\" ? this.color : parseInt(this.color.slice(1), 16),\n 1\n );\n this.caret.moveTo(0, 0);\n this.caret.lineTo(0, this.textHeight);\n\n // var padding\n const paddingLeft = options.paddingLeft !== undefined ? options.paddingLeft : options.padding;\n const paddingRight = options.paddingRight !== undefined ? options.paddingRight : options.padding;\n const paddingBottom = options.paddingBottom !== undefined ? options.paddingBottom : options.padding;\n const paddingTop = options.paddingTop !== undefined ? options.paddingTop : options.padding;\n\n // insert text container (scrolling container)\n this.textContainer = new ScrollWidget({\n scrollX: !this.multiLine,\n scrollY: this.multiLine,\n dragScrolling: this.multiLine,\n expandMask: 2,\n softness: 0.2,\n overflowX: 40,\n overflowY: 40,\n }).setPadding(\n paddingLeft || 3,\n paddingTop || 3,\n paddingRight || 3,\n paddingBottom || 3,\n ).setLayoutOptions(\n new LayoutOptions(\n LayoutOptions.FILL_PARENT,\n LayoutOptions.FILL_PARENT,\n ),\n ) as ScrollWidget;\n\n this.addChild(this.textContainer);\n\n if (this.multiLine)\n {\n this._useNext = this._usePrev = false;\n this.textContainer.dragRestrictAxis = 'y';\n this.textContainer.dragThreshold = 5;\n this.dragRestrictAxis = 'x';\n this.dragThreshold = 5;\n }\n\n // selection Vars\n this.sp = new PIXI.Point(); // startposition\n this._sp = new PIXI.Point();\n this.ds = new PIXI.Point(); // dragStart\n this.de = new PIXI.Point(); // dragend\n this.rdd = false; // Reverse drag direction\n this.vrdd = false; // vertical Reverse drag direction\n this.selectionStart = -1;\n this.selectionEnd = -1;\n this.hasSelection = false;\n this.t = performance.now(); // timestamp\n this.cc = 0; // click counter\n this.textLengthPX = 0;\n this.textHeightPX = 0;\n this.lineIndexMax = 0;\n this.ctrlDown = false;\n this.shiftDown = false;\n this.shiftKey = 16;\n this.ctrlKey = 17;\n this.cmdKey = 91;\n\n this.setupDrag();\n }\n\n setupDrag(): void\n {\n const event = new DragManager(this);\n\n event.onPress = (e, mouseDown): void =>\n {\n if (mouseDown)\n {\n const timeSinceLast = performance.now() - this.t;\n\n this.t = performance.now();\n if (timeSinceLast < 250)\n {\n this.cc++;\n if (this.cc > 1)\n {\n this.select();\n }\n else\n {\n this.innerContainer.toLocal(this.sp, undefined, this.ds, true);\n this.updateClosestIndex(this.ds, true);\n const c = this.chars[this.si];\n\n if (c)\n {\n if (c.wordIndex != -1)\n {\n this.selectWord(c.wordIndex);\n }\n else\n {\n this.selectRange(this.si, this.si);\n }\n }\n }\n }\n else\n {\n this.cc = 0;\n this.sp.copyFrom(e.data.global);\n this.innerContainer.toLocal(this.sp, undefined, this.ds, true);\n\n if (this.chars.length)\n {\n this.updateClosestIndex(this.ds, true);\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n }\n }\n e.data.originalEvent.preventDefault();\n };\n\n event.onDragMove = (e, offset: PIXI.Point): void =>\n {\n if (!this.chars.length || !this._isFocused)\n {\n return;\n }\n\n this.de.x = this.sp.x + offset.x;\n this.de.y = this.sp.y + offset.y;\n this.innerContainer.toLocal(this.de, undefined, this.de, true);\n this.updateClosestIndex(this.de, false);\n\n if (this.si < this.ei)\n {\n this.selectRange(this.sie ? this.si + 1 : this.si, this.eie ? this.ei : this.ei - 1);\n this.caret._index = this.eie ? this.ei : this.ei - 1;\n }\n else if (this.si > this.ei)\n {\n this.selectRange(this.ei, this.sie ? this.si : this.si - 1);\n this.caret._index = this.ei;\n }\n else if (this.sie === this.eie)\n {\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n else\n {\n this.selectRange(this.si, this.ei);\n this.caret._index = this.ei;\n }\n\n this.caret._forward = this.si <= this.ei;\n this.caret._down = offset.y > 0;\n\n this.scrollToPosition(this.de);\n };\n }\n\n protected get innerContainer(): PIXI.Container\n {\n return this.textContainer.innerContainer.insetContainer;\n }\n\n update(): void\n {\n if (this.width !== this._lastWidth)\n {\n this._lastWidth = this._width;\n\n if (this.multiLine)\n {\n this.updateText();\n\n if (this.caret.visible)\n {\n this.setCaretIndex(this.caret._index);\n }\n if (this.hasSelection)\n {\n this.updateSelectionGraphics();\n }\n }\n }\n\n // update text\n if (this._dirtyText)\n {\n this.updateText();\n this._dirtyText = false;\n }\n }\n\n updateText(): void\n {\n this.textLengthPX = 0;\n this.textHeightPX = 0;\n this.lineIndexMax = 0;\n\n let lineIndex = 0;\n const length = this._value.length;\n let x = 0;\n let y = (this.lineHeight - this.textHeight) * 0.5;\n let i = 0;\n\n // destroy excess chars\n if (this.chars.length > length)\n {\n for (i = this.chars.length - 1; i >= length; i--)\n {\n this.innerContainer.removeChild(this.chars[i]);\n this.chars[i].destroy();\n }\n\n this.chars.splice(length, this.chars.length - length);\n }\n\n // update and add chars\n let whitespace = false;\n let newline = false;\n let wordIndex = 0;\n let lastWordIndex = -1;\n let wrap = false;\n\n for (i = 0; i < this._value.length; i++)\n {\n if (whitespace || newline)\n {\n lastWordIndex = i;\n wordIndex++;\n }\n\n let c = this._value[i];\n\n whitespace = c === ' ';\n newline = c === '\\n';\n\n if (newline)\n { // newline \"hack\". webgl render errors if \\n is passed to text\n c = '';\n }\n\n let charText = this.chars[i];\n\n if (!charText)\n {\n charText = new PIXI.Text(c, this.options.style);\n this.innerContainer.addChild(charText);\n this.chars.push(charText);\n }\n else\n {\n charText.text = c;\n }\n\n charText.scale.x = newline ? 0 : 1;\n charText.wrapped = wrap;\n wrap = false;\n\n if (newline || (this.multiLine && x + charText.width >= this._width - this.paddingLeft - this.paddingRight))\n {\n lineIndex++;\n x = 0;\n y += this.lineHeight;\n\n if (lastWordIndex !== -1 && !newline)\n {\n i = lastWordIndex - 1;\n lastWordIndex = -1;\n wrap = true;\n continue;\n }\n }\n\n charText.lineIndex = lineIndex;\n charText.x = x;\n charText.y = y;\n charText.wordIndex = whitespace || newline ? -1 : wordIndex;\n x += charText.width;\n\n if (x > this.textLengthPX)\n {\n this.textLengthPX = x;\n }\n if (y > this.textHeightPX)\n {\n this.textHeightPX = y;\n }\n }\n\n this.lineIndexMax = lineIndex;\n\n // put caret on top\n this.innerContainer.addChild(this.caret);\n\n // recache\n if (this.innerContainer.cacheAsBitmap)\n {\n this.innerContainer.cacheAsBitmap = false;\n this.innerContainer.cacheAsBitmap = true;\n }\n\n this.textContainer.update();\n }\n\n updateClosestIndex(point: PIXI.Point, start: boolean): void\n {\n let currentDistX = 99999;\n let currentIndex = -1;\n let atEnd = false;\n\n let closestLineIndex = 0;\n\n if (this.lineIndexMax > 0)\n {\n closestLineIndex = Math.max(0, Math.min(\n this.lineIndexMax,\n Math.floor(point.y / this.lineHeight)));\n }\n\n for (let i = 0; i < this.chars.length; i++)\n {\n const char = this.chars[i];\n\n if (char.lineIndex !== closestLineIndex)\n {\n continue;\n }\n\n const distX = Math.abs(point.x - (char.x + (char.width * 0.5)));\n\n if (distX < currentDistX)\n {\n currentDistX = distX;\n currentIndex = i;\n atEnd = point.x > char.x + (char.width * 0.5);\n }\n }\n\n if (start)\n {\n this.si = currentIndex;\n this.sie = atEnd;\n }\n else\n {\n this.ei = currentIndex;\n this.eie = atEnd;\n }\n }\n\n deleteSelection(): boolean\n {\n if (this.hasSelection)\n {\n this.value = this.value.slice(0, this.selectionStart) + this.value.slice(this.selectionEnd + 1);\n this.setCaretIndex(this.selectionStart);\n\n return true;\n }\n\n return false;\n }\n\n updateSelectionColors(): void\n {\n // Color charecters\n for (let i = 0; i < this.chars.length; i++)\n {\n if (i >= this.selectionStart && i <= this.selectionEnd)\n {\n this.chars[i].style.fill = this.selectedColor;\n }\n else\n {\n this.chars[i].style.fill = this.color;\n }\n }\n }\n\n scrollToPosition(pos: PIXI.Point): void\n {\n this._sp.x = pos.x;\n this._sp.y = pos.y;\n\n if (this.multiLine && this._sp.y >= this.lineHeight)\n {\n this._sp.y += this.lineHeight;\n }\n\n this.textContainer.focusPosition(this._sp);\n }\n\n resetScrollPosition(): void\n {\n this._sp.set(0, 0);\n this.textContainer.focusPosition(this._sp);\n }\n\n hideCaret(): void\n {\n this.caret.visible = false;\n clearInterval(this.caretInterval);\n }\n\n showCaret(): void\n {\n this.clearSelection();\n clearInterval(this.caretInterval);\n\n this.caret.alpha = 1;\n this.caret.visible = true;\n\n this.caretInterval = setInterval(() =>\n {\n this.caret.alpha = this.caret.alpha === 0 ? 1 : 0;\n }, 500);\n }\n\n insertTextAtCaret(c: string): void\n {\n if (!this.multiLine && c.indexOf('\\n') !== -1)\n {\n c = c.replace(/\\n/g, '');\n }\n\n if (this.hasSelection)\n {\n this.deleteSelection();\n }\n\n if (!this.maxLength || this.chars.length < this.maxLength)\n {\n if (this.caret._atEnd)\n {\n this.valueEvent += c;\n this.setCaretIndex(this.chars.length);\n }\n else\n {\n const index = Math.min(this.chars.length - 1, this.caret._index);\n\n this.valueEvent = this.value.slice(0, index) + c + this.value.slice(index);\n this.setCaretIndex(index + c.length);\n }\n }\n }\n\n public onKeyDown(e) {\n if (e.which === this.ctrlKey || e.which === this.cmdKey)\n {\n this.ctrlDown = true;\n }\n if (e.which === this.shiftKey)\n {\n this.shiftDown = true;\n }\n\n // FocusableWidget.onKeyDownImpl should've been called before this.\n\n if (e.defaultPrevented)\n {\n return;\n }\n\n if (e.which === 13)\n { // enter\n this.insertTextAtCaret('\\n');\n e.preventDefault();\n\n return;\n }\n\n if (this.ctrlDown)\n {\n // Handle Ctrl+ commands\n\n if (e.which === 65)\n {\n // Ctrl+A (Select all)\n this.select();\n e.preventDefault();\n\n return;\n }\n else if (e.which === 90)\n {\n // Ctrl+Z (Undo)\n if (this.value != this._lastValue)\n {\n this.valueEvent = this._lastValue;\n }\n\n this.setCaretIndex(this._lastValue.length + 1);\n e.preventDefault();\n\n return;\n }\n }\n if (e.which === 8)\n {\n // Handle backspace\n if (!this.deleteSelection())\n {\n if (this.caret._index > 0 || (this.chars.length === 1 && this.caret._atEnd))\n {\n if (this.caret._atEnd)\n {\n this.valueEvent = this.value.slice(0, this.chars.length - 1);\n this.setCaretIndex(this.caret._index);\n }\n else\n {\n this.valueEvent = this.value.slice(0, this.caret._index - 1) + this.value.slice(this.caret._index);\n this.setCaretIndex(this.caret._index - 1);\n }\n }\n }\n\n e.preventDefault();\n\n return;\n }\n\n if (e.which === 46)\n {\n // Delete selection\n if (!this.deleteSelection())\n {\n if (!this.caret._atEnd)\n {\n this.valueEvent = this.value.slice(0, this.caret._index) + this.value.slice(this.caret._index + 1);\n this.setCaretIndex(this.caret._index);\n }\n }\n\n e.preventDefault();\n\n return;\n }\n else if (e.which === 37 || e.which === 39)\n {\n this.rdd = e.which === 37;\n\n if (this.shiftDown)\n {\n if (this.hasSelection)\n {\n const caretAtStart = this.selectionStart === this.caret._index;\n\n if (caretAtStart)\n {\n if (this.selectionStart === this.selectionEnd && this.rdd === this.caret._forward)\n {\n this.setCaretIndex(this.caret._forward ? this.caret._index : this.caret._index + 1);\n }\n else\n {\n const startindex = this.rdd ? this.caret._index - 1 : this.caret._index + 1;\n\n this.selectRange(startindex, this.selectionEnd);\n this.caret._index = Math.min(this.chars.length - 1, Math.max(0, startindex));\n }\n }\n else\n {\n const endIndex = this.rdd ? this.caret._index - 1 : this.caret._index + 1;\n\n this.selectRange(this.selectionStart, endIndex);\n this.caret._index = Math.min(this.chars.length - 1, Math.max(0, endIndex));\n }\n }\n else\n {\n const _i = this.caret._atEnd ? this.caret._index + 1 : this.caret._index;\n const selectIndex = this.rdd ? _i - 1 : _i;\n\n this.selectRange(selectIndex, selectIndex);\n this.caret._index = selectIndex;\n this.caret._forward = !rdd;\n }\n }\n else\n {\n // Navigation\n // eslint-disable-next-line no-lonely-if\n if (this.hasSelection)\n {\n this.setCaretIndex(this.rdd ? this.selectionStart : this.selectionEnd + 1);\n }\n else\n {\n this.setCaretIndex(this.caret._index + (this.rdd ? this.caret._atEnd ? 0 : -1 : 1));\n }\n }\n\n e.preventDefault();\n\n return;\n }\n else if (this.multiLine && (e.which === 38 || e.which === 40))\n {\n this.vrdd = e.which === 38;\n\n if (this.shiftDown)\n {\n if (this.hasSelection)\n {\n this.de.y = Math.max(0, Math.min(\n this.textHeightPX,\n this.de.y + (this.vrdd ? -this.lineHeight : this.lineHeight)));\n this.updateClosestIndex(this.de, false);\n\n // console.log(si, ei);\n if (Math.abs(this.si - this.ei) <= 1)\n {\n // console.log(si, ei);\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n else\n {\n this.caret._index = (this.eie ? this.ei + 1 : this.ei) + (this.caret._down ? -1 : 0);\n this.selectRange(this.caret._down ? this.si : this.si - 1, this.caret._index);\n }\n }\n else\n {\n this.si = this.caret._index;\n this.sie = false;\n this.de.copyFrom(this.caret);\n this.de.y = Math.max(0, Math.min(\n this.textHeightPX,\n this.de.y + (this.vrdd ? -this.lineHeight : this.lineHeight)));\n this.updateClosestIndex(this.de, false);\n\n this.caret._index = (this.eie ? this.ei + 1 : ei) - (this.vrdd ? 0 : 1);\n this.selectRange(this.vrdd ? this.si - 1 : this.si, this.caret._index);\n this.caret._down = !this.vrdd;\n }\n }\n else if (this.hasSelection)\n {\n this.setCaretIndex(this.vrdd ? this.selectionStart : this.selectionEnd + 1);\n }\n else\n {\n this.ds.copyFrom(this.caret);\n this.ds.y += this.vrdd ? -this.lineHeight : this.lineHeight;\n this.ds.x += 1;\n this.updateClosestIndex(this.ds, true);\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n e.preventDefault();\n\n return;\n }\n };\n\n public keyUpEvent(e) {\n if (e.which === this.ctrlKey || e.which === this.cmdKey) this.ctrlDown = false;\n if (e.which === this.shiftKey) this.shiftDown = false;\n\n this.emit('keyup', e);\n\n if (e.defaultPrevented)\n { return; }\n };\n\n public copyEvent(e) {\n this.emit('copy', e);\n\n if (e.defaultPrevented)\n { return; }\n\n if (this.hasSelection)\n {\n const clipboardData = e.clipboardData || window.clipboardData;\n\n clipboardData.setData('Text', this.value.slice(this.selectionStart, this.selectionEnd + 1));\n }\n\n e.preventDefault();\n };\n\n public cutEvent(e) {\n this.emit('cut', e);\n\n if (e.defaultPrevented)\n { return; }\n\n if (this.hasSelection)\n {\n this.copyEvent(e);\n this.deleteSelection();\n }\n\n e.preventDefault();\n };\n\n public pasteEvent(e) {\n this.emit('paste', e);\n\n if (e.defaultPrevented)\n { return; }\n\n const clipboardData = e.clipboardData || window.clipboardData;\n\n this.insertTextAtCaret(clipboardData.getData('Text'));\n e.preventDefault();\n };\n\n public inputEvent(e) {\n const c = mockDOMInput.value;\n\n if (c.length)\n {\n this.insertTextAtCaret(c);\n mockDOMInput.value = '';\n }\n\n e.preventDefault();\n };\n\n public inputBlurEvent(e) {\n this.blur();\n };\n\n public focus = (): void =>\n {\n if (!this._isFocused)\n {\n super.focus();\n\n const l = `${this.contentContainer.worldTransform.tx}px`;\n const t = `${this.contentContainer.worldTransform.ty}px`;\n const h = `${this.contentContainer.height}px`;\n const w = `${this.contentContainer.width}px`;\n\n mockDOMInput.setAttribute('style', `position:fixed; left:${l}; top:${t}; height:${h}; width:${w};`);\n mockDOMInput.value = '';\n mockDOMInput.setAttribute('style', 'position:fixed; left:-10px; top:-10px; width:0px; height: 0px;');\n\n this.innerContainer.cacheAsBitmap = false;\n\n this._listeners.blur = e => this.inputBlurEvent(e);\n this._listeners.keydown = e => this.onKeyDown(e);\n this._listeners.keyup = e => this.keyUpEvent(e);\n this._listeners.paste = e => this.pasteEvent(e);\n this._listeners.copy = e => this.copyEvent(e);\n this._listeners.cut = e => this.cutEvent(e);\n this._listeners.input = e => this.inputEvent(e);\n\n mockDOMInput.addEventListener('blur', this._listeners.blur, false);\n document.addEventListener('keydown', this._listeners.keydown, false);\n document.addEventListener('keyup', this._listeners.keyup, false);\n document.addEventListener('paste', this._listeners.paste, false);\n document.addEventListener('copy', this._listeners.copy, false);\n document.addEventListener('cut', this._listeners.cut, false);\n mockDOMInput.addEventListener('input', this._listeners.input, false);\n\n setTimeout(() =>\n {\n mockDOMInput.focus();\n \n if (!this.caret.visible && !this.selection.visible && !this.multiLine)\n {\n this.setCaretIndex(this.chars.length);\n }\n }, 0);\n }\n };\n\n public blur = (): void =>\n {\n if (this._isFocused)\n {\n super.blur();\n this.ctrlDown = false;\n this.shiftDown = false;\n\n this.hideCaret();\n this.clearSelection();\n\n if (this.chars.length > 1)\n {\n this.innerContainer.cacheAsBitmap = true;\n }\n\n mockDOMInput.removeEventListener('blur', this._listeners.blur);\n document.removeEventListener('keydown', this._listeners.keydown);\n document.removeEventListener('keyup', this._listeners.keyup);\n document.removeEventListener('paste', this._listeners.paste);\n document.removeEventListener('copy', this._listeners.copy);\n document.removeEventListener('cut', this._listeners.cut);\n mockDOMInput.removeEventListener('input', this._listeners.input);\n mockDOMInput.blur();\n\n this._listeners = {}\n }\n\n if (!this.multiLine)\n {\n this.resetScrollPosition();\n }\n };\n\n setCaretIndex = (index: number): void =>\n {\n this.caret._atEnd = index >= this.chars.length;\n this.caret._index = Math.max(0, Math.min(this.chars.length - 1, index));\n\n if (this.chars.length && index > 0)\n {\n let i = Math.max(0, Math.min(index, this.chars.length - 1));\n let c = this.chars[i];\n\n if (c && c.wrapped)\n {\n this.caret.x = c.x;\n this.caret.y = c.y;\n }\n else\n {\n i = Math.max(0, Math.min(index - 1, this.chars.length - 1));\n c = this.chars[i];\n this.caret.x = this.chars[i].x + this.chars[i].width;\n this.caret.y = (this.chars[i].lineIndex * this.lineHeight) + (this.lineHeight - this.textHeight) * 0.5;\n }\n }\n else\n {\n this.caret.x = 0;\n this.caret.y = (this.lineHeight - this.textHeight) * 0.5;\n }\n\n this.scrollToPosition(this.caret);\n this.showCaret();\n };\n\n select = (): void =>\n {\n this.selectRange(0, this.chars.length - 1);\n };\n\n selectWord = (wordIndex: number): void =>\n {\n let startIndex = this.chars.length;\n let endIndex = 0;\n\n for (let i = 0; i < this.chars.length; i++)\n {\n if (this.chars[i].wordIndex !== wordIndex)\n {\n continue;\n }\n\n if (i < startIndex)\n {\n startIndex = i;\n }\n if (i > endIndex)\n {\n endIndex = i;\n }\n }\n\n this.selectRange(startIndex, endIndex);\n };\n\n selectRange = (startIndex: number, endIndex: number): void =>\n {\n if (startIndex > -1 && endIndex > -1)\n {\n const start = Math.min(startIndex, endIndex, this.chars.length - 1);\n const end = Math.min(Math.max(startIndex, endIndex), this.chars.length - 1);\n\n if (start !== this.selectionStart || end !== this.selectionEnd)\n {\n this.hasSelection = true;\n this.selection.visible = true;\n this.selectionStart = start;\n this.selectionEnd = end;\n\n this.hideCaret();\n this.updateSelectionGraphics();\n this.updateSelectionColors();\n }\n\n this.focus();\n }\n else\n {\n this.clearSelection();\n }\n };\n\n clearSelection = (): void =>\n {\n if (this.hasSelection)\n {\n // Remove color\n this.hasSelection = false;\n this.selection.visible = false;\n this.selectionStart = -1;\n this.selectionEnd = -1;\n this.updateSelectionColors();\n }\n };\n\n updateSelectionGraphics = () =>\n {\n const c1 = this.chars[this.selectionStart];\n\n if (c1 !== undefined)\n {\n let cx = c1.x;\n let cy = c1.y;\n let w = 0;\n const h = this.textHeight;\n let cl = c1.lineIndex;\n\n this.selection.clear();\n for (let i = this.selectionStart; i <= this.selectionEnd; i++)\n {\n const c = this.chars[i];\n\n if (c.lineIndex != cl)\n {\n this.drawSelectionRect(cx, cy, w, h);\n cx = c.x;\n cy = c.y;\n cl = c.lineIndex;\n w = 0;\n }\n\n w += c.width;\n }\n\n this.drawSelectionRect(cx, cy, w, h);\n this.innerContainer.addChildAt(this.selection, 0);\n }\n };\n\n drawSelectionRect = (x: number, y: number, w: number, h: number): void =>\n {\n this.selection.beginFill(`0x${this.selectedBackgroundColor.slice(1)}`, 1);\n this.selection.moveTo(x, y);\n this.selection.lineTo(x + w, y);\n this.selection.lineTo(x + w, y + h);\n this.selection.lineTo(x, y + h);\n this.selection.endFill();\n };\n\n get valueEvent(): string\n {\n return this._value;\n }\n set valueEvent(val: string)\n {\n if (this.maxLength)\n {\n val = val.slice(0, this.maxLength);\n }\n\n if (this._value != val)\n {\n this.value = val;\n this.emit('change');\n }\n }\n\n get value(): string\n {\n return this._value;\n }\n set value(val: string)\n {\n if (this.maxLength)\n {\n val = val.slice(0, this.maxLength);\n }\n\n if (this._value != val)\n {\n this._lastValue = this._value;\n this._value = val;\n this._dirtyText = true;\n this.update();\n }\n }\n\n get text(): string\n {\n return this.value;\n }\n set text(value: string)\n {\n this.value = value;\n }\n\n get mock() {\n return mockDOMInput\n }\n}\n\n/*\n * Features:\n * multiLine, shift selection, Mouse Selection, Cut, Copy, Paste, Delete, Backspace, Arrow navigation, tabIndex\n *\n * Methods:\n * blur()\n * focus()\n * select() - selects all text\n * selectRange(startIndex, endIndex)\n * clearSelection()\n * setCaretIndex(index) moves caret to index\n *\n *\n * Events:\n * \"change\"\n * \"blur\"\n * \"blur\"\n * \"focus\"\n * \"focusChanged\" param: [bool]focus\n * \"keyup\" param: Event\n * \"keydown\" param: Event\n * \"copy\" param: Event\n * \"paste\" param: Event\n * \"cut\" param: Event\n * \"keyup\" param: Event\n */\n","import * as PIXI from 'pixi.js';\nimport { Widget } from './Widget';\n\n/**\n * An UI sprite object\n *\n * @class\n * @extends PIXI.UI.UIBase\n * @memberof PIXI.UI\n * @param Texture {PIXI.Texture} The texture for the sprite\n * @param [Width=Texture.width] {number} Width of tilingsprite\n * @param [Height=Texture.height] {number} Height of tiling sprite\n */\nexport class TilingSprite extends Widget\n{\n protected sprite: PIXI.TilingSprite;\n\n constructor(t, width: number, height: number)\n {\n const sprite = new PIXI.TilingSprite(t);\n\n super(width || sprite.width, height || sprite.height);\n\n this.sprite = sprite;\n this.contentContainer.addChild(this.sprite);\n }\n\n /**\n * Updates the text\n *\n * @private\n */\n update(): void\n {\n if (this.tint !== null)\n { this.sprite.tint = this.tint; }\n\n if (this.blendMode !== null)\n { this.sprite.blendMode = this.blendMode; }\n\n this.sprite.width = this._width;\n this.sprite.height = this._height;\n }\n\n get tilePosition(): any\n {\n return this.sprite.tilePosition;\n }\n set tilingPosition(val: any)\n {\n this.sprite.tilePosition = val;\n }\n\n get tileScale(): number\n {\n return this.sprite.tileScale;\n }\n set tileScale(val: number)\n {\n this.sprite.tileScale = val;\n }\n}\n","import { Tween } from './Tween';\nimport * as PIXI from 'pixi.js';\n\n/**\n * This ticker is an event-emitter that can be used for running periodic tasks\n * in the rendering loop. It emits the `update` event every animation frame.\n *\n * @memberof PUXI\n * @class\n * @extends PIXI.utils.EventEmitter\n */\nexport class Ticker extends PIXI.utils.EventEmitter\n{\n private _disabled: boolean;\n private _now: number;\n\n DeltaTime: number;\n Time: number;\n Ms: number;\n\n constructor(autoStart: boolean)\n {\n super();\n\n this._disabled = true;\n this._now = 0;\n\n this.DeltaTime = 0;\n this.Time = performance.now();\n this.Ms = 0;\n\n if (autoStart)\n {\n this.disabled = false;\n }\n\n Ticker.shared = this;\n }\n\n get disabled(): boolean\n {\n return this._disabled;\n }\n set disabled(val: boolean)\n {\n if (!this._disabled)\n {\n this._disabled = true;\n }\n else\n {\n this._disabled = false;\n Ticker.shared = this;\n\n this.update(performance.now(), true);\n }\n }\n\n /**\n * Updates the text\n *\n * @private\n */\n update(time: number): void\n {\n Ticker.shared._now = time;\n Ticker.shared.Ms = Ticker.shared._now - Ticker.shared.Time;\n Ticker.shared.Time = Ticker.shared._now;\n Ticker.shared.DeltaTime = Ticker.shared.Ms * 0.001;\n Ticker.shared.emit('update', Ticker.shared.DeltaTime);\n Tween._update(Ticker.shared.DeltaTime);\n\n if (!Ticker.shared._disabled)\n {\n requestAnimationFrame(Ticker.shared.update);\n }\n }\n\n /**\n * The update event is fired periodically and it can be used to for a rendering\n * loop.\n * @event update\n * @param {DOMHighResTimeStamp} deltaTime - milliseconds since last update\n */\n\n static shared: Ticker;\n\n static on(event: any, fn: Function, context: any): void\n {\n Ticker.shared.on(event, fn, context);\n }\n\n static once(event: any, fn: Function, context: any): void\n {\n Ticker.shared.once(event, fn, context);\n }\n\n static removeListener(event: any, fn: Function): void\n {\n Ticker.shared.removeListener(event, fn);\n }\n}\n\nTicker.shared = new Ticker(true);\n"],"names":["MeasureMode","PIXI.Point","PIXI.utils","PIXI.Container","PIXI.BLEND_MODES","PIXI.Graphics","DropShadowFilter","ALIGN","PIXI.Rectangle","PIXI.Text","PIXI.TextStyle","PIXI.Sprite","PIXI.Texture","PIXI.BaseTexture","Texture","PIXI.Ticker","PIXI.TilingSprite"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"puxi-core.js","sources":["../src/event/DragDropController.js","../src/layout-options/Insets.ts","../src/IMeasurable.ts","../src/event/EventManager.ts","../src/event/ClickManager.ts","../src/event/DragManager.ts","../src/event/EventBroker.ts","../src/event/ScrollManager.ts","../src/Widget.ts","../src/layout-options/Align.ts","../src/layout-options/LayoutOptions.ts","../src/layout-options/AnchorLayoutOptions.ts","../src/layout-options/FastLayoutOptions.ts","../src/layout-options/BorderLayoutOptions.ts","../src/layout-manager/FastLayout.ts","../src/WidgetGroup.ts","../src/InteractiveGroup.ts","../src/FocusableWidget.ts","../src/TextWidget.ts","../src/Button.ts","../src/CheckBox.ts","../src/Ease/EaseBase.js","../src/Ease/ExponentialEase.js","../src/Ease/Ease.js","../src/Helpers.ts","../src/Sprite.ts","../src/layout-manager/AnchorLayout.ts","../src/layout-manager/ILayoutManager.ts","../src/layout-manager/BorderLayout.ts","../src/layout-manager/LinearLayout.ts","../src/ImageButton.ts","../src/Slider.ts","../src/Tween.ts","../src/ScrollBar.ts","../src/ScrollWidget.ts","../src/SortableList.ts","../src/SliceSprite.ts","../src/ctl/Controller.ts","../src/ctl/CheckBoxGroupController.ts","../src/ctl/FocusController.ts","../src/Stage.ts","../src/Style.ts","../src/StyleSheet.ts","../src/TextInput.ts","../src/TilingSprite.ts","../src/Ticker.ts"],"sourcesContent":["const _items = [];\nconst DragDropController = {\n add(item, event)\n {\n item._dragDropEventId = event.data.identifier;\n if (_items.indexOf(item) === -1)\n {\n _items.push(item);\n\n return true;\n }\n\n return false;\n },\n getItem(object)\n {\n let item = null; let\n index;\n\n for (let i = 0; i < _items.length; i++)\n {\n if (_items[i] === object)\n {\n item = _items[i];\n index = i;\n break;\n }\n }\n\n if (item !== null)\n {\n _items.splice(index, 1);\n\n return item;\n }\n\n return false;\n },\n getEventItem(event, group)\n {\n let item = null; let index; const\n id = event.data.identifier;\n\n for (let i = 0; i < _items.length; i++)\n {\n if (_items[i]._dragDropEventId === id)\n {\n if (group !== _items[i].dragGroup)\n {\n return false;\n }\n item = _items[i];\n index = i;\n break;\n }\n }\n\n if (item !== null)\n {\n _items.splice(index, 1);\n\n return item;\n }\n\n return false;\n },\n};\n\nexport { DragDropController };\nexport default DragDropController;\n","/**\n * @memberof PUXI\n * @class\n */\nexport class Insets\n{\n left: number;\n top: number;\n right: number;\n bottom: number;\n\n dirtyId: number;\n\n constructor()\n {\n this.reset();\n this.dirtyId = 0;\n }\n\n reset(): void\n {\n this.left = -1;\n this.top = -1;\n this.right = -1;\n this.bottom = -1;\n }\n}\n","/**\n * These are the modes in which an entity can measures its dimension. They are\n * relevant when a layout needs to know the optimal sizes of its children.\n *\n * @memberof PUXI\n * @enum\n * @property {number} UNBOUNDED - no upper limit on bounds. This should calculate the optimal dimensions for the entity.\n * @property {number} EXACTLY - the entity should set its dimension to the one passed to it.\n * @property {number} AT_MOST - the entity should find an optimal dimension below the one passed to it.\n */\nexport enum MeasureMode\n{\n UNBOUNDED = 0,\n EXACTLY = 1,\n AT_MOST = 2\n}\n\nexport interface IMeasurable\n{\n onMeasure(maxWidth: number, maxHeight: number, widthMode: MeasureMode, heightMode: MeasureMode);\n getMeasuredWidth(): number;\n getMeasuredHeight(): number;\n}\n\n/**\n * Any renderable entity that can be used in a widget hierarchy must be\n * measurable.\n *\n * @memberof PUXI\n * @interface IMeasurable\n */\n\n/**\n * Measures its width & height based on the passed constraints.\n *\n * @memberof PUXI.IMeasurable#\n * @method onMeasure\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n */\n\n/**\n * @memberof PUXI.IMeasurable#\n * @method getMeasuredWidth\n * @returns {number} - the measured width of the entity after a `onMeasure` call\n */\n\n/**\n * @memberof PUXI.IMeasurable#\n * @method getMeasuredHeight\n * @returns {number} - the measured height of the entity after a `onMeasure` call\n */\n","import { Widget } from '../Widget';\n\n/**\n * An event manager handles the states related to certain events and can augment\n * widget interaction. For example, the click manager will hide clicks when\n * the object is dragging.\n *\n * Event managers are lifecycle objects - they can start/stop. Their constructor\n * will always accept one argument - the widget. Other settings can be applied before\n * `startEvent`.\n *\n * Ideally, you should access event managers _after_ your widget has initialized. This is\n * because it may depend on the widget's stage being assigned.\n *\n * @memberof PUXI\n * @class\n * @abstract\n */\nexport abstract class EventManager\n{\n protected target: Widget;\n protected isEnabled: boolean;\n\n /**\n * @param {Widget} target\n */\n constructor(target: Widget)\n {\n this.target = target;\n this.isEnabled = false;// use to track start/stopEvent\n }\n\n /**\n * @returns {Widget}\n */\n getTarget(): Widget\n {\n return this.target;\n }\n\n /**\n * Registers the interaction event listeners that will emit corresponding events\n * on the target widget.\n */\n abstract startEvent(): any;\n\n /**\n * Unregisters any event listeners and releases any resources held. This should\n * revert all changes made by `startEvent`.\n */\n abstract stopEvent(): any;\n}\n","import * as PIXI from 'pixi.js';\nimport { Widget } from '../Widget';\nimport { EventManager } from './EventManager';\n\n/**\n * `ClickManager` handles hover and click events. It registers listeners\n * for `mousedown`, `mouseup`, `mousemove`, `mouseout`, `mouseover`, `touchstart`,\n * `touchend`, `touchendoutside`, `touchmove`, `rightup`, `rightdown`, `rightupoutside`\n * events.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.EventManager\n */\nexport class ClickManager extends EventManager\n{\n onHover: (event: PIXI.InteractionEvent, over: boolean) => void;\n onPress: (event: PIXI.InteractionEvent, isPressed: boolean) => void;\n onClick: (event: PIXI.InteractionMouseEvents) => void;\n onMove: (event: PIXI.InteractionEvent) => void;\n\n protected _rightMouseButton: boolean;\n protected _includeHover: boolean;\n protected _doubleClick: boolean;\n\n private bound: boolean;\n private id: number;\n private ishover: boolean;\n protected target: Widget;\n\n private movementX: number;\n private movementY: number;\n mouse: PIXI.Point;\n offset: PIXI.Point;\n\n private evMouseDown: string;\n private evMouseUp: string;\n private evMouseUpOutside: string;\n\n time: number;\n\n /**\n * @param {PUXI.Widget | PUXI.Button} target\n * @param {boolean}[includeHover=false] - enable hover (`mouseover`, `mouseout`) listeners\n * @param {boolean}[rightMouseButton=false] - use right mouse clicks\n * @param {boolean}[doubleClick=false] - fire double clicks\n */\n constructor(target: Widget, includeHover?: boolean, rightMouseButton?, doubleClick?: boolean)\n {\n super(target);\n\n this.bound = false;\n this.id = 0;\n this.ishover = false;\n this.mouse = new PIXI.Point();\n this.offset = new PIXI.Point();\n this.movementX = 0;\n this.movementY = 0;\n\n this._includeHover = typeof includeHover === 'undefined' ? true : includeHover;\n this.rightMouseButton = typeof rightMouseButton === 'undefined' ? false : rightMouseButton;\n this._doubleClick = typeof doubleClick === 'undefined' ? false : doubleClick;\n\n target.interactive = true;\n\n this.time = 0;\n this.startEvent();\n\n this.onHover = (): void => null;\n this.onPress = (): void => null;\n this.onClick = (): void => null;\n this.onMove = (): void => null;\n }\n\n /**\n * Whether right mice are used for clicks rather than left mice.\n * @member boolean\n */\n get rightMouseButton(): boolean\n {\n return this._rightMouseButton;\n }\n set rightMouseButton(val: boolean)\n {\n this._rightMouseButton = val;\n\n this.evMouseDown = this._rightMouseButton ? 'rightdown' : 'mousedown';\n this.evMouseUp = this._rightMouseButton ? 'rightup' : 'mouseup';\n this.evMouseUpOutside = this._rightMouseButton ? 'rightupoutside' : 'mouseupoutside';\n }\n\n /**\n * @param {boolean}[includeHover]\n * @param {boolean}[rightMouseButton]\n * @param {boolean}[doubleClick]\n * @override\n */\n startEvent = (\n includeHover = this._includeHover,\n rightMouseButton = this._rightMouseButton,\n doubleClick = this._doubleClick,\n ): void =>\n {\n if (this.isEnabled)\n {\n return;\n }\n\n this._includeHover = includeHover;\n this.rightMouseButton = rightMouseButton;\n this._doubleClick = doubleClick;\n\n const { target } = this;\n\n target.insetContainer.on(this.evMouseDown, this.onMouseDownImpl);\n\n if (!this._rightMouseButton)\n {\n target.insetContainer.on('touchstart', this.onMouseDownImpl);\n }\n\n if (this._includeHover)\n {\n target.insetContainer.on('mouseover', this.onMouseOverImpl);\n target.insetContainer.on('mouseout', this.onMouseOutImpl);\n }\n\n this.isEnabled = true;\n };\n\n /**\n * @override\n */\n stopEvent = (): void =>\n {\n if (!this.isEnabled)\n {\n return;\n }\n\n const { target } = this;\n\n if (this.bound)\n {\n target.insetContainer.removeListener(this.evMouseUp, this.onMouseUpImpl);\n target.insetContainer.removeListener(this.evMouseUpOutside, this.onMouseUpOutsideImpl);\n\n if (!this._rightMouseButton)\n {\n target.insetContainer.removeListener('touchend', this.onMouseUpImpl);\n target.insetContainer.removeListener('touchendoutside', this.onMouseUpOutsideImpl);\n }\n\n this.bound = false;\n }\n\n target.insetContainer.removeListener(this.evMouseDown, this.onMouseDownImpl);\n\n if (!this._rightMouseButton)\n {\n target.insetContainer.removeListener('touchstart', this.onMouseDownImpl);\n }\n\n if (this._includeHover)\n {\n target.insetContainer.removeListener('mouseover', this.onMouseOverImpl);\n target.insetContainer.removeListener('mouseout', this.onMouseOutImpl);\n target.insetContainer.removeListener('mousemove', this.onMouseMoveImpl);\n target.insetContainer.removeListener('touchmove', this.onMouseMoveImpl);\n }\n\n this.isEnabled = false;\n };\n\n protected onMouseDownImpl = (event: PIXI.interaction.InteractionEvent): void =>\n {\n const {\n target: obj,\n evMouseUp,\n onMouseUpImpl: _onMouseUp,\n evMouseUpOutside,\n onMouseUpOutsideImpl: _onMouseUpOutside,\n _rightMouseButton: right,\n } = this;\n\n this.mouse.copyFrom(event.data.global);\n this.id = event.data.identifier;\n this.onPress.call(this.target, event, true);\n\n if (!this.bound)\n {\n obj.insetContainer.on(evMouseUp, _onMouseUp);\n obj.insetContainer.on(evMouseUpOutside, _onMouseUpOutside);\n\n if (!right)\n {\n obj.insetContainer.on('touchend', _onMouseUp);\n obj.insetContainer.on('touchendoutside', _onMouseUpOutside);\n }\n\n this.bound = true;\n }\n\n if (this._doubleClick)\n {\n const now = performance.now();\n\n if (now - this.time < 210)\n {\n this.onClick.call(obj, event);\n }\n else\n {\n this.time = now;\n }\n }\n\n event.data.originalEvent.preventDefault();\n };\n\n protected onMouseUpCommonImpl = (event: PIXI.interaction.InteractionEvent): void =>\n {\n const {\n target: obj,\n evMouseUp,\n onMouseUpImpl: _onMouseUp,\n evMouseUpOutside,\n onMouseUpOutsideImpl: _onMouseUpOutside,\n } = this;\n\n if (event.data.identifier !== this.id)\n {\n return;\n }\n\n this.offset.set(event.data.global.x - this.mouse.x, event.data.global.y - this.mouse.y);\n\n if (this.bound)\n {\n obj.insetContainer.removeListener(evMouseUp, _onMouseUp);\n obj.insetContainer.removeListener(evMouseUpOutside, _onMouseUpOutside);\n\n if (!this._rightMouseButton)\n {\n obj.insetContainer.removeListener('touchend', _onMouseUp);\n obj.insetContainer.removeListener('touchendoutside', _onMouseUpOutside);\n }\n\n this.bound = false;\n }\n\n this.onPress.call(obj, event, false);\n };\n\n protected onMouseUpImpl = (event): void =>\n {\n if (event.data.identifier !== this.id)\n {\n return;\n }\n\n this.onMouseUpCommonImpl(event);\n\n // prevent clicks with scrolling/dragging objects\n if (this.target.dragThreshold)\n {\n this.movementX = Math.abs(this.offset.x);\n this.movementY = Math.abs(this.offset.y);\n\n if (Math.max(this.movementX, this.movementY) > this.target.dragThreshold)\n {\n return;\n }\n }\n\n if (!this._doubleClick)\n {\n this.onClick.call(this.target, event);\n }\n };\n\n protected onMouseUpOutsideImpl = (event): void =>\n {\n if (event.data.identifier !== this.id)\n {\n return;\n }\n\n this.onMouseUpCommonImpl(event);\n };\n\n protected onMouseOverImpl = (event): void =>\n {\n if (!this.ishover)\n {\n this.ishover = true;\n this.target.insetContainer.on('mousemove', this.onMouseMoveImpl);\n this.target.insetContainer.on('touchmove', this.onMouseMoveImpl);\n\n this.onHover.call(this.target, event, true);\n }\n };\n\n protected onMouseOutImpl = (event): void =>\n {\n if (this.ishover)\n {\n this.ishover = false;\n this.target.insetContainer.removeListener('mousemove', this.onMouseMoveImpl);\n this.target.insetContainer.removeListener('touchmove', this.onMouseMoveImpl);\n\n this.onHover.call(this.target, event, false);\n }\n };\n\n protected onMouseMoveImpl = (event): void =>\n {\n this.onMove.call(this.target, event);\n };\n}\n","import * as PIXI from 'pixi.js';\nimport { EventManager } from './EventManager';\nimport { Widget } from '../Widget';\n\n/**\n * `DragManager` handles drag & drop events. It registers listeners for `mousedown`,\n * `touchstart` on the target and `mousemove`, `touchmove`, `mouseup`, `mouseupoutside`,\n * `touchend`, `touchendoutside` on the stage.\n *\n * By default, `draggable` widgets will internally handle drag-n-drop and reassigning\n * the callbacks on their `DragManager` will break their behaviour. You can prevent\n * this by using `eventBroker.dnd` directly without setting `widget.draggable` to\n * `true` (or using `widget.makeDraggable()`).\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.EventManager\n */\nexport class DragManager extends EventManager\n{\n protected isBound: boolean;\n protected isDragging: boolean;\n protected id: number;\n protected dragStart: PIXI.Point;\n protected dragOffset: PIXI.Point;\n protected lastCursor: PIXI.Point;\n protected movementX: number;\n protected movementY: number;\n protected cancel: boolean;\n\n public onPress: (e: PIXI.interaction.InteractionEvent, isPressed: boolean) => void;\n public onDragStart: (e: PIXI.interaction.InteractionEvent) => void;\n public onDragMove: (e: PIXI.interaction.InteractionEvent, dragOffset: PIXI.Point) => void;\n public onDragEnd: (e: PIXI.interaction.InteractionEvent) => void;\n\n constructor(target: Widget)\n {\n super(target);\n\n this.isBound = false;\n this.isDragging = false;\n this.id = 0;\n this.dragStart = new PIXI.Point();\n this.dragOffset = new PIXI.Point();\n this.lastCursor = new PIXI.Point();\n this.movementX = 0;\n this.movementY = 0;\n this.cancel = false;\n\n this.target.interactive = true;\n\n this.onPress = (): void => null;\n this.onDragStart = (): void => null;\n this.onDragMove = (): void => null;\n this.onDragEnd = (): void => null;\n }\n\n startEvent(): void\n {\n if (this.isEnabled)\n {\n return;\n }\n\n const { target } = this;\n\n target.insetContainer.on('mousedown', this.onDragStartImpl);\n target.insetContainer.on('touchstart', this.onDragStartImpl);\n\n this.isEnabled = true;\n }\n\n stopEvent(): void\n {\n if (!this.isEnabled)\n {\n return;\n }\n\n const { target } = this;\n\n if (this.isBound)\n {\n target.stage.removeListener('mousemove', this.onDragMoveImpl);\n target.stage.removeListener('touchmove', this.onDragMoveImpl);\n target.stage.removeListener('mouseup', this.onDragEndImpl);\n target.stage.removeListener('mouseupoutside', this.onDragEndImpl);\n target.stage.removeListener('touchend', this.onDragEndImpl);\n target.stage.removeListener('touchendoutside', this.onDragEndImpl);\n\n this.isBound = false;\n }\n\n target.insetContainer.removeListener('mousedown', this.onDragStartImpl);\n target.insetContainer.removeListener('touchstart', this.onDragStartImpl);\n\n this.isEnabled = false;\n }\n\n protected onDragStartImpl = (e: PIXI.interaction.InteractionEvent): void =>\n {\n const { target } = this;\n\n this.id = e.data.identifier;\n this.onPress(e, true);\n\n if (!this.isBound)\n {\n this.dragStart.copyFrom(e.data.global);\n\n target.stage.on('mousemove', this.onDragMoveImpl);\n target.stage.on('touchmove', this.onDragMoveImpl);\n target.stage.on('mouseup', this.onDragEndImpl);\n target.stage.on('mouseupoutside', this.onDragEndImpl);\n target.stage.on('touchend', this.onDragEndImpl);\n target.stage.on('touchendoutside', this.onDragEndImpl);\n target.stage.on('touchcancel', this.onDragEndImpl);\n\n this.isBound = true;\n }\n\n e.data.originalEvent.preventDefault();\n };\n\n private onDragMoveImpl = (e: PIXI.interaction.InteractionEvent): void =>\n {\n if (e.data.identifier !== this.id)\n {\n return;\n }\n\n const {\n lastCursor,\n dragOffset,\n dragStart,\n target,\n } = this;\n\n this.lastCursor.copyFrom(e.data.global);\n this.dragOffset.set(lastCursor.x - dragStart.x, lastCursor.y - dragStart.y);\n\n if (!this.isDragging)\n {\n this.movementX = Math.abs(dragOffset.x);\n this.movementY = Math.abs(dragOffset.y);\n\n if ((this.movementX === 0 && this.movementY === 0)\n || Math.max(this.movementX, this.movementY) < target.dragThreshold)\n {\n return; // threshold\n }\n\n if (target.dragRestrictAxis !== null)\n {\n this.cancel = false;\n\n if (target.dragRestrictAxis === 'x' && this.movementY > this.movementX)\n {\n this.cancel = true;\n }\n else if (target.dragRestrictAxis === 'y' && this.movementY <= this.movementX)\n {\n this.cancel = true;\n }\n\n if (this.cancel)\n {\n this.onDragEndImpl(e);\n\n return;\n }\n }\n\n this.onDragStart(e);\n this.isDragging = true;\n }\n\n this.onDragMove(e, dragOffset);\n };\n\n private onDragEndImpl = (e: PIXI.interaction.InteractionEvent): void =>\n {\n if (e.data.identifier !== this.id)\n {\n return;\n }\n\n const { target } = this;\n\n if (this.isBound)\n {\n target.stage.removeListener('mousemove', this.onDragMoveImpl);\n target.stage.removeListener('touchmove', this.onDragMoveImpl);\n target.stage.removeListener('mouseup', this.onDragEndImpl);\n target.stage.removeListener('mouseupoutside', this.onDragEndImpl);\n target.stage.removeListener('touchend', this.onDragEndImpl);\n target.stage.removeListener('touchendoutside', this.onDragEndImpl);\n target.stage.removeListener('touchcancel', this.onDragEndImpl);\n\n this.isDragging = false;\n this.isBound = false;\n\n this.onDragEnd(e);\n this.onPress(e, false);\n }\n };\n}\n","import { ClickManager } from './ClickManager';\nimport { DragManager } from './DragManager';\nimport { EventManager } from './EventManager';\nimport { Widget } from '../Widget';\n\n/**\n * The event brokers allows you to access event managers without manually assigning\n * them to a widget. By default, the click (`PUXI.ClickManager`), dnd (`PUXI.DragManager`)\n * are defined. You can add event managers for all (new) widgets by adding an entry to\n * `EventBroker.MANAGER_MAP`.\n *\n * @memberof PUXI\n * @class\n */\nexport class EventBroker\n{\n [key: string]: EventManager | Widget;\n\n constructor(target: Widget)\n {\n this.target = target;\n\n for (const mgr of Object.keys(EventBroker.MANAGER_MAP))\n {\n Object.defineProperty(\n this,\n mgr,\n {\n get(): EventManager\n {\n if (!this[`_${mgr}`])\n {\n this[`_${mgr}`] = new EventBroker.MANAGER_MAP[mgr](this.target);\n }\n\n return this[`_${mgr}`];\n },\n },\n );\n }\n }\n\n static MANAGER_MAP = {\n click: ClickManager,\n dnd: DragManager,\n };\n}\n","import * as PIXI from 'pixi.js';\nimport { EventManager } from './EventManager';\nimport { Widget } from '../Widget';\n\n/**\n * Handles the `wheel` and `scroll` DOM events on widgets. It also registers\n * listeners for `mouseout` and `mouseover`.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.EventManager\n */\nexport class ScrollManager extends EventManager\n{\n private bound: boolean;\n private delta: PIXI.Point;\n private preventDefault: boolean;\n\n constructor(target: Widget, preventDefault = true)\n {\n super(target);\n\n this.bound = false;\n this.delta = new PIXI.Point();\n this.preventDefault = preventDefault;\n\n this.startEvent();\n }\n\n /**\n * @override\n */\n startEvent(): void\n {\n const { target, onHoverImpl, onMouseOutImpl } = this;\n\n target.contentContainer.on('mouseover', onHoverImpl);\n target.contentContainer.on('mouseout', onMouseOutImpl);\n }\n\n /**\n * @override\n */\n stopEvent(): void\n {\n const { target, onMouseScrollImpl, onHoverImpl, onMouseOutImpl } = this;\n\n if (this.bound)\n {\n document.removeEventListener('mousewheel', onMouseScrollImpl);\n document.removeEventListener('DOMMouseScroll', onMouseScrollImpl);\n\n this.bound = false;\n }\n\n target.contentContainer.removeListener('mouseover', onHoverImpl);\n target.contentContainer.removeListener('mouseout', onMouseOutImpl);\n }\n\n private onMouseScrollImpl = (e: WheelEvent): void =>\n {\n const { target, preventDefault, delta } = this;\n\n if (preventDefault)\n {\n event.preventDefault();\n }\n\n if (typeof e.deltaX !== 'undefined')\n {\n delta.set(e.deltaX, e.deltaY);\n }\n else // Firefox\n {\n delta.set(e.axis === 1 ? e.detail * 60 : 0,\n e.axis === 2 ? e.detail * 60 : 0);\n }\n\n this.onMouseScroll.call(target, event, delta);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private onHoverImpl = (e): void =>\n {\n const { onMouseScrollImpl } = this;\n\n if (!this.bound)\n {\n document.addEventListener('mousewheel', onMouseScrollImpl, false);\n document.addEventListener('DOMMouseScroll', onMouseScrollImpl, false);\n\n this.bound = true;\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private onMouseOutImpl = (e): void =>\n {\n const { onMouseScrollImpl } = this;\n\n if (this.bound)\n {\n document.removeEventListener('mousewheel', onMouseScrollImpl);\n document.removeEventListener('DOMMouseScroll', onMouseScrollImpl);\n\n this.bound = false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMouseScroll = function onMouseScroll(event, delta: PIXI.Point): void\n {\n // Default onMouseScroll.\n };\n}\n","import { DragManager } from './event/DragManager';\nimport { DragDropController } from './event/DragDropController';\nimport * as PIXI from 'pixi.js';\nimport { Insets } from './layout-options/Insets';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { MeasureMode, IMeasurable } from './IMeasurable';\nimport { Stage } from './Stage';\nimport { DropShadowFilter } from '@pixi/filter-drop-shadow';\nimport { EventBroker } from './event';\nimport { Style } from './Style';\nimport { Menu } from './Menu';\nimport { PopupMenu } from './PopupMenu';\n\nconst PADDING_PROPERTIES = ['paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom'];\n\nconst PADDING_AXIS_PROPERTIES = ['paddingHorizontal', 'paddingVertical'];\n\nexport const TEXT_STYLE_PROPERTIES = [\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'letterSpacing',\n];\n\n/**\n * A widget is a user interface control that renders content inside its prescribed\n * rectangle on the screen.\n *\n * @memberof PUXI\n * @class\n * @extends PIXI.utils.EventEmitter\n * @implements PUXI.IMeasurable\n */\nexport class Widget extends PIXI.utils.EventEmitter implements IMeasurable\n{\n /**\n * The minimum delay between two clicks to not consider them as a double-click.\n */\n public static CLICK_DELAY = 300;\n\n public readonly insetContainer: PIXI.Container;\n public readonly contentContainer: PIXI.Container;\n public readonly widgetChildren: Widget[];\n public readonly stage: Stage;\n\n initialized: boolean;\n protected dragInitialized: boolean;\n protected dropInitialized: boolean;\n protected isDragging: boolean;\n\n private draggable: boolean;\n private droppable: boolean;\n \n tint: number;\n dirty: boolean;\n _oldWidth: number;\n _oldHeight: number;\n pixelPerfect: boolean;\n\n parent: Widget;\n\n public layoutMeasure: Insets;\n public layoutOptions: LayoutOptions;\n\n protected blendMode: PIXI.BLEND_MODES;\n protected background: PIXI.Container;\n protected _measuredWidth: number;\n protected _measuredHeight: number;\n\n private _eventBroker: EventBroker;\n private _paddingLeft: number;\n private _paddingTop: number;\n private _paddingRight: number;\n private _paddingBottom: number;\n private _width: number;\n private _height: number;\n private _elevation: number;\n private _dropShadow: DropShadowFilter;\n private _layoutDirty: boolean;\n\n private singleClickTimeout: NodeJS.Timeout;\n private style: Style;\n private styleID: number;\n private contextMenu: Menu;\n private contextPopup: PopupMenu;\n\n constructor()\n {\n super();\n\n /**\n * This container owns the background + content of this widget.\n * @member {PIXI.Container}\n * @readonly\n */\n this.insetContainer = new PIXI.Container();\n\n /**\n * This container holds the content of this widget. Subclasses should add\n * renderable display-objects to this container.\n * @member {PIXI.Container}\n * @readonly\n */\n this.contentContainer = this.insetContainer.addChild(new PIXI.Container());\n\n /**\n * Children of this widget. Use `WidgetGroup` to position children.\n * @member {PUXI.Widget[]}\n * @readonly\n */\n this.widgetChildren = [];\n\n /**\n * Stage whose scene graph holds this widget. Once set, this cannot be changed.\n * @member {PUXI.Stage}\n * @readonly\n */\n this.stage = null;\n\n /**\n * Layout insets of this widget. In normal state, the widget should be in this\n * rectangle inside the parent reference frame.\n * @member {PUXI.Insets}\n * @readonly\n */\n this.layoutMeasure = new Insets();\n\n this.initialized = false;\n this.dragInitialized = false;\n this.dropInitialized = false;\n\n this.dirty = true;\n this._oldWidth = -1;\n this._oldHeight = -1;\n this.pixelPerfect = true;\n\n this._paddingLeft = 0;\n this._paddingTop = 0;\n this._paddingRight = 0;\n this._paddingBottom = 0;\n this._elevation = 0;\n\n this.tint = 0;\n this.blendMode = PIXI.BLEND_MODES.NORMAL;\n\n this.draggable = false;\n this.droppable = false;\n\n this.singleClickTimeout = null;\n this.style = null;\n this.styleID = -1;\n\n // Use a separate callback function to allow this.on* methods to be reassigned.\n this.insetContainer.on('pointerdown', (e: PIXI.InteractionEvent) => { this.onPointerPress(e); });\n this.insetContainer.on('pointermove', (e: PIXI.InteractionEvent) => { this.onPointerMove(e); });\n this.insetContainer.on('pointerup', (e: PIXI.InteractionEvent) => { this.onPointerRelease(e); });\n this.insetContainer.on('pointerover', (e: PIXI.InteractionEvent) => { this.onPointerEnter(e); });\n this.insetContainer.on('pointerout', (e: PIXI.InteractionEvent) => { this.onPointerExit(e); });\n this.insetContainer.on('rightclick', (e: PIXI.InteractionEvent) => { this.onRightClick(e); });\n }\n\n /**\n * Update method that is to be overriden. This is called before a `render()`\n * pass on widgets that are dirty.\n *\n * @private\n */\n update(): any\n {\n if (this._layoutDirty)\n {\n // console.log('here');\n setTimeout(() =>\n {\n if (this._layoutDirty)\n {\n this.stage.measureAndLayout();\n }\n }, 0);\n }\n\n if (this.style && this.styleID !== this.style.dirtyID)\n {\n this.onStyleChange(this.style);\n this.styleID = this.style.dirtyID;\n }\n }\n\n /**\n * The measured width that is used by the parent's layout manager to place this\n * widget.\n * @member {number}\n */\n get measuredWidth(): number\n {\n return this._measuredWidth;\n }\n\n /**\n * The measured height that is used by the parent's layout manager to place this\n * widget.\n * @member {number}\n */\n get measuredHeight(): number\n {\n return this._measuredHeight;\n }\n\n /**\n * Alias for `Widget.measuredWidth`.\n *\n * @returns {number} the measured width\n */\n getMeasuredWidth(): number\n {\n return this._measuredWidth;\n }\n\n /**\n * Alias for `Widget.measuredHeight`.\n *\n * @returns {number} the measured height\n */\n getMeasuredHeight(): number\n {\n return this._measuredHeight;\n }\n\n /**\n * Override this method to measure the dimensions for your widget. By default, it\n * will use the natural width/height of this widget's content (`contentContainer`)\n * plus any padding.\n *\n * @param {number} width - width of region provided by parent\n * @param {number} height - height of region provided by parent\n * @param {PUXI.MeasureMode} widthMode - mode in which provided width is to be used\n * @param {PUXI.MeasureMode} heightMode - mode in which provided height is to be used\n */\n onMeasure(width: number, height: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n const naturalWidth = this.contentContainer.width + this.paddingHorizontal;\n const naturalHeight = this.contentContainer.height + this.paddingVertical;\n\n switch (widthMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredWidth = width;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredWidth = naturalWidth;\n break;\n case MeasureMode.AT_MOST:\n this._measuredWidth = Math.min(width, naturalWidth);\n break;\n }\n\n switch (heightMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredHeight = height;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredHeight = naturalHeight;\n break;\n case MeasureMode.AT_MOST:\n this._measuredHeight = Math.min(height, naturalHeight);\n break;\n }\n }\n\n /**\n * This method calls `Widget.onMeasure` and should not be overriden. It does internal\n * bookkeeping.\n *\n * @param {number} width\n * @param {number} height\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n */\n measure(width: number, height: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n this.onMeasure(width, height, widthMode, heightMode);\n }\n\n /**\n * This method should set the frame in which rendering will occur and lay out\n * child widgets in that frame.\n *\n * @param l\n * @param t\n * @param r\n * @param b\n * @param dirty\n * @protected\n */\n onLayout(l: number, t: number = l, r: number = l, b: number = t, dirty = true): void\n {\n this.layoutMeasure.left = l;\n this.layoutMeasure.top = t;\n this.layoutMeasure.right = r;\n this.layoutMeasure.bottom = b;\n\n this._width = r - l;\n this._height = b - t;\n\n if (this.background)\n {\n this.background.x = 0;\n this.background.y = 0;\n this.background.width = r - l;\n this.background.height = b - t;\n }\n\n // Update parallel PIXI node too!\n this.insetContainer.x = l;\n this.insetContainer.y = t;\n this.contentContainer.x = this._paddingLeft;\n this.contentContainer.y = this._paddingTop;\n\n // Don't set width/height on inset, content because that would scale\n // the contents (we don't want that).\n\n this._layoutDirty = false;\n }\n\n layout(l: number, t: number = l, r: number = l, b: number = t, dirty = true): void\n {\n this.onLayout(l, t, r, b, dirty);\n }\n\n /**\n * Use this to specify how you want to layout this widget w.r.t its parent.\n * The specific layout options class depends on which layout you are\n * using in the parent widget.\n *\n * @param {PUXI.LayoutOptions} lopt\n * @returns {Widget} this\n */\n setLayoutOptions(lopt: LayoutOptions): Widget\n {\n this.layoutOptions = lopt;\n\n return this;\n }\n\n /**\n * This is invoked when a style is applied on the widget. If you override it, you must pass through the superclass\n * implementation.\n *\n * @param style\n */\n protected onStyleChange(style: Style): void\n {\n const styleData = style.getProperties(\n 'backgroundColor',\n 'background',\n 'elevation',\n 'padding',\n 'paddingHorizontal',\n 'paddingVertical',\n 'paddingLeft',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n );\n\n // Set background of widget\n if (styleData.background)\n {\n this.setBackground(styleData.background);\n }\n else if (typeof styleData.backgroundColor !== 'undefined')\n {\n this.setBackground(styleData.backgroundColor);\n }\n\n // Set elevation\n if (typeof styleData.elevation !== 'undefined')\n {\n this.setElevation(styleData.elevation);\n }\n\n // Set _paddingLeft, _paddingTop, _paddingRight, _paddingBottom\n PADDING_PROPERTIES.forEach((propName, i) =>\n {\n if (typeof styleData[propName] === 'number')\n {\n this[`_${propName}`] = styleData[propName];\n }\n else if (typeof styleData[PADDING_AXIS_PROPERTIES[i % 2]] === 'number')\n {\n this[`_${propName}`] = styleData[PADDING_AXIS_PROPERTIES[i % 2]];\n }\n else if (typeof styleData.padding === 'number')\n {\n this[`_${propName}`] = styleData.padding;\n }\n });\n\n this.dirty = true;\n }\n\n /**\n * Handles the pointer-entered event.\n *\n * If you override this method, you must call through to the superclass implementation.\n *\n * @param e - the triggering interaction event\n */\n onPointerEnter(e: PIXI.InteractionEvent): void\n {\n this.onHoverChange(e, true);\n }\n\n /**\n * Handles the pointer-exited event.\n *\n * If you override this method, you must call through to the superclass implementation.\n *\n * @param e\n */\n onPointerExit(e: PIXI.InteractionEvent): void\n {\n this.onHoverChange(e, false);\n }\n\n /**\n * Handles the pointer-down event. If you override this method, you must call through to the superclass\n * implementation.\n */\n onPointerPress(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n /**\n * Handles the pointer-move event. If you override this method, you must call through to the superclass\n * implementation.\n */\n onPointerMove(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n onPointerRelease(e: PIXI.InteractionEvent): void\n {\n if (!this.singleClickTimeout)\n {\n // Invoke onClick after ~300ms only if it isn't a double-click.\n this.singleClickTimeout = setTimeout(() =>\n {\n this.singleClickTimeout = null;\n }, Widget.CLICK_DELAY);\n\n this.onClick(e);\n }\n else\n {\n clearTimeout(this.singleClickTimeout);\n\n this.singleClickTimeout = null;\n\n // Invoke onDoubleClick after the onPointerPress handler.\n setTimeout(() => { this.onDoubleClick(e); }, 0);\n }\n\n return;\n }\n\n /**\n * Event handler for change in the hover state.\n *\n * @param e\n * @param hover\n */\n onHoverChange(e: PIXI.InteractionEvent, hover: boolean): void\n {\n return;\n }\n\n onClick(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n onDoubleClick(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n onRightClick(e: PIXI.InteractionEvent): void\n {\n console.log('RIGHT_CLICK');\n e.data.originalEvent.preventDefault();\n\n if (this.contextMenu)\n {\n if (!this.contextPopup)\n {\n // this.contextPopup = new PopupMenu(this.contextMenu);\n }\n\n const location = e.data.getLocalPosition(this.stage);\n\n // this.openPopupMenu(location.x, location.y);\n }\n\n return;\n }\n\n /**\n * The event broker for this widget that holds all the event managers. This can\n * be used to start/stop clicks, drags, scrolls and configure how those events\n * are handled/interpreted.\n * @member PUXI.EventBroker\n */\n get eventBroker(): EventBroker\n {\n if (!this._eventBroker)\n {\n this._eventBroker = new EventBroker(this);\n }\n\n return this._eventBroker;\n }\n\n /**\n * Padding on left side.\n * @member {number}\n */\n get paddingLeft(): number\n {\n return this._paddingLeft;\n }\n set paddingLeft(val: number)\n {\n this._paddingLeft = val;\n this.dirty = true;\n }\n\n /**\n * Padding on top side.\n * @member {number}\n */\n get paddingTop(): number\n {\n return this._paddingTop;\n }\n set paddingTop(val: number)\n {\n this._paddingTop = val;\n this.dirty = true;\n }\n\n /**\n * Padding on right side.\n * @member {number}\n */\n get paddingRight(): number\n {\n return this._paddingRight;\n }\n set paddingRight(val: number)\n {\n this._paddingRight = val;\n this.dirty = true;\n }\n\n /**\n * Padding on bottom side.\n * @member {number}\n */\n get paddingBottom(): number\n {\n return this._paddingBottom;\n }\n set paddingBottom(val: number)\n {\n this._paddingBottom = val;\n this.dirty = true;\n }\n\n /**\n * Sum of left & right padding.\n * @member {number}\n * @readonly\n */\n get paddingHorizontal(): number\n {\n return this._paddingLeft + this._paddingRight;\n }\n\n /**\n * Sum of top & bottom padding.\n * @member {number}\n * @readonly\n */\n get paddingVertical(): number\n {\n return this._paddingTop + this._paddingBottom;\n }\n\n /**\n * Whether this widget is interactive in the PixiJS scene graph.\n * @member {boolean}\n */\n get interactive(): boolean\n {\n return this.insetContainer.interactive;\n }\n set interactive(val: boolean)\n {\n this.insetContainer.interactive = true;\n this.contentContainer.interactive = true;\n }\n\n /**\n * Layout width of this widget.\n * @member {number}\n * @readonly\n */\n get width(): number\n {\n return this._width;\n }\n\n /**\n * Layout height of this widget.\n * @member {number}\n * @readonly\n */\n get height(): number\n {\n return this._height;\n }\n\n /**\n * Layout width of this widget's content, which is the width minus horizontal padding.\n * @member {number}\n * @readonly\n */\n get contentWidth(): number\n {\n return this._width - this.paddingHorizontal;\n }\n\n /**\n * Layout height of this widget's content, which is the height minus vertical padding.\n * @member {number}\n * @readonly\n */\n get contentHeight(): number\n {\n return this._height - this.paddingVertical;\n }\n\n /**\n * Alpha of this widget & its contents.\n * @member {number}\n */\n get alpha(): number\n {\n return this.insetContainer.alpha;\n }\n set alpha(val: number)\n {\n this.insetContainer.alpha = val;\n }\n\n /**\n * Sets the padding values.\n *\n * To set all paddings to one value:\n * ```\n * widget.setPadding(8);\n * ```\n *\n * To set horizontal & vertical padding separately:\n * ```\n * widget.setPadding(4, 12);\n * ```\n *\n * @param {number}[l=0] - left padding\n * @param {number}[t=l] - top padding (default is equal to left padding)\n * @param {number}[r=l] - right padding (default is equal to right padding)\n * @param {number}[b=t] - bottom padding (default is equal to top padding)\n */\n setPadding(l: number, t: number = l, r: number = l, b: number = t): Widget\n {\n this._paddingLeft = l;\n this._paddingTop = t;\n this._paddingRight = r;\n this._paddingBottom = b;\n this.dirty = true;\n\n return this;\n }\n\n /**\n * @returns {PIXI.Container} - the background display-object\n */\n getBackground(): PIXI.Container\n {\n return this.background;\n }\n\n /**\n * The background of a widget is a `PIXI.DisplayObject` that is rendered before\n * all of its children.\n *\n * @param {PIXI.Container | number | string} bg - the background display-object or\n * a color that will be used to generate a `PIXI.Graphics` as the background.\n */\n setBackground(bg: PIXI.Container | number | string): Widget\n {\n if (this.background)\n {\n this.insetContainer.removeChild(this.background);\n }\n\n if (typeof bg === 'string')\n {\n bg = PIXI.utils.string2hex(bg);\n }\n if (typeof bg === 'number')\n {\n bg = new PIXI.Graphics()\n .beginFill(bg)\n .drawRect(0, 0, 1, 1)\n .endFill();\n }\n\n this.background = bg;\n\n if (bg)\n {\n bg.width = this.width;\n bg.height = this.height;\n this.insetContainer.addChildAt(bg, 0);\n }\n\n if (bg && this._elevation && this._dropShadow)\n {\n if (!this.background.filters)\n {\n this.background.filters = [];\n }\n\n this.background.filters.push(this._dropShadow);\n }\n\n return this;\n }\n\n /**\n * @returns {number} the alpha on the background display-object.\n */\n getBackgroundAlpha(): number\n {\n return this.background ? this.background.alpha : 1;\n }\n\n /**\n * This can be used to set the alpha on the _background_ of this widget. This\n * does not affect the widget's contents nor individual components of the\n * background display-object.\n *\n * @param {number} val - background alpha\n */\n setBackgroundAlpha(val: number): Widget\n {\n if (!this.background)\n {\n this.setBackground(0xffffff);\n }\n\n this.background.alpha = val;\n\n return this;\n }\n\n /**\n * Set the context-menu to be shown on right-clicks.\n *\n * This feature is not released yet, i.e. does not work!\n *\n * @param menu\n * @alpha\n */\n setContextMenu(menu: Menu): void\n {\n this.contextMenu = menu;\n }\n\n /**\n * @return {number} the elevation set on this widget\n */\n getElevation(): number\n {\n return this._elevation;\n }\n\n /**\n * This can be used add a drop-shadow that will appear to raise this widget by\n * the given elevation against its parent.\n *\n * @param {number} val - elevation to use. 2px is good for most widgets.\n */\n setElevation(val: number): Widget\n {\n this._elevation = val;\n\n if (val === 0 && this._dropShadow)\n {\n if (!this.background)\n {\n return this;\n }\n\n const i = this.background.filters.indexOf(this._dropShadow);\n\n if (i > 0)\n {\n this.background.filters.splice(i, 1);\n }\n }\n else if (val > 0)\n {\n if (!this._dropShadow)\n {\n if (this.background && !this.background.filters)\n {\n this.background.filters = [];\n }\n\n this._dropShadow = new DropShadowFilter({ distance: val });\n\n if (this.background)\n {\n this.background.filters.push(this._dropShadow);\n }\n }\n\n this._dropShadow.distance = val;\n }\n\n return this;\n }\n\n /**\n * Set the style applied on this widget. To unset a style, simply pass {@code null}.\n *\n * @param style\n */\n setStyle(style?: Style): this\n {\n this.style = style;\n this.styleID = -1;\n\n return this;\n }\n\n /**\n * Will trigger a full layout pass next animation frame.\n */\n requestLayout(): void\n {\n this._layoutDirty = true;\n }\n\n /**\n * Adds the widgets as children of this one.\n *\n * @param {PUXI.Widget[]} widgets\n * @returns {Widget} - this widget\n */\n addChild(...widgets: Widget[]): Widget\n {\n for (let i = 0; i < widgets.length; i++)\n {\n const widget = widgets[i];\n\n if (widget.parent)\n {\n widget.parent.removeChild(widget);\n }\n\n widget.parent = this;\n this.contentContainer.addChild(widget.insetContainer);\n this.widgetChildren.push(widget);\n }\n\n return this;\n }\n\n /**\n * Orphans the widgets that are children of this one.\n *\n * @param {PUXI.Widget[]} widgets\n * @returns {Widget} - this widget\n */\n removeChild(...widgets: Widget[]): Widget\n {\n for (let i = 0; i < widgets.length; i++)\n {\n const widget = widgets[i];\n const index = this.widgetChildren.indexOf(widget);\n\n if (index !== -1)\n {\n widget.insetContainer.parent.removeChild(widget.insetContainer);\n this.widgetChildren.splice(index, 1);\n widget.parent = null;\n }\n }\n\n return this;\n }\n\n private openPopupMenu(x: number, y: number): void\n {\n const stage = this.stage;\n const lopt = this.contextPopup.layoutOptions as FastLayoutOptions;\n\n lopt.x = x;\n lopt.y = y;\n\n this.stage.addChild(this.contextPopup);\n }\n\n private closePopupMenu(): void\n {\n this.stage.removeChild(this.contextPopup);\n }\n\n /**\n * Makes this widget `draggable`.\n */\n makeDraggable(): Widget\n {\n this.draggable = true;\n\n if (this.initialized)\n {\n this.initDraggable();\n }\n\n return this;\n }\n\n /**\n * Makes this widget not `draggable`.\n */\n clearDraggable(): void\n {\n if (this.dragInitialized)\n {\n this.dragInitialized = false;\n (this.eventBroker.dnd as DragManager).stopEvent();\n }\n }\n\n /**\n * Widget initialization related to the stage. This method should always call\n * `super.initialize()`.\n *\n * This method expects `stage` to be set before calling it. This is handled\n * by the `Stage` itself.\n *\n * This will set `initialized` to true. If it was already set to true, it _should\n * do nothing_.\n *\n * @protected\n */\n initialize(): void\n {\n if (this.initialized)\n {\n return;\n }\n\n if (this.draggable)\n {\n this.initDraggable();\n }\n if (this.droppable)\n {\n this.initDroppable();\n }\n\n this.initialized = true;\n }\n\n private initDraggable(): void\n {\n if (this.dragInitialized)\n {\n return;\n }\n\n this.dragInitialized = true;\n\n const realPosition = new PIXI.Point();\n const dragPosition = new PIXI.Point();\n\n const dnd: DragManager = this.eventBroker.dnd as DragManager;\n const { insetContainer } = this;\n\n dnd.onDragStart = (e: PIXI.InteractionEvent): void =>\n {\n const added = DragDropController.add(this, e);\n\n if (!this.isDragging && added)\n {\n this.isDragging = true;\n insetContainer.interactive = false;\n realPosition.copyFrom(insetContainer.position);\n\n this.emit('draggablestart', e);\n }\n };\n\n dnd.onDragMove = (e: PIXI.InteractionEvent, offset: PIXI.Point): void =>\n {\n if (this.isDragging)\n {\n dragPosition.set(realPosition.x + offset.x, realPosition.y + offset.y);\n\n insetContainer.x = dragPosition.x;\n insetContainer.y = dragPosition.y;\n\n this.emit('draggablemove', e);\n }\n };\n\n dnd.onDragEnd = (e: PIXI.InteractionEvent): void =>\n {\n if (this.isDragging)\n {\n this.isDragging = false;\n DragDropController.getItem(this);\n\n // Return to container after 0ms if not picked up by a droppable\n setTimeout((): void =>\n {\n this.insetContainer.interactive = true;\n this.insetContainer.position.copyFrom(realPosition);\n\n this.emit('draggableend', e);\n }, 0);\n }\n };\n\n dnd.startEvent()\n }\n\n /**\n * Makes this widget `droppable`.\n */\n makeDroppable(): Widget\n {\n this.droppable = true;\n\n if (this.initialized)\n {\n this.initDroppable();\n }\n\n return this;\n }\n\n protected onDrop: (e: PIXI.interaction.InteractionEvent) => void;\n\n /**\n * Makes this widget not `droppable`.\n */\n clearDroppable(): void\n {\n if (this.dropInitialized)\n {\n this.dropInitialized = false;\n this.contentContainer.removeListener('mouseup', this.onDrop);\n this.contentContainer.removeListener('touchend', this.onDrop);\n }\n }\n\n private initDroppable(): void\n {\n if (!this.dropInitialized)\n {\n this.dropInitialized = true;\n const container = this.contentContainer;\n\n this.contentContainer.interactive = true;\n\n this.onDrop = (event): void =>\n {\n const item = DragDropController.getEventItem(event, this.dropGroup);\n\n if (item && item.isDragging)\n {\n item.isDragging = false;\n item.insetContainer.interactive = true;\n const parent = this.droppableReparent !== null ? this.droppableReparent : self;\n\n parent.container.toLocal(item.container.position, item.container.parent, item);\n if (parent.container != item.container.parent) { parent.addChild(item); }\n }\n };\n\n container.on('mouseup', this.onDrop);\n container.on('touchend', this.onDrop);\n }\n }\n\n /**\n * Creates a widget that holds the display-object as its content. If `content` is\n * a `PUXI.Widget`, then it will be returned.\n * @param {PIXI.Container | Widget} content\n * @static\n */\n static fromContent(content: PIXI.Container | Widget): Widget\n {\n if (content instanceof Widget)\n {\n return content;\n }\n\n const widget = new Widget();\n\n widget.contentContainer.addChild(content);\n\n return widget;\n }\n\n /**\n * Easy utility to resolve measured dimension.\n * @param {number} natural - your widget's natural dimension\n * @param {number} limit - width/height limit passed by parent\n * @param {PUXI.MeasureMode} mode - measurement mode passed by parent\n */\n static resolveMeasuredDimen(natural: number, limit: number, mode: MeasureMode): number\n {\n if (mode === MeasureMode.EXACTLY)\n {\n return limit;\n }\n else if (mode === MeasureMode.AT_MOST)\n {\n return Math.min(limit, natural);\n }\n\n return natural;\n }\n}\n","/**\n * Alignments supported by layout managers in PuxiJS core.\n *\n * @memberof PUXI\n * @enum\n */\nexport enum ALIGN\n{\n LEFT = 0,\n TOP = 0,\n MIDDLE = 0xff1,\n CENTER = 0xff1,\n RIGHT = 0xffff1,\n BOTTOM = 0xffff1,\n NONE = 0xffffffff\n}\n","/**\n * This are the base constraints that you can apply on a `PUXI.Widget` under any\n * layout manager. It specifies the dimensions of a widget, while the position\n * of the widget is left to the parent to decide. If a dimension (width or height)\n * is set to a value between -1 and 1, then it is interpreted as a percentage\n * of the parent's dimension.\n *\n * The following example will render a widget at 50% of the parent's width and 10px height:\n *\n * ```js\n * const widget = new PUXI.Widget();\n * const parent = new PUXI.Widget();\n *\n * widget.layoutOptions = new PUXI.LayoutOptions(\n * .5,\n * 10\n * );\n * parent.addChild(widget);\n * ```\n *\n * @memberof PUXI\n * @class\n */\nexport class LayoutOptions\n{\n public static FILL_PARENT = 0xfffffff1;\n public static WRAP_CONTENT = 0xfffffff2;\n public static MAX_DIMEN = 0xfffffff0;\n\n public static DEFAULT = new LayoutOptions();\n\n public width: number;\n public height: number;\n public cache: any;\n\n private _marginLeft: number;\n private _marginTop: number;\n private _marginRight: number;\n private _marginBottom: number;\n\n /**\n * @param {number}[width = LayoutOptions.WRAP_CONTENT]\n * @param {number}[height = LayoutOptions.WRAP_CONTENT]\n */\n constructor(width: number | string = LayoutOptions.WRAP_CONTENT, height: number | string = LayoutOptions.WRAP_CONTENT)\n {\n this.setWidth(width);\n this.setHeight(height);\n\n /**\n * Used by the layout manager to cache calculations.\n * @member {object}\n */\n this.cache = {};\n }\n\n /**\n * Utility method to store width that converts strings to their number format.\n *\n * @param {number | string} val\n * @example\n * ```\n * lopt.setWidth('68.7%');// 68.7% of parent's width\n * lopt.setWidth('96px');// 96px\n * lopt.setWidth(34);// 34px\n * lopt.setWidth(.45);// 45% of parent's width\n * ```\n */\n setWidth(val: number | string): void\n {\n /**\n * Preferred height of the widget in pixels. If its value is between -1 and 1, it\n * is interpreted as a percentage of the parent's height.\n * @member {number}\n * @default {PUXI.LayoutOptions.WRAP_CONTENT}\n */\n this.width = LayoutOptions.parseDimen(val);\n }\n\n /**\n * Utility method to store height that converts strings to their number format.\n *\n * @param {number | string} val\n * @example\n * ```\n * lopt.setHeight('68.7%');// 68.7% of parent's height\n * lopt.setHeight('96px');// 96px\n * lopt.setHeight(34);// 34px\n * lopt.setHeight(.45);// 45% of parent's height\n * ```\n */\n setHeight(val: number | string): void\n {\n /**\n * Preferred width of the widget in pixels. If its value is between -1 and 1, it\n * is interpreted as a percentage of the parent's width.\n * @member {number}\n * @default {PUXI.LayoutOptions.WRAP_CONTENT}\n */\n this.height = LayoutOptions.parseDimen(val);\n }\n\n /**\n * @member {boolean} - whether the specified width is a constant\n * (not a percentage, `WRAP_CONTENT`, or `FILL_PARENT`)\n */\n get isWidthPredefined(): boolean\n {\n return this.width > 1 && this.width <= LayoutOptions.MAX_DIMEN;\n }\n\n /**\n * @member {boolean} - whether the specified height is a constant\n * (not a percentage, `WRAP_CONTENT`, or `FILL_PARENT`)\n */\n get isHeightPredefined(): boolean\n {\n return this.height > 1 && this.height <= LayoutOptions.MAX_DIMEN;\n }\n\n /**\n * The left margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginLeft(): number\n {\n return this._marginLeft || 0;\n }\n set marginLeft(val: number)\n {\n this._marginLeft = val;\n }\n\n /**\n * This top margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginTop(): number\n {\n return this._marginTop || 0;\n }\n set marginTop(val: number)\n {\n this._marginTop = val;\n }\n\n /**\n * The right margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginRight(): number\n {\n return this._marginRight || 0;\n }\n set marginRight(val: number)\n {\n this._marginRight = val;\n }\n\n /**\n * The bottom margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginBottom(): number\n {\n return this._marginBottom || 0;\n }\n set marginBottom(val: number)\n {\n this._marginBottom = val;\n }\n\n /**\n * @param left\n * @param top\n * @param right\n * @param bottom\n */\n setMargin(left: number, top: number, right: number, bottom: number): void\n {\n this._marginLeft = left;\n this._marginTop = top;\n this._marginRight = right;\n this._marginBottom = bottom;\n }\n\n static parseDimen(val: number | string): number\n {\n if (typeof val === 'string')\n {\n if (val.endsWith('%'))\n {\n val = parseFloat(val.replace('%', '')) / 100;\n }\n else if (val.endsWith('px'))\n {\n val = parseFloat(val.replace('px', ''));\n }\n\n if (typeof val === 'string' || isNaN(val))\n {\n throw new Error('Width could not be parsed!');\n }\n }\n\n return val;\n }\n}\n","import { ALIGN } from './Align';\nimport { LayoutOptions } from './LayoutOptions';\n\ninterface IAnchorLayoutParams\n{\n anchorLeft?: number;\n anchorTop?: number;\n anchorRight?: number;\n anchorBottom?: number;\n horizontalAlign?: ALIGN;\n verticalAlign?: ALIGN;\n width: number | string;\n height: number | string;\n}\n\n/**\n * @memberof PUXI\n * @interface IAnchorLayoutParams\n * @property {number} anchorLeft - distance from parent's left inset to child's left edge\n * @property {number} anchorTop - distance from parent's top inset to child's top edge\n * @property {number} anchorRight - distance from parent's right inset to child's right edge\n * @property {number} anchorBottom - distance from parent's bottom insets to child's bottom edge\n * @property {PUXI.ALIGN} horizontalAlign - horizontal alignment of child in anchor region\n * @property {PUXI.ALIGN} verticalAlign - vertical alignment of child in anchor region\n * @property {number | string} width - requested width of widget (default is `WRAP_CONTENT`)\n * @property {number | string} height - requested height of widget (default is `WRAP_CONTENT`)\n */\n\n/**\n * Anchors the edge of a widget to defined offsets from the parent's insets.\n *\n * The following example will render a widget at (10px, 15%) with a width extending\n * to the parent's center and a height extending till 40px above the parent's bottom\n * inset.\n * ```js\n * new PUXI.AnchoredLayoutOptions({\n * anchorLeft: 10,\n * anchorTop: .15,\n * anchorRight: .5,\n * anchorBottom: 40\n * });\n * ```\n *\n * ### Intra-anchor region alignment\n *\n * You can specify how the widget should be aligned in the intra-anchor region using the\n * `horizontalAlign` and `verticalAlign` properties.\n *\n * ### Support for FILL_PARENT and percentage-of-parent dimensions\n *\n * Anchor layout does not support a width/height that is `LayoutOptions.FILL_PARENT`\n * or a percentage of the parent's width/height. Instead, you can define anchors that\n * result in the equivalent behaviour.\n *\n * @memberof PUXI\n * @extends PUXI.LayoutOptions\n * @class\n */\nexport class AnchorLayoutOptions extends LayoutOptions\n{\n public anchorLeft: number;\n public anchorTop: number;\n public anchorRight: number;\n public anchorBottom: number;\n\n public horizontalAlign: ALIGN;\n public verticalAlign: ALIGN;\n\n constructor(options: IAnchorLayoutParams)\n {\n super(options.width, options.height);\n\n this.anchorLeft = options.anchorLeft || 0;\n this.anchorTop = options.anchorTop || 0;\n this.anchorBottom = options.anchorBottom || 0;\n this.anchorRight = options.anchorRight || 0;\n\n this.horizontalAlign = options.horizontalAlign || ALIGN.LEFT;\n this.verticalAlign = options.verticalAlign || ALIGN.CENTER;\n }\n}\n","import { LayoutOptions } from './LayoutOptions';\nimport * as PIXI from 'pixi.js';\n\nexport interface IFastLayoutParams\n{\n width?: number | string;\n height?: number | string;\n x?: number;\n y?: number;\n anchor?: PIXI.Point;\n}\n\n/**\n * @memberof PUXI\n * @interface\n * @property {number} width\n * @property {number} height\n * @property {number} x\n * @property {number} y\n * @property {PIXI.Point} anchor\n */\n\n/**\n * `PUXI.FastLayoutOptions` is an extension to `PUXI.LayoutOptions` that also\n * defines the x & y coordinates. It is accepted by the stage and `PUXI.FastLayout`.\n *\n * If x or y is between -1 and 1, then that dimension will be interpreted as a\n * percentage of the parent's width or height.\n *\n * @memberof PUXI\n * @extends PUXI.LayoutOptions\n * @class\n */\nexport class FastLayoutOptions extends LayoutOptions\n{\n static DEFAULT_ANCHOR = new PIXI.Point(0, 0);\n static CENTER_ANCHOR = new PIXI.Point(0.5, 0.5);// fragile, shouldn't be modified\n\n x: number;\n y: number;\n anchor: PIXI.Point;\n\n constructor(options: IFastLayoutParams)\n {\n super(options.width, options.height);\n\n /**\n * X-coordinate of the widget in its parent's reference frame. If it is\n * absolutely less than 1, then it will be interpreted as a percent of\n * the parent's width.\n * @member {number}\n * @default 0\n */\n this.x = options.x || 0;\n\n /**\n * Y-coordinate of the widget in its parent's reference frame. If it is\n * absolutely less than 1, then it will be interpreted as a percent of\n * the parent's height.\n * @member {number}\n * @default 0\n */\n this.y = options.y || 0;\n\n /**\n * The anchor is a normalized point telling where the (x,y) position of the\n * widget lies inside of it. By default, it is (0, 0), which means that the\n * top-left corner of the widget will be at (x,y); however, setting it to\n * (.5,.5) will make the _center of the widget_ be at (x,y) in the parent's\n * reference frame.\n * @member {PIXI.Point}\n * @default PUXI.FastLayoutOptions.DEFAULT_ANCHOR\n */\n this.anchor = options.anchor || FastLayoutOptions.DEFAULT_ANCHOR.clone();\n }\n}\n","import { LayoutOptions } from './LayoutOptions';\nimport { ALIGN } from './Align';\n\nexport interface IBorderLayoutParams\n{\n width?: number;\n height?: number;\n region?: number;\n horizontalAlign?: ALIGN;\n verticalAlign?: ALIGN;\n}\n\n/**\n * @memberof PUXI\n * @interface IBorderLayoutParams\n * @property {number} width\n * @property {number} height\n * @property {number} region\n * @property {number} horizontalAlign\n * @property {number} verticalAlign\n */\n\n/**\n * `PUXI.BorderLayoutOptions` defines a simple layout with five regions - the center and\n * four regions along each border. The top and bottom regions span the full width of\n * the parent widget-group. The left and right regions span the height of the layout\n * minus the top and bottom region heights.\n *\n * ```\n * ------------------------------------------------\n * | TOP REGION |\n * ------------------------------------------------\n * | | | |\n * | LEFT | CENTER | RIGHT |\n * | REGION | REGION | REGION |\n * | | | |\n * ------------------------------------------------\n * | BOTTOM REGION |\n * ------------------------------------------------\n * ```\n *\n * The height of the layout is measured as the sum of the heights of the top, center, and bottom\n * regions. Similarly, the width of the layout is measured as the width of the left, center, and\n * right regions.\n *\n * As of now, border layout doesn't support percent widths and heights.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.LayoutOptions\n */\nexport class BorderLayoutOptions extends LayoutOptions\n{\n /**\n * Positions a widget inside the left border of the layout.\n * @static\n * @member {number}\n */\n static REGION_LEFT = 0xeff1;\n\n /**\n * Positions a widget below the top border of the layout.\n * @static\n * @member {number}\n */\n static REGION_TOP = 0xeff2;\n\n /**\n * Positions a widget below the right border of the layout.\n * @static\n * @member {number}\n */\n static REGION_RIGHT = 0xeff3;\n\n /**\n * Positions a widget below the top border of the layout.\n * @static\n * @member {number}\n */\n static REGION_BOTTOM = 0xeff4;\n\n /**\n * Positions a widget in the center of the layout. The main content of the layout\n * should be in the center.\n * @static\n * @member {number}\n */\n static REGION_CENTER = 0xeff5;\n\n region: number;\n horizontalAlign: number;\n verticalAlign: number;\n\n constructor(options: IBorderLayoutParams)\n {\n super(options.width, options.height);\n\n /**\n * The border along which the widget is to be placed. This can be one of `POS_LEFT`,\n * `POS_TOP`, `POS_RIGHT`, `POS_BOTTOM`.\n * @member {number}\n * @default {PUXI.BorderLayoutOptions#REGION_CENTER}\n */\n this.region = options.region || BorderLayoutOptions.REGION_CENTER;\n\n /**\n * Alignment of the widget horizontally in its region.\n * @member {PUXI.ALIGN}\n * @default {PUXI.ALIGN.LEFT}\n */\n this.horizontalAlign = options.horizontalAlign || ALIGN.LEFT;\n\n /**\n * Alignment of the widget vertically in its region.\n * @member {PUXI.ALIGN}\n * @default {PUXI.ALIGN.TOP}\n */\n this.verticalAlign = options.verticalAlign || ALIGN.TOP;\n }\n}\n","import { MeasureMode } from '../IMeasurable';\nimport { ILayoutManager } from './ILayoutManager';\nimport { LayoutOptions, FastLayoutOptions } from '../layout-options';\nimport { WidgetGroup } from '../WidgetGroup';\n\n/**\n * `PUXI.FastLayout` is used in conjunction with `PUXI.FastLayoutOptions`. It is the\n * default layout for most widget groups.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.ILayoutManager\n * @example\n * ```\n * parent.useLayout(new PUXI.FastLayout())\n * ```\n */\nexport class FastLayout implements ILayoutManager\n{\n private host: WidgetGroup;\n private _measuredWidth: number;\n private _measuredHeight: number;\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n }\n\n onLayout(): void\n {\n const parent = this.host;\n const { contentWidth: width, contentHeight: height, widgetChildren: children } = parent;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n\n let x = lopt.x ? lopt.x : 0;\n let y = lopt.y ? lopt.y : 0;\n\n if (Math.abs(x) < 1)\n {\n x *= width;\n }\n if (Math.abs(y) < 1)\n {\n y *= height;\n }\n\n const anchor = lopt.anchor || FastLayoutOptions.DEFAULT_ANCHOR;\n\n const l = x - (anchor.x * widget.getMeasuredWidth());\n const t = y - (anchor.y * widget.getMeasuredHeight());\n\n widget.layout(l, t,\n l + widget.getMeasuredWidth(),\n t + widget.getMeasuredHeight());\n }\n }\n\n onMeasure(maxWidth: number, maxHeight: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n // TODO: Passthrough optimization pass, if there is only one child with FILL_PARENT width or height\n // then don't measure twice.\n\n this._measuredWidth = maxWidth;\n this._measuredHeight = maxHeight;\n\n const children = this.host.widgetChildren;\n\n // Measure children\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n\n const loptWidth = (Math.abs(lopt.width) < 1) ? lopt.width * maxWidth : lopt.width;\n const loptHeight = (Math.abs(lopt.height) < 1) ? lopt.height * maxHeight : lopt.height;\n const widthMeasureMode = this.getChildMeasureMode(lopt.width, widthMode);\n const heightMeasureMode = this.getChildMeasureMode(lopt.height, heightMode);\n\n widget.measure(loptWidth, loptHeight, widthMeasureMode, heightMeasureMode);\n }\n\n this._measuredWidth = this.measureWidthReach(maxWidth, widthMode);\n this._measuredHeight = this.measureHeightReach(maxHeight, heightMode);\n\n this.measureChildFillers();\n }\n\n private getChildMeasureMode(dimen: number, parentMeasureMode: MeasureMode): MeasureMode\n {\n if (dimen === LayoutOptions.WRAP_CONTENT)\n {\n // No MeasureMode.EXACTLY!\n return parentMeasureMode === MeasureMode.UNBOUNDED ? MeasureMode.UNBOUNDED : MeasureMode.AT_MOST;\n }\n\n return parentMeasureMode;\n }\n\n private measureWidthReach(parentWidthLimit: number, widthMode: MeasureMode): number\n {\n if (widthMode === MeasureMode.EXACTLY)\n {\n return parentWidthLimit;\n }\n\n const children = this.host.widgetChildren;\n let measuredWidth = 0;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const childWidth = widget.getMeasuredWidth();\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n const x = lopt.x ? lopt.x : 0;\n const anchor = lopt.anchor ? lopt.anchor : FastLayoutOptions.DEFAULT_ANCHOR;\n\n // If lopt.x is %, then (1 - lopt.x)% of parent width should be as large\n // as (1 - anchor.x)% child's width.\n const minr = (Math.abs(x) < 1 ? (1 - anchor.x) * childWidth / (1 - x) : x + childWidth);\n\n measuredWidth = Math.max(measuredWidth, minr);\n }\n\n if (widthMode === MeasureMode.AT_MOST)\n {\n measuredWidth = Math.min(parentWidthLimit, measuredWidth);\n }\n\n return measuredWidth;\n }\n\n private measureHeightReach(parentHeightLimit: number, heightMode: MeasureMode): number\n {\n if (heightMode === MeasureMode.EXACTLY)\n {\n return parentHeightLimit;\n }\n\n const children = this.host.widgetChildren;\n let measuredHeight = 0;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const childHeight = widget.getMeasuredHeight();\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n const y = lopt.y ? lopt.y : 0;\n const anchor = lopt.anchor ? lopt.anchor : FastLayoutOptions.DEFAULT_ANCHOR;\n\n const minb = (Math.abs(y) < 1 ? (1 - anchor.y) * childHeight / (1 - y) : y + childHeight);\n\n measuredHeight = Math.max(measuredHeight, minb);\n }\n\n if (heightMode === MeasureMode.AT_MOST)\n {\n measuredHeight = Math.min(parentHeightLimit, measuredHeight);\n }\n\n return measuredHeight;\n }\n\n private measureChildFillers(): void\n {\n const children = this.host.widgetChildren;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n let loptWidth = (Math.abs(lopt.width) < 1) ? lopt.width * this._measuredWidth : lopt.width;\n let loptHeight = (Math.abs(lopt.height) < 1) ? lopt.height * this._measuredHeight : lopt.height;\n\n if (loptWidth === LayoutOptions.WRAP_CONTENT)\n {\n loptWidth = widget.getMeasuredWidth();\n }\n if (loptHeight === LayoutOptions.WRAP_CONTENT)\n {\n loptHeight = widget.getMeasuredHeight();\n }\n\n if (lopt.width === LayoutOptions.FILL_PARENT || lopt.height === LayoutOptions.FILL_PARENT)\n {\n widget.measure(\n lopt.width === LayoutOptions.FILL_PARENT ? this._measuredWidth : loptWidth,\n lopt.height === LayoutOptions.FILL_PARENT ? this._measuredHeight : loptHeight,\n MeasureMode.EXACTLY,\n MeasureMode.EXACTLY,\n );\n }\n }\n }\n\n getMeasuredWidth(): number\n {\n return this._measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this._measuredHeight;\n }\n}\n","import { Widget } from './Widget';\nimport { ILayoutManager } from './layout-manager/ILayoutManager';\nimport { MeasureMode } from './IMeasurable';\nimport { FastLayout } from './layout-manager/FastLayout';\n\n/**\n * A widget group is a layout owner that can position its children according\n * to the layout given to it.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n * @example\n * ```\n * const group = new PUXI.InteractiveGroup();\n *\n * group.useLayout(new PUXI.AnchorLayout());\n *\n * group.addChild(new PUXI.Button({ text: \"Hey\" })\n * .setLayoutOptions(\n * new PUXI.AnchorLayoutOptions({\n * anchorLeft: 100,\n * anchorTop: 300,\n * anchorRight: .4,\n * anchorBottom: 500,\n * horizontalAlign: PUXI.ALIGN.CENTER\n * })\n * )\n * )\n * ```\n */\nexport class WidgetGroup extends Widget\n{\n public layoutMgr: ILayoutManager;// lazily initialized (via useLayout(), useDefaultLayout())\n\n /**\n * Will set the given layout-manager to be used for positioning child widgets.\n *\n * @param {PUXI.ILayoutManager} layoutMgr\n */\n useLayout(layoutMgr: ILayoutManager): WidgetGroup\n {\n if (this.layoutMgr)\n {\n this.layoutMgr.onDetach();\n }\n\n this.layoutMgr = layoutMgr;\n\n if (layoutMgr)\n {\n this.layoutMgr.onAttach(this);\n }\n\n return this;\n }\n\n /**\n * Sets the widget-recommended layout manager. By default (if not overriden by widget\n * group class), this is a fast-layout.\n */\n useDefaultLayout(): void\n {\n this.useLayout(new FastLayout());\n }\n\n onMeasure(width: number, height: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n super.onMeasure(width, height, widthMode, heightMode);\n\n if (this.widgetChildren.length === 0)\n {\n return;\n }\n if (!this.layoutMgr)\n {\n this.useDefaultLayout();\n }\n\n this.layoutMgr.onMeasure(width - this.paddingHorizontal, height - this.paddingVertical, widthMode, heightMode);\n\n this._measuredWidth = Math.max(this.measuredWidth, this.layoutMgr.getMeasuredWidth());\n this._measuredHeight = Math.max(this.measuredHeight, this.layoutMgr.getMeasuredHeight());\n }\n\n onLayout(l: number, t: number, r: number, b: number, dirty = true): void\n {\n super.onLayout(l, t, r, b, dirty);\n\n if (this.widgetChildren.length === 0)\n {\n return;\n }\n if (!this.layoutMgr)\n {\n this.useDefaultLayout();\n }\n\n this.layoutMgr.onLayout();// layoutMgr is attached to this\n }\n}\n","import { WidgetGroup } from './WidgetGroup';\nimport * as PIXI from 'pixi.js';\n\n/**\n * An interactive container.\n *\n * @class\n * @extends PUXI.WidgetGroup\n * @memberof PUXI\n */\nexport class InteractiveGroup extends WidgetGroup\n{\n private hitArea: PIXI.Rectangle;\n\n constructor()\n {\n super();\n this.hitArea = new PIXI.Rectangle();\n this.insetContainer.hitArea = this.hitArea;\n }\n\n update(): void\n {\n super.update();\n }\n\n layout(l: number, t: number, r: number, b: number, dirty: boolean): void\n {\n super.layout(l, t, r, b, dirty);\n\n this.hitArea.width = this.width;\n this.hitArea.height = this.height;\n }\n}\n\n","import * as PIXI from 'pixi.js';\nimport { TabGroup, FocusController } from './ctl/FocusController';\nimport { InteractiveGroup } from './InteractiveGroup';\nimport { IFocusable } from './IFocusable';\n\n/**\n * @namespace PUXI\n * @interface\n * @property {PIXI.Container}[background]\n * @property {number}[tabIndex]\n * @property {PUXI.TabGroup}[tabGroup]\n */\nexport interface IFocusableOptions\n{\n background?: PIXI.Container;\n tabIndex?: number;\n tabGroup?: any;\n focusController?: FocusController;\n}\n\n/**\n * Represents a view that can gain or loose focus. It is primarily subclassed by\n * input/form widgets.\n *\n * Generally, it is a good idea not use layouts on these types of widgets.\n *\n * @class\n * @extends PUXI.Widget\n * @memberof PUXI\n */\nexport abstract class FocusableWidget extends InteractiveGroup implements IFocusable\n{\n _isFocused: boolean;\n _isMousePressed: boolean;\n _focusController: FocusController;\n\n tabIndex: number;\n tabGroup: TabGroup;\n\n\n /**\n * @param {PUXI.IInputBaseOptions} options\n * @param {PIXI.Container}[options.background]\n * @param {number}[options.tabIndex]\n * @param {any}[options.tabGroup]\n */\n constructor(options: IFocusableOptions = {})\n {\n super();\n\n if (options.background)\n {\n super.setBackground(options.background);\n }\n\n // for detached context (from stage)\n if (options.focusController)\n {\n this._focusController = options.focusController\n }\n\n // Prevents double focusing/blurring.\n this._isFocused = false;\n\n // Used to lose focus when mouse-down outside widget.\n this._isMousePressed = false;\n\n this.interactive = true;\n\n /**\n * @member {number}\n * @readonly\n */\n this.tabIndex = options.tabIndex;\n\n /**\n * The name of the tab group in which this widget's focus will move on\n * pressing tab.\n * @member {PUXI.TabGroup}\n * @readonly\n */\n this.tabGroup = options.tabGroup;\n\n this.insetContainer.on('pointerdown', (ev: PIXI.interaction.InteractionEvent) =>\n {\n this.focus(ev);\n this._isMousePressed = true;\n });\n\n this.insetContainer.on('pointerup', () => { this._isMousePressed = false; });\n this.insetContainer.on('pointerupoutside', () => { this._isMousePressed = false; });\n }\n\n /**\n * Brings this widget into focus.\n */\n focus(ev?: PIXI.interaction.InteractionEvent): void\n {\n if (this.isFocused)\n {\n return;\n }\n\n this.focusController.notifyFocus(this);\n\n this._isFocused = true;\n this.bindEvents();\n\n this.emit('focusChanged', true);\n this.emit('focus');\n }\n\n /**\n * Brings this widget out of focus.\n */\n blur(): void\n {\n if (!this._isFocused)\n {\n return;\n }\n\n this.focusController.notifyBlur();\n\n this._isFocused = false;\n this.clearEvents();\n\n this.emit('focusChanged', false);\n this.emit('blur');\n }\n\n /**\n * Whether this widget is in focus.\n * @member {boolean}\n * @readonly\n */\n get isFocused(): boolean\n {\n return this._isFocused;\n }\n\n private bindEvents = (): void =>\n {\n this.stage.on('pointerdown', this.onDocumentPointerDownImpl);\n document.addEventListener('keydown', this.onKeyDownImpl);\n };\n\n private clearEvents = (): void =>\n {\n this.stage.off('pointerdown', this.onDocumentPointerDownImpl);\n document.removeEventListener('keydown', this.onKeyDownImpl);\n };\n\n protected onKeyDownImpl = (e: any): void =>\n {\n const focusCtl = this.stage.focusController;\n\n if (e.which === 9 && focusCtl.useTab)\n {\n focusCtl.onTab();\n e.preventDefault();\n }\n else if (e.which === 38 && focusCtl.useBack)\n {\n focusCtl.onBack();\n e.preventDefault();\n }\n else if (e.which === 40 && focusCtl.useForward)\n {\n focusCtl.onForward();\n e.preventDefault();\n }\n\n this.emit('keydown');\n };\n\n private onDocumentPointerDownImpl = (): void =>\n {\n if (!this._isMousePressed)\n {\n this.blur();\n }\n };\n\n initialize(): void\n {\n super.initialize();\n this.focusController.in(this, this.tabIndex, this.tabGroup);\n }\n\n /**\n * Fired when the widget comes into focus.\n * @event focus\n */\n\n /**\n * Fired when the widget goes out of focus.\n * @event blur\n */\n\n /**\n * Fired when the widgets comes into or goes out of focus.\n * @event focusChanged\n * @param {boolean} isFocused - whether the widget is in focus.\n */\n\n protected get focusController() {\n return this._focusController || this.stage.focusController\n }\n}\n","import { Widget, TEXT_STYLE_PROPERTIES } from './Widget';\nimport * as PIXI from 'pixi.js';\nimport { Style } from './Style';\n\n/**\n * A static text widget. It cannot retain children.\n *\n * @memberof PUXI\n * @public\n */\nexport class TextWidget extends Widget\n{\n public textDisplay: PIXI.Text;\n\n /**\n * @param {string} text - text content\n * @param {PIXI.TextStyle} textStyle - styled used for text\n */\n constructor(text: string, textStyle?: PIXI.TextStyle)\n {\n super();\n\n this.textDisplay = new PIXI.Text(text, textStyle);\n this.contentContainer.addChild(this.textDisplay);\n }\n\n update(): void\n {\n super.update();\n\n const fill = this.textDisplay.style.fill\n if (!this.tint && typeof(fill) == \"string\" && fill.startsWith(\"#\")) {\n this.tint = parseInt(fill.slice(1), 16)\n }\n\n if (this.tint !== null)\n {\n this.textDisplay.tint = this.tint;\n this.textDisplay.style.fill = this.tint;\n }\n\n if (this.blendMode !== null)\n {\n this.textDisplay.blendMode = this.blendMode;\n }\n }\n\n /**\n * @deprecated\n */\n get value(): string\n {\n return this.textDisplay.text;\n }\n set value(val: string)\n {\n this.textDisplay.text = val;\n }\n\n get text(): string\n {\n return this.value;\n }\n set text(val: string)\n {\n this.value = val;\n }\n\n /**\n * Get the text style. You can set properties directly on the style.\n */\n getTextStyle(): PIXI.TextStyle\n {\n return this.textDisplay.style;\n }\n\n /**\n * Set the text style directly\n *\n * @param textStyle\n * @example\n * textWidget.setTextStyle({\n * fontFamily: 'Roboto',\n * fontSize: 14\n * })\n */\n setTextStyle(textStyle: PIXI.TextStyle): this\n {\n this.textDisplay.style = textStyle;\n\n return this;\n }\n\n protected onStyleChange(style: Style): void\n {\n super.onStyleChange(style);\n\n const styleData = style.getProperties(...TEXT_STYLE_PROPERTIES);\n const textStyle = this.textDisplay.style;\n\n TEXT_STYLE_PROPERTIES.forEach((propName: string) =>\n {\n if (styleData[propName] !== undefined)\n {\n textStyle[propName] = styleData[propName];\n }\n });\n }\n}\n","import { ClickManager } from './event/ClickManager';\nimport { FocusableWidget, IFocusableOptions } from './FocusableWidget';\nimport { TextWidget } from './TextWidget';\nimport * as PIXI from 'pixi.js';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { Style } from './Style';\n\n/**\n * @memberof PUXI\n * @interface\n * @extends PUXI.IFocusableOptions\n * @property {PUXI.TextWidget | string} text\n */\nexport interface IButtonOptions extends IFocusableOptions\n{\n background?: PIXI.Container;\n text?: TextWidget | string;\n tabIndex?: number;\n tabGroup?: any;\n}\n\n/**\n * Button that can be clicked.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.FocusableWidget\n */\nexport class Button extends FocusableWidget\n{\n isHover: boolean;\n\n protected textWidget: TextWidget;\n\n click: () => void;\n /**\n * @param [options.background}] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for Button\n * @param [options.text=null] {PIXI.UI.Text} optional text\n * @param [options.tabIndex=0] {Number} input tab index\n * @param [options.tabGroup=0] {Number|String} input tab group\n * @param [options.width=options.background.width] {Number|String} width\n * @param [options.height=options.background.height] {Number|String} height\n */\n constructor(options: IButtonOptions)\n {\n super(options);\n\n this.isHover = false;\n\n if (typeof options.text === 'string')\n {\n options.text = new TextWidget(options.text, new PIXI.TextStyle());\n }\n\n this.textWidget = options.text.setLayoutOptions(\n new FastLayoutOptions({\n width: LayoutOptions.WRAP_CONTENT,\n height: LayoutOptions.WRAP_CONTENT,\n x: 0.5,\n y: 0.5,\n anchor: FastLayoutOptions.CENTER_ANCHOR,\n }),\n ) as TextWidget;\n\n if (this.textWidget)\n {\n this.addChild(this.textWidget);\n }\n\n this.contentContainer.buttonMode = true;\n }\n\n onClick(e: PIXI.InteractionEvent): void\n {\n super.onClick(e);\n\n this.emit('click', e);\n }\n\n onDoubleClick(e: PIXI.InteractionEvent): void\n {\n super.onDoubleClick(e);\n\n this.emit('doubleclick', e);\n }\n\n update(): void\n {\n super.update();\n // No update needed\n }\n\n initialize(): void\n {\n super.initialize();\n\n this.insetContainer.interactiveChildren = false;\n // lazy to make sure all children is initialized (trying to get the bedst hitArea possible)\n }\n\n /**\n * Label for this button.\n * @member {string}\n */\n get value(): string\n {\n if (this.textWidget)\n {\n return this.textWidget.text;\n }\n\n return '';\n }\n set value(val: string)\n {\n if (this.textWidget)\n {\n this.textWidget.text = val;\n }\n }\n\n get text(): any\n {\n return this.textWidget;\n }\n set text(val: any)\n {\n this.value = val;\n }\n\n onStyleChange(style: Style): void\n {\n // eslint-disable-next-line\n // @ts-ignore\n this.textWidget.onStyleChange(style);\n }\n}\n\n/*\n * Features:\n * Button, radio button (checkgroups)\n *\n * Methods:\n * blur()\n * focus()\n *\n * Properties:\n * checked: get/set Button checked\n * value: get/set Button value\n *\n * Events:\n * \"hover\" param: [bool]isHover (hover/leave)\n * \"press\" param: [bool]isPressed (pointerdown/pointerup)\n * \"click\"\n * \"blur\"\n * \"focus\"\n * \"focusChanged\" param: [bool]isFocussed\n *\n */\n","import { FocusableWidget, IFocusableOptions } from './FocusableWidget';\nimport { ClickManager } from './event/ClickManager';\nimport { InteractiveGroup } from './InteractiveGroup';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { CheckGroup } from './ctl';\nimport { TextWidget } from './TextWidget';\n\ninterface ICheckBoxOptions extends IFocusableOptions\n{\n checked?: boolean;\n background: PIXI.Container;\n checkmark?: PIXI.Container;\n checkGroup?: CheckGroup;\n value?: string;\n tabIndex?: number;\n tabGroup?: number;\n}\n\n/**\n * @memberof PUXI\n * @extends PUXI.IFocusableOptions\n * @member {boolean} checked\n * @member {PIXI.Container}[checkmark]\n * @member {PUXI.CheckGroup}[checkGroup]\n * @member {string}[value]\n */\n\n/**\n * A checkbox is a button can be selected (checked). It has a on/off state that\n * can be controlled by the user.\n *\n * When used in a checkbox group, the group will control whether the checkbox can\n * be selected or not.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.FocusableWidget\n */\nexport class CheckBox extends FocusableWidget\n{\n private _checked: boolean;\n private _value: string;\n\n private label: TextWidget;\n private checkmark: InteractiveGroup;\n\n checkGroup: CheckGroup;\n\n /**\n * @param {PUXI.ICheckBoxOptions} options\n * @param [options.checked=false] {bool} is checked\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for CheckBox\n * @param options.checkmark {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as checkmark for CheckBox\n * @param {PUXI.CheckGroup}[options.checkGroup=null] CheckGroup name\n * @param options.value {String} mostly used along with checkgroup\n * @param [options.tabIndex=0] {Number} input tab index\n * @param [options.tabGroup=0] {Number|String} input tab group\n */\n constructor(options: ICheckBoxOptions)\n {\n super(options);\n this._checked = options.checked !== undefined ? options.checked : false;\n this._value = options.value || '';\n this.checkGroup = options.checkGroup || null;\n\n this.checkmark = new InteractiveGroup();\n this.checkmark.contentContainer.addChild(options.checkmark);\n this.checkmark.setLayoutOptions(\n new FastLayoutOptions({\n width: LayoutOptions.WRAP_CONTENT,\n height: LayoutOptions.WRAP_CONTENT,\n x: 0.5,\n y: 0.5,\n anchor: FastLayoutOptions.CENTER_ANCHOR,\n }),\n );\n this.checkmark.alpha = this._checked ? 1 : 0;\n this.addChild(this.checkmark);\n\n this.contentContainer.buttonMode = true;\n }\n\n update(): void\n {\n // No need for updating\n }\n\n get checked(): boolean\n {\n return this._checked;\n }\n set checked(val: boolean)\n {\n if (val !== this._checked)\n {\n if (this.checkGroup !== null && val)\n {\n this.stage.checkBoxGroupController.notifyCheck(this);\n }\n\n this._checked = val;\n this.change(val);\n }\n }\n\n get value(): string\n {\n return this._value;\n }\n set value(val: string)\n {\n this._value = val;\n\n if (this.checked)\n {\n this.stage.checkBoxGroupController.notifyCheck(this);\n }\n }\n\n get selectedValue(): string\n {\n return this.stage\n ?.checkBoxGroupController\n .getSelected(this.checkGroup)\n .value;\n }\n\n initialize(): void\n {\n super.initialize();\n\n const clickMgr = (this.eventBroker.click as ClickManager);\n\n clickMgr.onHover = (_, over): void =>\n {\n this.emit('hover', over);\n };\n\n clickMgr.onPress = (e, isPressed): void =>\n {\n if (isPressed)\n {\n this.focus();\n e.data.originalEvent.preventDefault();\n }\n\n this.emit('press', isPressed);\n };\n\n clickMgr.onClick = (): void =>\n {\n this.click();\n };\n\n if (this.checkGroup !== null)\n {\n this.stage.checkBoxGroupController.in(this, this.checkGroup);\n }\n }\n\n protected change = (val: boolean): void =>\n {\n if (this.checkmark)\n {\n this.checkmark.alpha = val ? 1 : 0;\n }\n };\n\n protected click = (): void =>\n {\n this.emit('click');\n\n if (this.checkGroup !== null && this.checked)\n {\n return;\n }\n\n this.checked = !this.checked;\n this.emit('changed', this.checked);\n };\n\n /**\n * This event is fired when the user's cursor hovers over this checkbox.\n * @event hover\n */\n\n /**\n * This event is fired when the user clicks on the checkbox, regardless of whether\n * the checkbox was selected or deselected.\n * @event click\n */\n\n /**\n * This event is fired when the user selects/deselects the checkbox, i.e. the \"value\"\n * of the checkbox changes. This is also fired when setting the `checked` property\n * directly.\n * @event changed\n * @param {boolean} checked - whether the checkbox is checked\n */\n}\n\n/*\n * Features:\n * checkbox, radio button (checkgroups)\n *\n * Methods:\n * blur()\n * focus()\n * change(checked) //only exposed to overwrite (if you dont want to hard toggle alpha of checkmark)\n *\n * Properties:\n * checked: get/set checkbox checked\n * value: get/set checkbox value\n * selectedValue: get/set selected value for checkgroup\n *\n * Events:\n * \"hover\" param: [bool]isHover (hover/leave)\n * \"press\" param: [bool]isPressed (pointerdown/pointerup)\n * \"click\"\n * \"blur\"\n * \"focus\"\n * \"focusChanged\" param: [bool]isFocussed\n * \"change\" param: [bool]isChecked\n *\n */\n","class EaseBase\n{\n getPosition(p)\n {\n return p;\n }\n}\n\nexport { EaseBase };\n","import { EaseBase } from './EaseBase';\n\nfunction ExponentialEase(power, easeIn, easeOut)\n{\n const pow = power;\n const t = easeIn && easeOut ? 3 : easeOut ? 1 : 2;\n\n this.getPosition = function (p)\n {\n let r = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\n if (pow === 1)\n {\n r *= r;\n }\n else if (pow === 2)\n {\n r *= r * r;\n }\n else if (pow === 3)\n {\n r *= r * r * r;\n }\n else if (pow === 4)\n {\n r *= r * r * r * r;\n }\n\n return (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n };\n}\n\nExponentialEase.prototype = Object.create(EaseBase.prototype);\nExponentialEase.prototype.constructor = ExponentialEase;\n\nexport { ExponentialEase };\n\n","import { EaseBase } from './EaseBase';\nimport { ExponentialEase } from './ExponentialEase';\n\nconst Ease = {};\n\nconst HALF_PI = Math.PI * 0.5;\n\nexport function create(fn)\n{\n const e = Object.create(EaseBase.prototype);\n\n e.getPosition = fn;\n\n return e;\n}\n\nconst Linear = new EaseBase();\n\n// Liear\nEase.Linear = Linear;\n\n// Exponetial Eases\nexport function wrapEase(easeInFunction, easeOutFunction, easeInOutFunction)\n{\n return {\n easeIn: easeInFunction,\n easeOut: easeOutFunction,\n easeInOut: easeInOutFunction,\n };\n}\n\nEase.Power0 = {\n easeNone: Linear,\n};\n\nEase.Power1 = Ease.Quad = wrapEase(\n new ExponentialEase(1, 1, 0),\n new ExponentialEase(1, 0, 1),\n new ExponentialEase(1, 1, 1));\n\nEase.Power2 = Ease.Cubic = wrapEase(\n new ExponentialEase(2, 1, 0),\n new ExponentialEase(2, 0, 1),\n new ExponentialEase(2, 1, 1));\n\nEase.Power3 = Ease.Quart = wrapEase(\n new ExponentialEase(3, 1, 0),\n new ExponentialEase(3, 0, 1),\n new ExponentialEase(3, 1, 1));\n\nEase.Power4 = Ease.Quint = wrapEase(\n new ExponentialEase(4, 1, 0),\n new ExponentialEase(4, 0, 1),\n new ExponentialEase(4, 1, 1));\n\n// Bounce\nEase.Bounce = {\n BounceIn: create(function (p)\n {\n if ((p = 1 - p) < 1 / 2.75)\n {\n return 1 - (7.5625 * p * p);\n }\n else if (p < 2 / 2.75)\n {\n return 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\n }\n else if (p < 2.5 / 2.75)\n {\n return 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\n }\n\n return 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\n }),\n BounceOut: create(function (p)\n {\n if (p < 1 / 2.75)\n {\n return 7.5625 * p * p;\n }\n else if (p < 2 / 2.75)\n {\n return 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n }\n else if (p < 2.5 / 2.75)\n {\n return 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n }\n\n return 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n }),\n BounceInOut: create(function (p)\n {\n const invert = (p < 0.5);\n\n if (invert)\n {\n p = 1 - (p * 2);\n }\n else\n {\n p = (p * 2) - 1;\n }\n if (p < 1 / 2.75)\n {\n p = 7.5625 * p * p;\n }\n else if (p < 2 / 2.75)\n {\n p = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n }\n else if (p < 2.5 / 2.75)\n {\n p = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n }\n else\n {\n p = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n }\n\n return invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\n }),\n};\n\n// Circ\nEase.Circ = {\n CircIn: create(function (p)\n {\n return -(Math.sqrt(1 - (p * p)) - 1);\n }),\n CircOut: create(function (p)\n {\n return Math.sqrt(1 - (p = p - 1) * p);\n }),\n CircInOut: create(function (p)\n {\n return ((p *= 2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\n }),\n};\n\n// Expo\nEase.Expo = {\n ExpoIn: create(function (p)\n {\n return Math.pow(2, 10 * (p - 1)) - 0.001;\n }),\n ExpoOut: create(function (p)\n {\n return 1 - Math.pow(2, -10 * p);\n }),\n ExpoInOut: create(function (p)\n {\n return ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n }),\n};\n\n// Sine\nEase.Sine = {\n SineIn: create(function (p)\n {\n return -Math.cos(p * HALF_PI) + 1;\n }),\n SineOut: create(function (p)\n {\n return Math.sin(p * HALF_PI);\n }),\n SineInOut: create(function (p)\n {\n return -0.5 * (Math.cos(Math.PI * p) - 1);\n }),\n};\n\nexport { Ease };\n","export const Helpers = {\n Lerp(start: number, stop: number, amt: number): number\n {\n if (amt > 1) amt = 1;\n else if (amt < 0) amt = 0;\n\n return start + (stop - start) * amt;\n },\n Round(number: number, decimals: number): number\n {\n const pow = Math.pow(10, decimals);\n\n return Math.round(number * pow) / pow;\n },\n componentToHex(c: any): string\n {\n const hex = c.toString(16);\n\n return hex.length == 1 ? `0${hex}` : hex;\n },\n rgbToHex(r: number, g: number, b: number): string\n {\n return `#${this.componentToHex(r)}${this.componentToHex(g)}${this.componentToHex(b)}`;\n },\n rgbToNumber(r: number, g: number, b: number): number\n {\n return r * 65536 + g * 256 + b;\n },\n numberToRgb(c: number): any\n {\n return {\n r: Math.floor(c / (256 * 256)),\n g: Math.floor(c / 256) % 256,\n b: c % 256,\n };\n },\n hexToRgb(hex: any): any\n {\n if (hex === null)\n {\n hex = 0xffffff;\n }\n if (!isNaN(hex))\n {\n return this.numberToRgb(hex);\n }\n\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n\n hex = hex.replace(shorthandRegex, function (m, r, g, b)\n {\n return r + r + g + g + b + b;\n });\n\n const result = (/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i).exec(hex);\n\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n } : null;\n },\n};\n","import { Widget } from './Widget';\nimport * as PIXI from 'pixi.js';\n\n/**\n * An UI sprite object\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n */\nexport class Sprite extends Widget\n{\n private spriteDisplay: PIXI.Sprite;\n\n constructor(texture: PIXI.Texture)\n {\n super();\n\n this.spriteDisplay = new PIXI.Sprite(texture);\n this.contentContainer.addChild(this.spriteDisplay);\n }\n\n update(): void\n {\n if (this.tint !== null)\n {\n this.spriteDisplay.tint = this.tint;\n }\n\n if (this.blendMode !== null)\n {\n this.spriteDisplay.blendMode = this.blendMode;\n }\n }\n\n static fromImage(imageUrl): Sprite\n {\n return new Sprite(new PIXI.Texture(new PIXI.BaseTexture(imageUrl)));\n }\n}\n\nexport type ImageWidget = Sprite;\nexport const ImageWidget = Sprite;\n","import { ILayoutManager } from './ILayoutManager';\nimport { Widget } from '../Widget';\nimport { AnchorLayoutOptions, ALIGN, LayoutOptions } from '../layout-options';\nimport { MeasureMode } from '../IMeasurable';\nimport { WidgetGroup } from '../WidgetGroup';\n\ninterface IAnchorCache {\n remeasure: boolean;\n}\n\n/**\n * `AnchorLayout` is used in conjunction with `AnchorLayoutOptions`.\n *\n * @memberof PUXI\n * @class\n * @example\n * ```\n * parent.useLayout(new PUXI.AnchorLayout());\n * ```\n */\nexport class AnchorLayout implements ILayoutManager\n{\n private measuredWidth: number;\n private measuredHeight: number;\n\n private host: WidgetGroup;\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n }\n\n onLayout(): void\n {\n const parent = this.host;\n const { widgetChildren } = parent;\n\n const parentWidth = parent.contentWidth;\n const parentHeight = parent.contentHeight;\n\n for (let i = 0; i < widgetChildren.length; i++)\n {\n const child = widgetChildren[i];\n const layoutOptions = (child.layoutOptions || {}) as AnchorLayoutOptions;\n\n const childWidth = child.getMeasuredWidth();\n const childHeight = child.getMeasuredHeight();\n const anchorLeft = this.calculateAnchor(layoutOptions.anchorLeft || 0, parentWidth, false);\n const anchorTop = this.calculateAnchor(layoutOptions.anchorTop || 0, parentHeight, false);\n const anchorRight = this.calculateAnchor(layoutOptions.anchorRight || 0, parentWidth, true);\n const anchorBottom = this.calculateAnchor(layoutOptions.anchorBottom || 0, parentHeight, true);\n\n let x = anchorLeft;\n let y = anchorTop;\n\n switch (layoutOptions.horizontalAlign)\n {\n case ALIGN.MIDDLE:\n x = (anchorRight + anchorLeft - childWidth) / 2;\n break;\n case ALIGN.RIGHT:\n x = anchorRight - childWidth;\n break;\n }\n\n switch (layoutOptions.verticalAlign)\n {\n case ALIGN.MIDDLE:\n y = (anchorBottom + anchorTop - childHeight) / 2;\n break;\n case ALIGN.BOTTOM:\n y = anchorBottom - childHeight;\n break;\n }\n\n child.layout(x, y, x + childWidth, y + childHeight);\n }\n }\n\n onMeasure(widthLimit: number, heightLimit: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n const children = this.host.widgetChildren;\n\n let naturalWidth = 0;\n let naturalHeight = 0;\n\n const baseWidthMode = widthMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n const baseHeightMode = heightMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : heightMode;\n\n let hasFillers = false;\n\n // First pass: measure children and find our natural width/height. If we have a upper\n // limit, then pass that on.\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as AnchorLayoutOptions;\n\n if (lopt.width === LayoutOptions.FILL_PARENT)\n {\n throw new Error('AnchorLayout does not support width = FILL_PARENT. Use anchorLeft = 0 & anchorRight = 0');\n }\n if (lopt.height === LayoutOptions.FILL_PARENT)\n {\n throw new Error('AnchorLayout does not support height = FILL_PARENT. Use anchorTop = 0 & anchorBottom = 0');\n }\n\n const anchorLeft = this.calculateAnchor(lopt.anchorLeft || 0, widthLimit, false);\n const anchorTop = this.calculateAnchor(lopt.anchorTop || 0, heightLimit, false);\n const anchorRight = this.calculateAnchor(lopt.anchorRight || 0, widthLimit, true);\n const anchorBottom = this.calculateAnchor(lopt.anchorBottom || 0, heightLimit, true);\n\n // Does child have a pre-determined width or height?\n const widthConst = lopt.isWidthPredefined;\n const heightConst = lopt.isHeightPredefined;\n const widgetWidthLimit = widthConst ? lopt.width : anchorRight - anchorLeft;\n const widgetHeightLimit = heightConst ? lopt.height : anchorBottom - anchorTop;\n\n const widgetWidthMode = widthConst ? MeasureMode.EXACTLY : baseWidthMode;\n const widgetHeightMode = heightConst ? MeasureMode.EXACTLY : baseHeightMode;\n\n // Fillers need to be remeasured using EXACTLY.\n hasFillers = hasFillers || lopt.width === 0 || lopt.height === 0;\n\n widget.measure(widgetWidthLimit, widgetHeightLimit, widgetWidthMode, widgetHeightMode);\n\n const horizontalReach = this.calculateReach(\n lopt.anchorLeft || 0, lopt.anchorRight || 0, widget.getMeasuredWidth());\n const verticalReach = this.calculateReach(\n lopt.anchorTop || 0, lopt.anchorBottom || 0, widget.getMeasuredHeight());\n\n naturalWidth = Math.max(naturalWidth, horizontalReach);\n naturalHeight = Math.max(naturalHeight, verticalReach);\n }\n\n this.measuredWidth = Widget.resolveMeasuredDimen(naturalWidth, widthLimit, widthMode);\n this.measuredHeight = Widget.resolveMeasuredDimen(naturalHeight, heightLimit, heightMode);\n\n if (!hasFillers)\n {\n return;\n }\n\n // Handle fillers.\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as AnchorLayoutOptions;\n\n if (lopt.width === 0 || lopt.height === 0)\n {\n const anchorLeft = this.calculateAnchor(lopt.anchorLeft || 0, this.measuredWidth, false);\n const anchorTop = this.calculateAnchor(lopt.anchorTop || 0, this.measuredHeight, false);\n const anchorRight = this.calculateAnchor(lopt.anchorRight || 0, this.measuredWidth, true);\n const anchorBottom = this.calculateAnchor(lopt.anchorBottom || 0, this.measuredHeight, true);\n\n widget.measure(\n lopt.isWidthPredefined ? lopt.width : anchorRight - anchorLeft,\n lopt.isHeightPredefined ? lopt.height : anchorBottom - anchorTop,\n lopt.width === 0 || lopt.isWidthPredefined ? MeasureMode.EXACTLY : MeasureMode.AT_MOST,\n lopt.height === 0 || lopt.isHeightPredefined ? MeasureMode.EXACTLY : MeasureMode.AT_MOST,\n );\n }\n }\n }\n\n getMeasuredWidth(): number\n {\n return this.measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this.measuredHeight;\n }\n\n /**\n * Calculates the actual value of the anchor, given the parent's dimension.\n *\n * @param {number} anchor - anchor as given in layout options\n * @param {number} limit - parent's dimension\n * @param {boolean} limitSubtract - true for right/bottom anchors, false for left/top\n */\n protected calculateAnchor(anchor: number, limit: number, limitSubtract: boolean): number\n {\n const offset = Math.abs(anchor) < 1 ? anchor * limit : anchor;\n\n return limitSubtract ? limit - offset : offset;\n }\n\n /**\n * Calculates the \"reach\" of a child widget, which is the minimum dimension of\n * the parent required to fully fit the child.\n *\n * @param {number} startAnchor - left or top anchor as given in layout options\n * @param {number} endAnchor - right or bottom anchor as given in layout options\n * @param {number} dimen - measured dimension of the widget (width or height)\n */\n protected calculateReach(startAnchor: number, endAnchor: number, dimen: number): number\n {\n if (Math.abs(startAnchor) < 1 && Math.abs(endAnchor) < 1)\n {\n return dimen / (1 - endAnchor - startAnchor);\n }\n else if (Math.abs(startAnchor) < 1)\n {\n return (endAnchor + dimen) / (1 - startAnchor);\n }\n else if (Math.abs(endAnchor) < 1)\n {\n return (startAnchor + dimen) / (1 - endAnchor);\n }\n\n return startAnchor + dimen + endAnchor;\n }\n}\n","import { IMeasurable } from '../IMeasurable';\nimport { WidgetGroup } from '../WidgetGroup';\n\nexport interface ILayoutManager extends IMeasurable\n{\n onAttach(host: WidgetGroup): void;\n onDetach(): void;\n onLayout(): void;\n}\n\n/**\n * Represents a layout manager that can be attached to any widget group. A layout\n * manager handles the positions and dimensions of child widgets.\n *\n * @memberof PUXI\n * @interface\n */\n\n/**\n * Attaches the layout manager to a widget. This is automatically done by `WidgetGroup#useLayout`.\n *\n * @memberof PUXI.ILayoutManager#\n * @method onAttach\n * @param {PUXI.WidgetGroup} host\n */\n\n/**\n * Detaches the layout manager from a widget. This is done by `WidgetGroup#useLayout`. Do\n * not use this on your own.\n *\n * @memberof PUXI.ILayoutManager#\n * @method onDetach\n */\n\n/**\n * Lays out the children of the layout's host. It assumes that the layout is attached.\n *\n * Contract: Between an `onMeasure` and `onLayout` call, it is expected that the children\n * of the widget-group have _not changed_. This prevents the layout's cache (if any)\n * from becoming invalidated.\n *\n * @memberof PUXI.ILayoutManager#\n * @method onLayout\n */\n","import { ILayoutManager } from './ILayoutManager';\nimport { WidgetGroup } from '../WidgetGroup';\nimport { Widget } from '../Widget';\nimport { LayoutOptions, ALIGN } from '../layout-options';\nimport { BorderLayoutOptions } from '../layout-options/BorderLayoutOptions';\nimport { MeasureMode } from '../IMeasurable';\n\nconst {\n REGION_LEFT,\n REGION_TOP,\n REGION_RIGHT,\n REGION_BOTTOM,\n REGION_CENTER,\n} = BorderLayoutOptions;\n\nconst {\n FILL_PARENT,\n} = LayoutOptions;\n\nconst {\n EXACTLY,\n AT_MOST,\n} = MeasureMode;\n\n/**\n * `PUXI.BorderLayout` is used in conjunction with `PUXI.BorderLayoutOptions`.\n *\n * This layout guarantees that the \"center\" region will always be in the center of\n * the widget-group.\n *\n * WARNING: This layout may have some bugs in edge cases that haven't been reported.\n *\n * @memberof PUXI\n * @class\n * @implements PUXI.ILayoutManager\n */\nexport class BorderLayout implements ILayoutManager\n{\n protected host: WidgetGroup;\n\n protected leftWidgets: Widget[];\n protected topWidgets: Widget[];\n protected rightWidgets: Widget[];\n protected bottomWidgets: Widget[];\n protected centerWidgets: Widget[];\n\n protected measuredLeftWidth: number;\n protected measuredRightWidth: number;\n protected measuredCenterWidth: number;\n protected measuredWidth: number;\n\n protected measuredTopHeight: number;\n protected measuredBottomHeight: number;\n protected measuredCenterHeight: number;\n protected measuredHeight: number;\n\n constructor()\n {\n this.leftWidgets = [];\n this.topWidgets = [];\n this.rightWidgets = [];\n this.bottomWidgets = [];\n this.centerWidgets = [];\n }\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n this.clearMeasureCache();\n this.clearRegions();\n }\n\n onLayout(): void\n {\n this.layoutChildren(\n this.leftWidgets,\n 0,\n this.measuredTopHeight,\n this.measuredLeftWidth,\n this.measuredCenterHeight);\n this.layoutChildren(this.topWidgets, 0, 0, this.measuredWidth, this.measuredTopHeight);\n this.layoutChildren(\n this.rightWidgets,\n this.measuredWidth - this.measuredRightWidth,\n this.measuredTopHeight,\n this.measuredRightWidth,\n this.measuredCenterHeight,\n );\n this.layoutChildren(\n this.bottomWidgets,\n 0,\n this.measuredTopHeight + this.measuredCenterHeight,\n this.measuredWidth,\n this.measuredBottomHeight,\n );\n this.layoutChildren(\n this.centerWidgets,\n this.measuredLeftWidth,\n this.measuredTopHeight,\n this.measuredCenterWidth,\n this.measuredCenterHeight,\n );\n }\n\n layoutChildren(\n widgets: Widget[],\n regionX: number,\n regionY: number,\n regionWidth: number,\n regionHeight: number,\n ): void\n {\n for (let i = 0, j = widgets.length; i < j; i++)\n {\n const widget = widgets[i];\n\n let x = 0;\n let y = 0;\n\n switch ((widget.layoutOptions as BorderLayoutOptions)?.horizontalAlign)\n {\n case ALIGN.CENTER: x = (regionWidth - widget.getMeasuredWidth()) / 2; break;\n case ALIGN.RIGHT: x = regionWidth - widget.getMeasuredWidth(); break;\n default: x = 0; break;\n }\n\n switch ((widget.layoutOptions as BorderLayoutOptions)?.verticalAlign)\n {\n case ALIGN.CENTER: y = (regionHeight - widget.getMeasuredHeight()) / 2; break;\n case ALIGN.BOTTOM: y = regionHeight - widget.getMeasuredHeight(); break;\n default: y = 0; break;\n }\n\n x += regionX;\n y += regionY;\n\n widget.layout(x, y, x + widget.getMeasuredWidth(), y + widget.getMeasuredHeight(), true);\n }\n }\n\n /**\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n * @override\n */\n onMeasure(maxWidth: number, maxHeight: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n this.indexRegions();\n this.clearMeasureCache();\n\n // Children can be aligned inside region if smaller\n const childWidthMode = widthMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n const childHeightMode = heightMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n\n // Measure top, bottom, and center. The max. of each row's width will be our \"reference\".\n let [tw, th, , thmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.topWidgets,\n maxWidth,\n maxHeight,\n childWidthMode, childHeightMode,\n );\n let [bw, bh,, bhmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.bottomWidgets,\n maxWidth,\n maxHeight,\n childWidthMode, childHeightMode,\n );\n let [cw, ch, cwmin, chmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.centerWidgets,\n maxWidth,\n maxHeight,\n childWidthMode,\n heightMode);\n\n // Measure left & right regions. Their heights will equal center's height.\n let [lw, , lwmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.leftWidgets,\n maxWidth,\n ch,\n childWidthMode, MeasureMode.AT_MOST);\n let [rw, , rwmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.rightWidgets,\n maxWidth,\n ch,\n childWidthMode, MeasureMode.AT_MOST);\n\n // Check if total width/height is greater than our limit. If so, then downscale\n // each row's height or each column's (in middle row) width.\n\n const middleRowWidth = lw + rw + cw;\n const netWidth = Math.max(tw, bw, middleRowWidth);\n const netHeight = th + bh + ch;\n\n // Resolve our limits.\n if (widthMode === MeasureMode.EXACTLY)\n {\n this.measuredWidth = maxWidth;\n }\n else if (widthMode === MeasureMode.AT_MOST)\n {\n this.measuredWidth = Math.min(netWidth, maxWidth);\n }\n else\n {\n this.measuredWidth = netWidth;\n }\n\n if (heightMode === MeasureMode.EXACTLY)\n {\n this.measuredHeight = maxHeight;\n }\n else if (heightMode === MeasureMode.AT_MOST)\n {\n this.measuredHeight = Math.min(netHeight, maxHeight);\n }\n else\n {\n this.measuredHeight = netHeight;\n }\n\n tw = this.measuredWidth;\n bw = this.measuredWidth;\n\n if (netHeight > this.measuredHeight)\n {\n const hmin = (thmin + chmin + bhmin);\n\n // Redistribute heights minus min-heights.\n if (hmin < this.measuredHeight)\n {\n const downscale = (this.measuredHeight - hmin) / (netHeight - hmin);\n\n th = thmin + ((th - thmin) * downscale);\n bh = bhmin + ((bh - bhmin) * downscale);\n ch = chmin + ((ch - chmin) * downscale);\n }\n // Redistribute full heights.\n else\n {\n const downscale = this.measuredHeight / netHeight;\n\n th *= downscale;\n bh *= downscale;\n ch *= downscale;\n }\n }\n\n if (netWidth > this.measuredWidth)\n {\n const wmin = lwmin + cwmin + rwmin;\n\n // Redistribute widths minus min. widths\n if (wmin < this.measuredWidth)\n {\n const downscale = (this.measuredWidth - wmin) / (netWidth - wmin);\n\n lw = lwmin + ((lw - lwmin) * downscale);\n cw = cwmin + ((cw - cwmin) * downscale);\n rw = rwmin + ((rw - rwmin) * downscale);\n }\n // Redistribute full widths\n else\n {\n const downscale = this.measuredWidth / netWidth;\n\n lw *= downscale;\n cw *= downscale;\n rw *= downscale;\n }\n }\n\n // Useful to know!\n this.measuredLeftWidth = lw;\n this.measuredRightWidth = rw;\n this.measuredCenterWidth = cw;\n this.measuredTopHeight = th;\n this.measuredBottomHeight = bh;\n this.measuredCenterHeight = ch;\n\n this.fitChildren(this.leftWidgets, this.measuredLeftWidth, this.measuredCenterHeight);\n this.fitChildren(this.topWidgets, this.measuredWidth, this.measuredTopHeight);\n this.fitChildren(this.rightWidgets, this.measuredRightWidth, this.measuredCenterHeight);\n this.fitChildren(this.bottomWidgets, this.measuredWidth, this.measuredBottomHeight);\n this.fitChildren(this.centerWidgets, this.measuredCenterWidth, this.measuredCenterHeight);\n }\n\n /**\n * This measures the list of widgets given the constraints. The max width and\n * height amongst the children is returned.\n *\n * @param {PUXI.Widget[]} list\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n * @returns {number[]} - [width, height, widthFixedLowerBound, heightFixedLowerBound] -\n * the max. width and height amongst children. Also, the minimum required width/height\n * for the region (as defined in layout-options).\n */\n protected measureChildren(\n list: Widget[],\n maxWidth: number,\n maxHeight: number,\n widthMode: MeasureMode,\n heightMode: MeasureMode,\n ): number[]\n {\n let width = 0;\n let height = 0;\n let widthFixedLowerBound = 0;\n let heightFixedLowerBound = 0;\n\n for (let i = 0, j = list.length; i < j; i++)\n {\n const widget = list[i];\n const lopt = widget.layoutOptions || LayoutOptions.DEFAULT;\n\n let w = maxWidth;\n let h = maxHeight;\n let wmd = widthMode;\n let hmd = heightMode;\n\n if (lopt.width <= LayoutOptions.MAX_DIMEN)\n {\n w = lopt.width;\n wmd = EXACTLY;\n\n widthFixedLowerBound = Math.max(widthFixedLowerBound, w);\n }\n if (lopt.height <= LayoutOptions.MAX_DIMEN)\n {\n h = lopt.height;\n hmd = EXACTLY;\n\n heightFixedLowerBound = Math.max(heightFixedLowerBound, h);\n }\n\n widget.measure(w, h, wmd, hmd);\n\n width = Math.max(width, widget.getMeasuredWidth());\n height = Math.max(height, widget.getMeasuredHeight());\n }\n\n return [width, height, widthFixedLowerBound, heightFixedLowerBound];\n }\n\n /**\n * Ensures all widgets in the list measured their dimensions below the region\n * width & height. Widgets that are too large are remeasured in the those\n * limits (using `MeasureMode.AT_MOST`).\n *\n * This will handle widgets that have \"FILL_PARENT\" width or height.\n *\n * @param {PUXI.Widget[]} list\n * @param {number} measuredRegionWidth\n * @param {number} measuredRegionHeight\n */\n protected fitChildren(\n list: Widget[],\n measuredRegionWidth: number,\n measuredRegionHeight: number,\n ): void\n {\n for (let i = 0, j = list.length; i < j; i++)\n {\n const widget = list[i];\n\n if (widget.getMeasuredWidth() <= measuredRegionWidth\n && widget.getMeasuredHeight() <= measuredRegionHeight\n && widget.getMeasuredWidth() > 0\n && widget.getMeasuredHeight() > 0\n && widget.layoutOptions?.width !== FILL_PARENT\n && widget.layoutOptions?.height !== FILL_PARENT)\n {\n continue;\n }\n\n if (measuredRegionWidth > 0 && measuredRegionHeight > 0)\n {\n const wm = widget.layoutOptions?.width === FILL_PARENT ? EXACTLY : AT_MOST;\n const hm = widget.layoutOptions?.height === FILL_PARENT ? EXACTLY : AT_MOST;\n\n widget.measure(measuredRegionWidth, measuredRegionHeight, wm, hm);\n }\n }\n }\n\n /**\n * Indexes the list of left, top, right, bottom, and center widget lists.\n */\n protected indexRegions(): void\n {\n this.clearRegions();\n const { widgetChildren: children } = this.host;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as BorderLayoutOptions;\n\n const region = lopt.region || REGION_CENTER;\n\n switch (region)\n {\n case REGION_LEFT: this.leftWidgets.push(widget); break;\n case REGION_TOP: this.topWidgets.push(widget); break;\n case REGION_RIGHT: this.rightWidgets.push(widget); break;\n case REGION_BOTTOM: this.bottomWidgets.push(widget); break;\n default: this.centerWidgets.push(widget);\n }\n }\n }\n\n /**\n * Clears the left, top, right, bottom, and center widget lists.\n */\n protected clearRegions(): void\n {\n this.leftWidgets.length = 0;\n this.topWidgets.length = 0;\n this.rightWidgets.length = 0;\n this.bottomWidgets.length = 0;\n }\n\n /**\n * Zeros the measured dimensions.\n */\n protected clearMeasureCache(): void\n {\n this.measuredLeftWidth = 0;\n this.measuredRightWidth = 0;\n this.measuredCenterWidth = 0;\n this.measuredTopHeight = 0;\n this.measuredBottomHeight = 0;\n this.measuredCenterHeight = 0;\n }\n\n getMeasuredWidth(): number\n {\n return this.measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this.measuredHeight;\n }\n}\n","import { ILayoutManager } from './ILayoutManager';\nimport { WidgetGroup } from '../WidgetGroup';\nimport { MeasureMode } from '../IMeasurable';\nimport { LayoutOptions } from '../layout-options';\n\ntype Gravity = 'left' | 'center' | 'right' | 'top' | 'middle' | 'bottom';\n\nexport class LinearLayout implements ILayoutManager\n{\n private host: WidgetGroup;\n private orientation: 'vertical' | 'horizontal';\n private gravity: Gravity;\n private measuredWidth: number;\n private measuredHeight: number;\n\n constructor(orientation: 'vertical' | 'horizontal' = 'vertical', gravity: Gravity = 'center')\n {\n this.orientation = orientation;\n this.gravity = gravity;\n }\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n }\n\n onLayout(): void\n {\n let position = 0;\n const children = this.host.widgetChildren;\n const breadth = this.orientation === 'vertical'\n ? this.measuredWidth\n : this.measuredHeight;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n\n // along axis\n const u = this.orientation === 'vertical'\n ? widget.getMeasuredWidth()\n : widget.getMeasuredHeight();\n const v = this.orientation === 'vertical'\n ? widget.getMeasuredHeight()\n : widget.getMeasuredWidth();\n\n let p = 0;\n\n if (u < breadth)\n {\n switch (this.gravity)\n {\n case 'center':\n case 'middle':\n p = (breadth - u) / 2;\n break;\n case 'right':\n case 'bottom':\n p = breadth - u;\n break;\n }\n }\n\n if (this.orientation === 'vertical')\n {\n widget.layout(p, position, p + u, position + v);\n }\n else\n {\n widget.layout(position, p, position + v, p + u);\n }\n\n position += v;\n }\n }\n\n onMeasure(widthLimit: number, heightLimit: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n const children = this.host.widgetChildren;\n const baseWidthMode = widthMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n const baseHeightMode = heightMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : heightMode;\n\n let length = 0;\n let breadth = 0;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT);\n\n const widgetWidthLimit = lopt.isWidthPredefined ? lopt.width : widthLimit;\n const widgetHeightLimit = lopt.isHeightPredefined ? lopt.height : heightLimit;\n const widgetWidthMode = lopt.isWidthPredefined ? MeasureMode.EXACTLY : baseWidthMode;\n const widgetHeightMode = lopt.isHeightPredefined ? MeasureMode.EXACTLY : baseHeightMode;\n\n widget.measure(widgetWidthLimit, widgetHeightLimit, widgetWidthMode, widgetHeightMode);\n\n if (this.orientation === 'vertical')\n {\n breadth = Math.max(breadth, widget.getMeasuredWidth());\n length += widget.getMeasuredHeight();\n }\n else\n {\n breadth = Math.max(breadth, widget.getMeasuredHeight());\n length += widget.getMeasuredWidth();\n }\n }\n\n if (this.orientation === 'vertical')\n {\n this.measuredWidth = breadth;\n this.measuredHeight = length;\n }\n else\n {\n this.measuredWidth = length;\n this.measuredHeight = breadth;\n }\n }\n\n getMeasuredWidth(): number\n {\n return this.measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this.measuredHeight;\n }\n}\n","import { IButtonOptions, Button } from './Button';\nimport { ImageWidget } from './Sprite';\nimport { Texture } from 'pixi.js';\nimport { LinearLayout } from './layout-manager';\n\nexport interface IImageButtonOptions extends IButtonOptions\n{\n icon: string | Texture | ImageWidget;\n}\n\nexport class ImageButton extends Button\n{\n iconWidget: ImageWidget;\n\n constructor(options: IImageButtonOptions)\n {\n super(options);\n\n if (!(options.icon instanceof ImageWidget))\n {\n const texture = options.icon instanceof Texture ? options.icon\n : Texture.from(options.icon);\n\n options.icon = new ImageWidget(texture);\n }\n\n this.textWidget.setLayoutOptions(null);// a little redundant maybe?\n this.iconWidget = options.icon;\n\n this.removeChild(this.textWidget);\n this.addChild(this.iconWidget);\n this.addChild(this.textWidget);\n\n this.useLayout(new LinearLayout('vertical'));\n }\n}\n","import { Widget } from './Widget';\nimport { DragManager } from './event/DragManager';\nimport { Tween } from './Tween';\nimport { Ease } from './Ease/Ease';\nimport { Helpers } from './Helpers';\nimport { Sprite } from './Sprite';\nimport * as PIXI from 'pixi.js';\nimport { MeasureMode } from './IMeasurable';\n\nexport interface ISliderOptions\n{\n track?: PIXI.Container | Widget;\n handle?: PIXI.Container | Widget;\n fill?: Sprite;\n orientation?: number;\n value?: number;\n minValue?: number;\n maxValue?: number;\n decimals?: number;\n onValueChange?: () => void;\n onValueChanging?: () => void;\n}\n\n/**\n * @memberof PUXI\n * @interface ISliderOptions\n * @property {PIXI.Container}[track]\n * @property {PIXI.Container}[handle]\n */\n\n/**\n * These options are used to configure a `PUXI.Slider`.\n *\n * @memberof PUXI\n * @interface ISliderOptions\n * @property {PIXI.Container}[track]\n * @property {PIXI.Container}[fill]\n * @property {boolean}[vertical]\n * @property {number}[value]\n * @property {number}[minValue]\n * @property {number}[maxValue]\n * @property {number}[decimals]\n * @property {Function}[onValueChange]\n * @property {Function}[onValueChanging]\n */\n\n/**\n * A slider is a form of input to set a variable to a value in a continuous\n * range. It cannot have its own children.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n */\nexport class Slider extends Widget\n{\n protected _disabled: boolean;\n\n track: Widget;\n handle: Widget;\n fill: Sprite;\n\n public readonly orientation: number;\n\n protected percentValue: number;\n protected _minValue: number;\n protected _maxValue: number;\n\n private _localCursor: PIXI.Point;\n\n decimals: number;\n vertical: boolean;\n\n _lastChange: number;\n _lastChanging: number;\n\n onValueChange: (n: number) => void;\n onValueChanging: (n: number) => void;\n\n /**\n * @param options {Object} Slider settings\n * @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the slider track\n * @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as slider handle\n * @param [options.fill=null] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used for slider fill\n * @param [options.vertical=false] {boolean} Direction of the slider\n * @param [options.value=0] {number} value of the slider\n * @param [options.minValue=0] {number} minimum value\n * @param [options.maxValue=100] {number} max value\n * @param [options.decimals=0] {boolean} the decimal precision (use negative to round tens and hundreds)\n * @param [options.onValueChange=null] {callback} Callback when the value has changed\n * @param [options.onValueChanging=null] {callback} Callback while the value is changing\n */\n constructor(options: ISliderOptions)\n {\n super();\n\n /**\n * The value expressed as a percentage from min. to max. This will always\n * be between 0 and 1.\n *\n * The actual value is: `this.minValue + this.percentValue * (this.maxValue - this.minValue`).\n *\n * @member {number}\n */\n this.percentValue = 0;\n this._disabled = false;\n\n this.fill = options.fill || null;\n this.percentValue = this._minValue;\n this._minValue = options.minValue || 0;\n this._maxValue = options.maxValue || 100;\n this.decimals = options.decimals || 0;\n this.orientation = options.orientation || Slider.HORIZONTAL;\n this.onValueChange = options.onValueChange || null;\n this.onValueChanging = options.onValueChanging || null;\n this.value = options.value || 50;\n\n // set options\n this.track = Widget.fromContent(options.track\n || (this.orientation === Slider.HORIZONTAL\n ? Slider.DEFAULT_HORIZONTAL_TRACK.clone()\n : Slider.DEFAULT_VERTICAL_TRACK.clone()));\n this.handle = Widget.fromContent(options.handle || Slider.DEFAULT_HANDLE.clone());\n\n this.addChild(this.track, this.handle);// initialize(), update() usage\n\n this._localCursor = new PIXI.Point();\n this.handle.contentContainer.buttonMode = true;\n }\n\n initialize(): void\n {\n super.initialize();\n\n let startValue = 0;\n let trackSize;\n\n const triggerValueChange = (): void =>\n {\n this.emit('change', this.value);\n\n if (this._lastChange != this.value)\n {\n this._lastChange = this.value;\n\n if (typeof this.onValueChange === 'function')\n {\n this.onValueChange(this.value);\n }\n }\n };\n\n const triggerValueChanging = (): void =>\n {\n this.emit('changing', this.value);\n\n if (this._lastChanging != this.value)\n {\n this._lastChanging = this.value;\n\n if (typeof this.onValueChanging === 'function')\n {\n this.onValueChanging(this.value);\n }\n }\n };\n\n const updatePositionToMouse = (mousePosition, soft): void =>\n {\n this.percentValue = this.getValueAtPhysicalPosition(mousePosition);\n this.layoutHandle();\n triggerValueChanging();\n };\n\n // Handles dragging\n const handleDrag: DragManager = this.handle.eventBroker.dnd as DragManager;\n\n handleDrag.onPress = (event: PIXI.interaction.InteractionEvent): void =>\n {\n event.stopPropagation();\n };\n\n handleDrag.onDragStart = (): void =>\n {\n startValue = this.percentValue;\n trackSize = this.orientation === Slider.HORIZONTAL\n ? this.track.width\n : this.track.height;\n };\n\n handleDrag.onDragMove = (event, offset: PIXI.Point): void =>\n {\n this.percentValue = Math.max(0, Math.min(\n 1,\n startValue + ((this.orientation === Slider.HORIZONTAL ? offset.x : offset.y) / trackSize\n )));\n\n triggerValueChanging();\n this.layoutHandle();\n };\n\n handleDrag.onDragEnd = (): void =>\n {\n triggerValueChange();\n this.layoutHandle();\n };\n\n // Bar pressing/dragging\n const trackDrag: DragManager = this.track.eventBroker.dnd as DragManager;\n\n trackDrag.onPress = (event, isPressed): void =>\n {\n if (isPressed)\n {\n updatePositionToMouse(event.data.global, true);\n }\n\n event.stopPropagation();\n };\n\n trackDrag.onDragMove = (event: PIXI.interaction.InteractionEvent): void =>\n {\n updatePositionToMouse(event.data.global, false);\n };\n\n trackDrag.onDragEnd = (): void =>\n {\n triggerValueChange();\n };\n\n this.layoutHandle();\n }\n\n get value(): number\n {\n return Helpers.Round(Helpers.Lerp(this._minValue, this._maxValue, this.percentValue), this.decimals);\n }\n set value(val: number)\n {\n if (val === this.value)\n {\n return;\n }\n if (isNaN(val))\n {\n throw new Error('Cannot use NaN as a value');\n }\n\n this.percentValue = (Math.max(this._minValue, Math.min(this._maxValue, val)) - this._minValue) / (this._maxValue - this._minValue);\n\n if (typeof this.onValueChange === 'function')\n {\n this.onValueChange(this.value);\n }\n if (typeof this.onValueChanging === 'function')\n {\n this.onValueChanging(this.value);\n }\n\n if (this.handle && this.initialized)\n {\n this.layoutHandle();\n }\n }\n\n get minValue(): number\n {\n return this._minValue;\n }\n set minValue(val: number)\n {\n this._minValue = val;\n this.update();\n }\n\n get maxValue(): number\n {\n return this._maxValue;\n }\n set maxValue(val: number)\n {\n this._maxValue = val;\n this.update();\n }\n\n get disabled(): boolean\n {\n return this._disabled;\n }\n set disabled(val: boolean)\n {\n if (val !== this._disabled)\n {\n this._disabled = val;\n this.handle.contentContainer.buttonMode = !val;\n this.handle.contentContainer.interactive = !val;\n this.track.contentContainer.interactive = !val;\n }\n }\n\n /**\n * @protected\n * @returns the amount of the freedom that handle has in physical units, i.e. pixels. This\n * is the width of the track minus the handle's size.\n */\n protected getPhysicalRange(): number\n {\n return this.orientation === Slider.HORIZONTAL\n ? this.contentWidth - this.handle.getMeasuredWidth()\n : this.contentHeight - this.handle.getMeasuredHeight();\n }\n\n /**\n * @protected\n * @param {PIXI.Point} cursor\n * @returns the value of the slider if the handle's center were (globally)\n * positioned at the given point.\n */\n protected getValueAtPhysicalPosition(cursor: PIXI.Point): number\n {\n // Transform position\n const localCursor = this.contentContainer.toLocal(cursor, null, this._localCursor, true);\n\n let offset: number;\n let range: number;\n\n if (this.orientation === Slider.HORIZONTAL)\n {\n const handleWidth = this.handle.getMeasuredWidth();\n\n offset = localCursor.x - this.paddingLeft - (handleWidth / 4);\n range = this.contentWidth - handleWidth;\n }\n else\n {\n const handleHeight = this.handle.getMeasuredHeight();\n\n offset = localCursor.y - this.paddingTop - (handleHeight / 4);\n range = this.contentHeight - handleHeight;\n }\n\n return offset / range;\n }\n\n /**\n * Re-positions the handle. This should be called after `_value` has been changed.\n */\n protected layoutHandle(): void\n {\n const handle = this.handle;\n\n const handleWidth = handle.getMeasuredWidth();\n const handleHeight = handle.getMeasuredHeight();\n let width = this.width - this.paddingHorizontal;\n let height = this.height - this.paddingVertical;\n\n let handleX: number;\n let handleY: number;\n\n if (this.orientation === Slider.HORIZONTAL)\n {\n width -= handleWidth;\n\n handleY = (height - handleHeight) / 2;\n handleX = (width * this.percentValue);\n }\n else\n {\n height -= handleHeight;\n\n handleX = (width - handleWidth) / 2;\n handleY = (height * this.percentValue);\n }\n\n handle.layout(handleX, handleY, handleX + handleWidth, handleY + handleHeight);\n }\n\n /**\n * Slider measures itself using the track's natural dimensions in its non-oriented\n * direction. The oriented direction will be the equal the range's size times\n * the track's resolution.\n *\n * @param width\n * @param height\n * @param widthMode\n * @param heightMode\n */\n onMeasure(width: number, height: number, widthMode: number, heightMode: number): void\n {\n const naturalWidth = ((this.orientation === Slider.HORIZONTAL)\n ? this._maxValue - this._minValue\n : Math.max(this.handle.contentContainer.width, this.track.contentContainer.width))\n + this.paddingHorizontal;\n const naturalHeight = ((this.orientation === Slider.VERTICAL)\n ? this._maxValue - this._minValue\n : Math.max(this.handle.contentContainer.height, this.track.contentContainer.height))\n + this.paddingVertical;\n\n switch (widthMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredWidth = width;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredWidth = naturalWidth;\n break;\n case MeasureMode.AT_MOST:\n this._measuredWidth = Math.min(width, naturalWidth);\n break;\n }\n\n switch (heightMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredHeight = height;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredHeight = naturalHeight;\n break;\n case MeasureMode.AT_MOST:\n this._measuredHeight = Math.min(height, naturalHeight);\n break;\n }\n }\n\n /**\n * `Slider` lays the track to fill all of its width and height. The handle is aligned\n * in the middle in the non-oriented direction.\n *\n * @param l\n * @param t\n * @param r\n * @param b\n * @param dirty\n * @override\n */\n onLayout(l: number, t: number, r: number, b: number, dirty: boolean): void\n {\n super.onLayout(l, t, r, b, dirty);\n const { handle, track } = this;\n\n track.layout(0, 0, this.width - this.paddingHorizontal, this.height - this.paddingVertical);\n\n // Layout doesn't scale the widget\n // TODO: Create a Track widget, this won't work for custom tracks that don't wanna\n // scale (and it looks ugly.)\n track.insetContainer.width = track.width;\n track.insetContainer.height = track.height;\n\n handle.measure(this.width, this.height, MeasureMode.AT_MOST, MeasureMode.AT_MOST);\n\n this.layoutHandle();\n }\n\n /**\n * The default track for horizontally oriented sliders.\n * @static\n */\n static DEFAULT_HORIZONTAL_TRACK: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0xffffff, 1)\n .drawRect(0, 0, 16, 16) // natural width & height = 16\n .endFill()\n .lineStyle(1, 0x000000, 0.7, 1, true) // draw line in middle\n .moveTo(1, 8)\n .lineTo(15, 8);\n\n /**\n * The default track for vertically oriented sliders.\n * @static\n */\n static DEFAULT_VERTICAL_TRACK: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0xffffff, 1)\n .drawRect(0, 0, 16, 16) // natural width & height = 16\n .endFill()\n .lineStyle(1, 0x000000, 0.7, 1, true) // draw line in middle\n .moveTo(8, 1)\n .lineTo(8, 15);\n\n /**\n * @static\n */\n static DEFAULT_HANDLE: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0x000000)\n .drawCircle(16, 16, 8)\n .endFill()\n .beginFill(0x000000, 0.5)\n .drawCircle(16, 16, 16)\n .endFill();\n /**\n * Horizontal orientation\n * @static\n */\n static HORIZONTAL = 0xff5;\n\n /**\n * Vertical orientation\n * @static\n */\n static VERTICAL = 0xffe;\n}\n","import { Helpers } from './Helpers';\nconst _tweenItemCache = [];\nconst _callbackItemCache = [];\nconst _tweenObjects = {};\nconst _activeTweenObjects = {};\nlet _currentId = 1;\n\nclass TweenObject\n{\n public object: T;\n public tweens: Record;\n public active: boolean;\n public onUpdate: () => void;\n\n constructor(object: T)\n {\n this.object = object;\n this.tweens = {};\n this.active = false;\n this.onUpdate = null;\n }\n}\n\nclass CallbackItem\n{\n key: string;\n obj: any;\n parent: any;\n time: number;\n callback: Function;\n currentTime: number;\n\n private _ready: boolean;\n\n constructor()\n {\n this._ready = false;\n this.obj = null;\n this.parent = null;\n this.key = '';\n this.time = 0;\n this.callback = null;\n this.currentTime = 0;\n }\n\n remove(): void\n {\n this._ready = true;\n delete this.parent.tweens[this.key];\n if (!Object.keys(this.parent.tweens).length)\n {\n this.parent.active = false;\n this.parent.onUpdate = null;\n delete _activeTweenObjects[this.obj._tweenObjectId];\n }\n }\n\n set(obj, callback, time): void\n {\n this.obj = obj.object;\n\n if (!this.obj._currentCallbackID)\n { this.obj._currentCallbackID = 1; }\n else\n { this.obj._currentCallbackID++; }\n\n this.time = time;\n this.parent = obj;\n this.callback = callback;\n this._ready = false;\n this.key = `cb_${this.obj._currentCallbackID}`;\n this.currentTime = 0;\n if (!this.parent.active)\n {\n this.parent.active = true;\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\n }\n }\n\n update(delta: number): void\n {\n this.currentTime += delta;\n if (this.currentTime >= this.time)\n {\n this.remove();\n this.callback.call(this.parent);\n }\n }\n}\n\nclass TweenItem\n{\n key: string;\n parent: any;\n obj: any;\n\n from: any;\n to: any;\n time: number;\n ease: any;\n currentTime: number;\n t: number;\n isColor: boolean;\n currentColor: any;\n surfix: any;\n\n _ready: boolean;\n\n constructor()\n {\n this._ready = false;\n this.parent = null;\n this.obj = null;\n this.key = '';\n this.from = 0;\n this.to = 0;\n this.time = 0;\n this.ease = 0;\n this.currentTime = 0;\n this.t = 0;\n this.isColor = false;\n }\n\n remove(): void\n {\n this._ready = true;\n delete this.parent.tweens[this.key];\n if (!Object.keys(this.parent.tweens).length)\n {\n this.parent.active = false;\n delete _activeTweenObjects[this.obj._tweenObjectId];\n }\n }\n\n set(obj: any, key: string, from: any, to: any, time: number, ease: any): void\n {\n this.isColor = isNaN(from) && from[0] === '#' || isNaN(to) && to[0] === '#';\n this.parent = obj;\n this.obj = obj.object;\n this.key = key;\n this.surfix = getSurfix(to);\n\n if (this.isColor)\n {\n this.to = Helpers.hexToRgb(to);\n this.from = Helpers.hexToRgb(from);\n this.currentColor = { r: this.from.r, g: this.from.g, b: this.from.b };\n }\n else\n {\n this.to = getToValue(to);\n this.from = getFromValue(from, to, this.obj, key);\n }\n\n this.time = time;\n this.currentTime = 0;\n this.ease = ease;\n this._ready = false;\n\n if (!this.parent.active)\n {\n this.parent.active = true;\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\n }\n }\n\n update(delta: number): void\n {\n this.currentTime += delta;\n this.t = Math.min(this.currentTime, this.time) / this.time;\n if (this.ease)\n { this.t = this.ease.getPosition(this.t); }\n\n if (this.isColor)\n {\n this.currentColor.r = Math.round(Helpers.Lerp(this.from.r, this.to.r, this.t));\n this.currentColor.g = Math.round(Helpers.Lerp(this.from.g, this.to.g, this.t));\n this.currentColor.b = Math.round(Helpers.Lerp(this.from.b, this.to.b, this.t));\n this.obj[this.key] = Helpers.rgbToNumber(this.currentColor.r, this.currentColor.g, this.currentColor.b);\n }\n else\n {\n const val = Helpers.Lerp(this.from, this.to, this.t);\n\n this.obj[this.key] = this.surfix ? val + this.surfix : val;\n }\n\n if (this.currentTime >= this.time)\n {\n this.remove();\n }\n }\n}\n\nconst widthKeys = ['width', 'minWidth', 'maxWidth', 'anchorLeft', 'anchorRight', 'left', 'right', 'x'];\nconst heightKeys = ['height', 'minHeight', 'maxHeight', 'anchorTop', 'anchorBottom', 'top', 'bottom', 'y'];\n\nfunction getFromValue(from, to, obj, key): number\n{\n // both number\n if (!isNaN(from) && !isNaN(to))\n { return from; }\n\n // both percentage\n if (isNaN(from) && isNaN(to) && from.indexOf('%') !== -1 && to.indexOf('%') !== -1)\n { return parseFloat(from.replace('%', '')); }\n\n // convert from to px\n if (isNaN(from) && !isNaN(to) && from.indexOf('%') !== -1)\n {\n if (widthKeys.indexOf(key) !== -1)\n { return obj.parent._width * (parseFloat(from.replace('%', '')) * 0.01); }\n else if (heightKeys.indexOf(key) !== -1)\n { return obj.parent._height * (parseFloat(from.replace('%', '')) * 0.01); }\n\n return 0;\n }\n\n // convert from to percentage\n if (!isNaN(from) && isNaN(to) && to.indexOf('%') !== -1)\n {\n if (widthKeys.indexOf(key) !== -1)\n { return from / obj.parent._width * 100; }\n else if (heightKeys.indexOf(key) !== -1)\n { return from / obj.parent._height * 100; }\n\n return 0;\n }\n\n return 0;\n}\n\nfunction getSurfix(to: number | string): any\n{\n if (isNaN(to) && to.indexOf('%') !== -1)\n { return '%'; }\n}\n\nfunction getToValue(to: number | string): any\n{\n if (!isNaN(to))\n { return to; }\n if (isNaN(to) && to.indexOf('%') !== -1)\n { return parseFloat(to.replace('%', '')); }\n}\n\nfunction getObject(obj: any): any\n{\n if (!obj._tweenObjectId)\n {\n obj._tweenObjectId = _currentId;\n _currentId++;\n }\n let object = _tweenObjects[obj._tweenObjectId];\n\n if (!object)\n {\n object = _tweenObjects[obj._tweenObjectId] = new TweenObject(obj);\n }\n\n return object;\n}\n\nfunction getTweenItem(): TweenItem\n{\n for (let i = 0; i < _tweenItemCache.length; i++)\n {\n if (_tweenItemCache[i]._ready)\n { return _tweenItemCache[i]; }\n }\n\n const tween = new TweenItem();\n\n _tweenItemCache.push(tween);\n\n return tween;\n}\n\nfunction getCallbackItem(): CallbackItem\n{\n for (let i = 0; i < _callbackItemCache.length; i++)\n {\n if (_callbackItemCache[i]._ready)\n { return _callbackItemCache[i]; }\n }\n\n const cb = new CallbackItem();\n\n _callbackItemCache.push(cb);\n\n return cb;\n}\n\nexport const Tween = {\n to(obj, time, params, ease?)\n {\n const object = getObject(obj);\n let onUpdate = null;\n\n for (const key in params)\n {\n if (key === 'onComplete')\n {\n const cb = getCallbackItem();\n\n cb.set(object, params[key], time);\n object.tweens[cb.key] = cb;\n continue;\n }\n\n if (key === 'onUpdate')\n {\n onUpdate = params[key];\n continue;\n }\n\n if (time)\n {\n const match = params[key] === obj[key];\n\n if (typeof obj[key] === 'undefined') continue;\n\n if (match)\n {\n if (object.tweens[key]) object.tweens[key].remove();\n }\n else\n {\n if (!object.tweens[key])\n { object.tweens[key] = getTweenItem(); }\n object.tweens[key].set(object, key, obj[key], params[key], time, ease);\n }\n }\n }\n\n if (time)\n { object.onUpdate = onUpdate; }\n else this.set(obj, params);\n },\n from(obj, time, params, ease)\n {\n const object = getObject(obj);\n let onUpdate = null;\n\n for (const key in params)\n {\n if (key === 'onComplete')\n {\n const cb = getCallbackItem();\n\n cb.set(object, params[key], time);\n object.tweens[cb.key] = cb;\n continue;\n }\n\n if (key === 'onUpdate')\n {\n onUpdate = params[key];\n continue;\n }\n\n if (time)\n {\n const match = params[key] == obj[key];\n\n if (typeof obj[key] === 'undefined') continue;\n\n if (match)\n {\n if (object.tweens[key]) object.tweens[key].remove();\n }\n else\n {\n if (!object.tweens[key])\n { object.tweens[key] = getTweenItem(); }\n object.tweens[key].set(object, key, params[key], obj[key], time, ease);\n }\n }\n }\n\n if (time)\n { object.onUpdate = onUpdate; }\n else this.set(obj, params);\n },\n fromTo(obj, time, paramsFrom, paramsTo, ease)\n {\n const object = getObject(obj);\n let onUpdate = null;\n\n for (const key in paramsTo)\n {\n if (key === 'onComplete')\n {\n const cb = getCallbackItem();\n\n cb.set(object, paramsTo[key], time);\n object.tweens[cb.key] = cb;\n continue;\n }\n\n if (key === 'onUpdate')\n {\n onUpdate = paramsTo[key];\n continue;\n }\n\n if (time)\n {\n const match = paramsFrom[key] == paramsTo[key];\n\n if (typeof obj[key] === 'undefined' || typeof paramsFrom[key] === 'undefined') continue;\n\n if (match)\n {\n if (object.tweens[key]) object.tweens[key].remove();\n obj[key] = paramsTo[key];\n }\n else\n {\n if (!object.tweens[key])\n {\n object.tweens[key] = getTweenItem();\n }\n object.tweens[key].set(object, key, paramsFrom[key], paramsTo[key], time, ease);\n }\n }\n }\n\n if (time)\n { object.onUpdate = onUpdate; }\n else this.set(obj, paramsTo);\n },\n set(obj, params)\n {\n const object = getObject(obj);\n\n for (const key in params)\n {\n if (typeof obj[key] === 'undefined') continue;\n if (object.tweens[key]) object.tweens[key].remove();\n obj[key] = params[key];\n }\n },\n _update(delta)\n {\n for (const id in _activeTweenObjects)\n {\n const object = _activeTweenObjects[id];\n\n for (const key in object.tweens)\n {\n object.tweens[key].update(delta);\n }\n if (object.onUpdate)\n {\n object.onUpdate.call(object.object, delta);\n }\n }\n },\n};\n","import { Slider, ISliderOptions } from './Slider';\nimport { Tween } from './Tween';\nimport { Sprite } from './Sprite';\nimport { ScrollWidget } from './ScrollWidget';\nimport * as PIXI from 'pixi.js';\n\ninterface IScrollBarOptions extends ISliderOptions\n{\n track?: Sprite;\n handle?: Sprite;\n scrollingContainer: ScrollWidget;\n orientation: number;\n autohide?: boolean;\n}\n\n/**\n * @memberof PUXI\n * @interface IScrollBarOptions\n * @property {PUXI.Sprite} track\n * @property {PUXI.Sprite} handle\n */\n\n/**\n * An UI scrollbar to control a ScrollingContainer\n *\n * @class\n * @extends PUXI.Slider\n * @memberof PUXI\n * @param options {Object} ScrollBar settings\n * @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the scrollbar track\n * @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as scrollbar handle\n * @param options.scrollingContainer {PIXI.UI.ScrollingContainer} The container to control\n * @param [options.vertical=false] {boolean} Direction of the scrollbar\n * @param [options.autohide=false] {boolean} Hides the scrollbar when not needed\n */\nexport class ScrollBar extends Slider\n{\n scrollingContainer: ScrollWidget;\n autohide: boolean;\n _hidden: boolean;\n\n constructor(options: IScrollBarOptions)\n {\n super({\n track: options.track || ScrollBar.DEFAULT_TRACK.clone(),\n handle: options.handle || ScrollBar.DEFAULT_HANDLE.clone(),\n fill: null,\n orientation: options.orientation,\n minValue: 0,\n maxValue: 1,\n });\n\n this.scrollingContainer = options.scrollingContainer;\n this.autohide = options.autohide;\n this._hidden = false;\n }\n\n initialize(): void\n {\n super.initialize();\n this.decimals = 3; // up decimals to trigger ValueChanging more often\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n this.on('changing', (): void =>\n {\n this.scrollingContainer.forcePctPosition(\n this.orientation === Slider.HORIZONTAL ? 'x' : 'y',\n this.percentValue);\n });\n\n this.on('change', (): void =>\n {\n this.scrollingContainer.setScrollPosition();\n });\n }\n\n toggleHidden(hidden: boolean): void\n {\n if (this.autohide)\n {\n if (hidden && !this._hidden)\n {\n Tween.to(this, 0.2, { alpha: 0 });\n this._hidden = true;\n }\n else if (!hidden && this._hidden)\n {\n Tween.to(this, 0.2, { alpha: 1 });\n this._hidden = false;\n }\n }\n }\n\n /**\n * @static\n */\n static DEFAULT_TRACK = new PIXI.Graphics()\n .beginFill(0xffffff)\n .drawRect(0, 0, 8, 8)\n .endFill();\n\n /**\n * @static\n */\n static DEFAULT_HANDLE: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0x000000)\n .drawCircle(8, 8, 4)\n .endFill()\n .beginFill(0x000000, 0.5)\n .drawCircle(8, 8, 8)\n .endFill();\n}\n\n","import { InteractiveGroup } from './InteractiveGroup';\nimport { Helpers } from './Helpers';\nimport { DragManager } from './event/DragManager';\nimport { ScrollManager } from './event/ScrollManager';\nimport * as PIXI from 'pixi.js';\nimport { Widget } from './Widget';\nimport { WidgetGroup } from './WidgetGroup';\nimport { BorderLayout } from './layout-manager';\nimport { ScrollBar } from './ScrollBar';\nimport { ALIGN, BorderLayoutOptions, LayoutOptions } from './layout-options';\nimport { Slider } from './Slider';\n\n/**\n * @namespace PUXI\n * @interface\n */\ninterface IScrollingContainerOptions\n{\n scrollX?: boolean;\n scrollY?: boolean;\n dragScrolling?: boolean;\n softness?: number;\n radius?: number;\n expandMask?: number;\n overflowY?: number;\n overflowX?: number;\n scrollBars?: boolean;\n}\n\n/**\n * `ScrollWidget` masks its contents to its layout bounds and translates\n * its children when scrolling. It uses the anchor layout.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.InteractiveGroup\n */\nexport class ScrollWidget extends InteractiveGroup\n{\n private mask: PIXI.Graphics;\n public readonly innerContainer: WidgetGroup;\n private innerBounds: PIXI.Rectangle;\n\n scrollX: boolean;\n scrollY: boolean;\n dragScrolling: boolean;\n softness: number;\n radius: number;\n expandMask: number;\n overflowY: number;\n overflowX: number;\n\n animating: boolean;\n scrolling: boolean;\n\n protected scrollBars: ScrollBar[];\n protected scrollPosition: PIXI.Point;\n protected scrollVelocity: PIXI.Point;\n protected targetPosition: PIXI.Point;\n protected lastPosition: PIXI.Point;\n protected stop: boolean;\n\n private boundCached: number;\n private lastWidth: number;\n private lastHeight: number;\n\n /**\n * @param {PUXI.IScrollingContainerOptions} options\n * @param [options.scrollX=false] {Boolean} Enable horizontal scrolling\n * @param [options.scrollY=false] {Boolean} Enable vertical scrolling\n * @param [options.dragScrolling=true] {Boolean} Enable mousedrag scrolling\n * @param [options.softness=0.5] {Number} (0-1) softness of scrolling\n * @param [options.width=0] {Number|String} container width\n * @param [options.height=0] {Number} container height\n * @param [options.radius=0] {Number} corner radius of clipping mask\n * @param [options.expandMask=0] {Number} mask expand (px)\n * @param [options.overflowY=0] {Number} how much can be scrolled past content dimensions\n * @param [options.overflowX=0] {Number} how much can be scrolled past content dimensions\n */\n constructor(options: IScrollingContainerOptions = {})\n {\n super();\n\n this.mask = new PIXI.Graphics();\n this.innerContainer = new InteractiveGroup();\n this.innerBounds = new PIXI.Rectangle();\n super.addChild(this.innerContainer);\n this.contentContainer.addChild(this.mask);\n this.contentContainer.mask = this.mask;\n\n this.scrollX = options.scrollX !== undefined ? options.scrollX : false;\n this.scrollY = options.scrollY !== undefined ? options.scrollY : false;\n this.dragScrolling = options.dragScrolling !== undefined ? options.dragScrolling : true;\n this.softness = options.softness !== undefined ? Math.max(Math.min(options.softness || 0, 1), 0) : 0.5;\n this.radius = options.radius || 0;\n this.expandMask = options.expandMask || 0;\n this.overflowY = options.overflowY || 0;\n this.overflowX = options.overflowX || 0;\n\n this.scrollVelocity = new PIXI.Point();\n\n /**\n * Widget's position in a scroll.\n * @member {PIXI.Point}\n * @private\n */\n this.scrollPosition = new PIXI.Point();\n\n /**\n * Position that the cursor is at, i.e. our scroll \"target\".\n * @member {PIXI.Point}\n * @private\n */\n this.targetPosition = new PIXI.Point();\n this.lastPosition = new PIXI.Point();\n\n this.useLayout(new BorderLayout());\n\n this.animating = false;\n this.scrolling = false;\n this.scrollBars = [];\n\n if (options.scrollBars && this.scrollX)\n {\n const horizontalScrollBar: ScrollBar = new ScrollBar({\n orientation: ScrollBar.HORIZONTAL,\n scrollingContainer: this,\n minValue: 0,\n maxValue: 1,\n })\n .setLayoutOptions(\n new BorderLayoutOptions({\n width: LayoutOptions.FILL_PARENT,\n height: LayoutOptions.WRAP_CONTENT,\n region: BorderLayoutOptions.REGION_BOTTOM,\n horizontalAlign: ALIGN.CENTER,\n verticalAlign: ALIGN.BOTTOM,\n }),\n )\n .setBackground(0xff)\n .setBackgroundAlpha(0.8) as ScrollBar;\n\n super.addChild(horizontalScrollBar);\n this.scrollBars.push(horizontalScrollBar);\n }\n if (options.scrollBars && this.scrollY)\n {\n const verticalScrollBar: ScrollBar = new ScrollBar({\n orientation: ScrollBar.VERTICAL,\n scrollingContainer: this,\n minValue: 0,\n maxValue: 1,\n })\n .setLayoutOptions(\n new BorderLayoutOptions({\n width: LayoutOptions.WRAP_CONTENT,\n height: LayoutOptions.FILL_PARENT,\n region: BorderLayoutOptions.REGION_RIGHT,\n horizontalAlign: ALIGN.RIGHT,\n verticalAlign: ALIGN.CENTER,\n }),\n )\n .setBackground(0xff)\n .setBackgroundAlpha(0.8) as ScrollBar;\n\n super.addChild(verticalScrollBar);\n this.scrollBars.push(verticalScrollBar);\n }\n\n this.boundCached = 0;\n }\n\n /**\n * Updates the mask and scroll position before rendering.\n *\n * @override\n */\n update(): void\n {\n super.update();\n\n if (this.lastWidth !== this.width || this.lastHeight !== this.height)\n {\n const of = this.expandMask;\n\n this.mask.clear();\n this.mask.lineStyle(0);\n this.mask.beginFill(0xFFFFFF, 1);\n\n if (this.radius === 0)\n {\n this.mask.drawRect(-of, -of, this.width + of, this.height + of);\n }\n else\n {\n this.mask.drawRoundedRect(-of, -of, this.width + of, this.height + of, this.radius);\n }\n\n this.mask.endFill();\n\n this.lastWidth = this.width;\n this.lastHeight = this.height;\n }\n }\n\n /**\n * Adds this scrollbar. It is expected that the given scrollbar has been\n * given proper border-layout options.\n *\n * @todo This only works for TOP, LEFT scrollbars as BOTTOM, RIGHT are occupied.\n * @param {PUXI.ScrollBar} scrollBar\n */\n addScrollBar(scrollBar: ScrollBar): ScrollWidget\n {\n super.addChild(scrollBar);\n this.scrollBars.push(scrollBar);\n\n return this;\n }\n\n /**\n * @param {PUXI.Widget[]} newChildren\n * @returns {ScrollWidget} this widget\n */\n addChild(...newChildren: Widget[]): Widget\n {\n for (let i = 0; i < newChildren.length; i++)\n {\n this.innerContainer.addChild(newChildren[i]);\n }\n\n this.getInnerBounds(true); // make sure bounds is updated instantly when a child is added\n\n return this;\n }\n\n /**\n * Updates the scroll bar values, and should be called when scrolled.\n */\n updateScrollBars(): void\n {\n for (let i = 0, j = this.scrollBars.length; i < j; i++)\n {\n const scrollBar = this.scrollBars[i];\n\n if (scrollBar.orientation === Slider.HORIZONTAL)\n {\n const x = this.getPercentPosition('x');\n\n scrollBar.value = x;\n }\n else if (scrollBar.orientation === Slider.VERTICAL)\n {\n const y = this.getPercentPosition('y');\n\n scrollBar.value = y;\n }\n }\n }\n\n getInnerBounds(force?: boolean): PIXI.Rectangle\n {\n // this is a temporary fix, because we cant rely on innercontainer height if the children is positioned > 0 y.\n if (force || performance.now() - this.boundCached > 1000)\n {\n this.innerContainer.insetContainer.getLocalBounds(this.innerBounds);\n\n this.innerBounds.height = this.innerBounds.y + this.innerContainer.height || 0;\n this.innerBounds.width = this.innerBounds.x + this.innerContainer.width || 0;\n this.boundCached = performance.now();\n }\n\n return this.innerBounds;\n }\n\n /**\n * @override\n */\n initialize(): void\n {\n super.initialize();\n\n if (this.scrollX || this.scrollY)\n {\n this.initScrolling();\n }\n }\n\n private initScrolling(): void\n {\n const container = this.innerContainer.insetContainer;\n const realPosition = new PIXI.Point();\n const {\n scrollPosition,\n targetPosition,\n } = this;\n\n // Drag scroll\n if (this.dragScrolling)\n {\n const drag: DragManager = this.eventBroker.dnd as DragManager;\n\n drag.onDragStart = (e): void =>\n {\n if (!this.scrolling)\n {\n realPosition.copyFrom(container.position);\n scrollPosition.copyFrom(container.position);\n this.scrolling = true;\n this.setScrollPosition();\n\n this.emit('scrollstart', e);\n }\n };\n\n drag.onDragMove = (_, offset): void =>\n {\n if (this.scrollX)\n {\n targetPosition.x = realPosition.x + offset.x;\n }\n if (this.scrollY)\n {\n targetPosition.y = realPosition.y + offset.y;\n }\n\n this.setScrollPosition();\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n drag.onDragEnd = (e): void =>\n {\n if (this.scrolling)\n {\n this.scrolling = false;\n this.emit('scrollend', e);\n }\n };\n }\n\n // Mouse scroll\n const scrollSpeed = new PIXI.Point();\n const scroll = new ScrollManager(this, true);\n\n scroll.onMouseScroll = (e, delta: PIXI.Point): void =>\n {\n scrollSpeed.set(-delta.x * 0.2, -delta.y * 0.2);\n this.setScrollPosition(scrollSpeed);\n };\n\n this.updateScrollBars();\n }\n\n /**\n * @param {string} direction - `'x'` or `'y'`\n * @returns {number} a value between 0 and 1 indicating how scrolling\n * has occured in that direction (called percent position).\n */\n getPercentPosition(direction: 'x' | 'y'): number\n {\n const bounds = this.getInnerBounds();\n const container = this.innerContainer.insetContainer;\n\n if (direction === 'x')\n {\n return container.x / (this.width - bounds.width);\n }\n else if (direction === 'y')\n {\n return container.y / (this.height - bounds.height);\n }\n\n return 0;\n }\n\n forcePctPosition = (direction: string, pct: number): void =>\n {\n const bounds = this.getInnerBounds();\n const container = this.innerContainer.insetContainer;\n\n if (this.scrollX && direction === 'x')\n {\n container.position[direction] = -((bounds.width - this.width) * pct);\n }\n if (this.scrollY && direction === 'y')\n {\n container.position[direction] = -((bounds.height - this.height) * pct);\n }\n\n this.scrollPosition[direction] = this.targetPosition[direction] = container.position[direction];\n };\n\n focusPosition = (pos: PIXI.Point): void =>\n {\n const bounds = this.getInnerBounds();\n const container = this.innerContainer.insetContainer;\n\n let dif;\n\n if (this.scrollX)\n {\n const x = Math.max(0, (Math.min(bounds.width, pos.x)));\n\n if (x + container.x > this.width)\n {\n dif = x - this.width;\n container.x = -dif;\n }\n else if (x + container.x < 0)\n {\n dif = x + container.x;\n container.x -= dif;\n }\n }\n if (this.scrollY)\n {\n const y = Math.max(0, (Math.min(bounds.height, pos.y)));\n\n if (y + container.y > this.height)\n {\n dif = y - this.height;\n container.y = -dif;\n }\n else if (y + container.y < 0)\n {\n dif = y + container.y;\n container.y -= dif;\n }\n }\n\n this.lastPosition.copyFrom(container.position);\n this.targetPosition.copyFrom(container.position);\n this.scrollPosition.copyFrom(container.position);\n\n this.updateScrollBars();\n };\n\n /**\n * @param {PIXI.Point}[velocity]\n */\n setScrollPosition = (velocity?: PIXI.Point): void =>\n {\n if (velocity)\n {\n this.scrollVelocity.copyFrom(velocity);\n }\n\n const container = this.innerContainer.insetContainer;\n\n if (!this.animating)\n {\n this.animating = true;\n this.lastPosition.copyFrom(container.position);\n this.targetPosition.copyFrom(container.position);\n\n PIXI.Ticker.shared.add(this.updateScrollPosition);\n }\n };\n\n /**\n * @param {number} delta\n * @protected\n */\n protected updateScrollPosition = (delta: number): void =>\n {\n this.stop = true;\n\n if (this.scrollX)\n {\n this.updateDirection('x', delta);\n }\n if (this.scrollY)\n {\n this.updateDirection('y', delta);\n }\n\n if (this.stop)\n {\n PIXI.Ticker.shared.remove(this.updateScrollPosition);\n this.animating = false;\n }\n\n this.updateScrollBars();\n };\n\n /**\n * @param {'x' | 'y'} direction\n * @param {number} delta\n * @protected\n */\n protected updateDirection = (direction: string, delta: number): void =>\n {\n const bounds = this.getInnerBounds();\n const {\n scrollPosition,\n scrollVelocity,\n targetPosition,\n lastPosition,\n } = this;\n const container = this.innerContainer.insetContainer;\n\n let min;\n\n if (direction === 'y')\n {\n min = Math.round(Math.min(0, this.height - bounds.height));\n }\n else\n {\n min = Math.round(Math.min(0, this.width - bounds.width));\n }\n\n if (!this.scrolling && Math.round(scrollVelocity[direction]) !== 0)\n {\n targetPosition[direction] += scrollVelocity[direction];\n scrollVelocity[direction] = Helpers.Lerp(\n scrollVelocity[direction],\n 0,\n (5 + 2.5 / Math.max(this.softness, 0.01)) * delta);\n\n if (targetPosition[direction] > 0)\n {\n targetPosition[direction] = 0;\n }\n else if (targetPosition[direction] < min)\n {\n targetPosition[direction] = min;\n }\n }\n\n if (!this.scrolling\n && Math.round(scrollVelocity[direction]) === 0\n && (container[direction] > 0\n || container[direction] < min))\n {\n const target = this.scrollPosition[direction] > 0 ? 0 : min;\n\n scrollPosition[direction] = Helpers.Lerp(\n scrollPosition[direction],\n target,\n (40 - (30 * this.softness)) * delta);\n this.stop = false;\n }\n else if (this.scrolling || Math.round(scrollVelocity[direction]) !== 0)\n {\n if (this.scrolling)\n {\n scrollVelocity[direction] = this.scrollPosition[direction] - lastPosition[direction];\n lastPosition.copyFrom(scrollPosition);\n }\n if (targetPosition[direction] > 0)\n {\n scrollVelocity[direction] = 0;\n scrollPosition[direction] = 100 * this.softness * (1 - Math.exp(targetPosition[direction] / -200));\n }\n else if (targetPosition[direction] < min)\n {\n scrollVelocity[direction] = 0;\n scrollPosition[direction] = min - (100 * this.softness * (1 - Math.exp((min - targetPosition[direction]) / -200)));\n }\n else\n {\n scrollPosition[direction] = targetPosition[direction];\n }\n\n this.stop = false;\n }\n\n container.position[direction] = Math.round(scrollPosition[direction]);\n };\n\n /**\n * This is fired when the user starts scrolling.\n * @event scrollstart\n */\n\n /**\n * This is fired when the user stops scrolling.\n * @event scrollend\n */\n}\n","import { InteractiveGroup } from './InteractiveGroup';\nimport { Tween } from './Tween';\nimport { EaseBase } from './Ease/EaseBase';\nimport { Widget } from './Widget';\n\n/**\n * An UI Container object\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n * @param desc {Boolean} Sort the list descending\n * @param tweenTime {Number} if above 0 the sort will be animated\n * @param tweenEase {PIXI.UI.Ease} ease method used for animation\n */\nexport class SortableList extends InteractiveGroup\n{\n desc: boolean;\n tweenTime: number;\n tweenEase: EaseBase;\n items: any[];\n\n _sortTimeout: NodeJS.Timeout;\n\n constructor(desc, tweenTime, tweenEase)\n {\n super(0, 0);\n\n this.desc = typeof desc !== 'undefined' ? desc : false;\n this.tweenTime = tweenTime || 0;\n this.tweenEase = tweenEase;\n this.items = [];\n }\n\n addChild(UIObject: any, fnValue?, fnThenBy?): void\n {\n super.addChild(UIObject);\n\n if (this.items.indexOf(UIObject) === -1)\n {\n this.items.push(UIObject);\n }\n\n if (typeof fnValue === 'function')\n {\n UIObject._sortListValue = fnValue;\n }\n\n if (typeof fnThenBy === 'function')\n {\n UIObject._sortListThenByValue = fnThenBy;\n }\n\n if (!UIObject._sortListRnd)\n {\n UIObject._sortListRnd = Math.random();\n }\n\n this.sort();\n }\n\n removeChild(UIObject): void\n {\n if (arguments.length > 1)\n {\n for (let i = 0; i < arguments.length; i++)\n {\n this.removeChild(arguments[i]);\n }\n }\n else\n {\n super.removeChild(UIObject);\n const index = this.items.indexOf(UIObject);\n\n if (index !== -1)\n {\n this.items.splice(index, 1);\n }\n\n this.sort();\n }\n }\n\n sort(instant = false): void\n {\n clearTimeout(this._sortTimeout);\n\n if (instant)\n {\n this._sort();\n\n return;\n }\n\n this._sortTimeout = setTimeout(() => { this._sort(); }, 0);\n }\n\n _sort()\n {\n const desc = this.desc;\n let y = 0;\n let alt = true;\n\n this.items.sort(function (a, b)\n {\n let res = a._sortListValue() < b._sortListValue() ? desc ? 1 : -1\n : a._sortListValue() > b._sortListValue() ? desc ? -1 : 1 : 0;\n\n if (res === 0 && a._sortListThenByValue && b._sortListThenByValue)\n {\n res = a._sortListThenByValue() < b._sortListThenByValue() ? desc ? 1 : -1\n : a._sortListThenByValue() > b._sortListThenByValue() ? desc ? -1 : 1 : 0;\n }\n if (res === 0)\n {\n res = a._sortListRnd > b._sortListRnd ? 1\n : a._sortListRnd < b._sortListRnd ? -1 : 0;\n }\n\n return res;\n });\n\n for (let i = 0; i < this.items.length; i++)\n {\n const item = this.items[i];\n\n alt = !alt;\n\n if (this.tweenTime > 0)\n {\n Tween.fromTo(item, this.tweenTime, { x: item.x, y: item.y }, { x: 0, y }, this.tweenEase);\n }\n else\n {\n item.x = 0;\n item.y = y;\n }\n y += item.height;\n if (typeof item.altering === 'function')\n { item.altering(alt); }\n }\n\n // force it to update parents when sort animation is done (prevent scrolling container bug)\n if (this.tweenTime > 0)\n {\n setTimeout(() =>\n {\n this.updatesettings(false, true);\n }, this.tweenTime * 1000);\n }\n }\n}\n\n","import { Widget } from './Widget';\nimport * as PIXI from 'pixi.js';\n\n/**\n * A sliced sprite with dynamic width and height.\n *\n * @class\n * @memberof PUXI\n * @param Texture {PIXI.Texture} the texture for this SliceSprite\n * @param BorderWidth {Number} Width of the sprite borders\n * @param horizontalSlice {Boolean} Slice the sprite horizontically\n * @param verticalSlice {Boolean} Slice the sprite vertically\n * @param [tile=false] {Boolean} tile or streach\n */\nexport class SliceSprite extends Widget\n{\n ftl: PIXI.Rectangle;\n ftr: PIXI.Rectangle;\n\n fbl: PIXI.Rectangle;\n fbr: PIXI.Rectangle;\n\n ft: PIXI.Rectangle;\n fb: PIXI.Rectangle;\n fr: PIXI.Rectangle;\n fl: PIXI.Rectangle;\n ff: PIXI.Rectangle;\n\n stl: PIXI.Sprite;\n str: PIXI.Sprite;\n sbl: PIXI.Sprite;\n sbr: PIXI.Sprite;\n\n st: PIXI.Sprite;\n sb: PIXI.Sprite;\n sl: PIXI.Sprite;\n sr: PIXI.Sprite;\n\n sf: PIXI.Sprite;\n\n bw: number;\n vs: boolean;\n hs: boolean;\n t: PIXI.BaseTexture;\n f: PIXI.Rectangle;\n\n tile: any;\n\n constructor(texture: PIXI.Texture, borderWidth, horizontalSlice, verticalSlice, tile)\n {\n super(texture.width, texture.height);\n\n this.bw = borderWidth || 5;\n this.vs = typeof verticalSlice !== 'undefined' ? verticalSlice : true;\n this.hs = typeof horizontalSlice !== 'undefined' ? horizontalSlice : true;\n this.t = texture.baseTexture;\n this.f = texture.frame;\n this.tile = tile;\n\n if (this.hs)\n {\n this.setting.minWidth = borderWidth * 2;\n }\n if (this.vs)\n {\n this.setting.minHeight = borderWidth * 2;\n }\n\n /**\n * Updates the sliced sprites position and size\n *\n * @private\n */\n this.update = function ()\n {\n if (!this.initialized) return;\n if (vs && hs)\n {\n str.x = sbr.x = sr.x = this._width - bw;\n sbl.y = sbr.y = sb.y = this._height - bw;\n sf.width = st.width = sb.width = this._width - bw * 2;\n sf.height = sl.height = sr.height = this._height - bw * 2;\n }\n else if (hs)\n {\n sr.x = this._width - bw;\n sl.height = sr.height = sf.height = this._height;\n sf.width = this._width - bw * 2;\n }\n else\n { // vs\n sb.y = this._height - bw;\n st.width = sb.width = sf.width = this._width;\n sf.height = this._height - bw * 2;\n }\n\n if (this.tint !== null)\n {\n sf.tint = this.tint;\n if (vs && hs) stl.tint = str.tint = sbl.tint = sbr.tint = this.tint;\n if (hs) sl.tint = sr.tint = this.tint;\n if (vs) st.tint = sb.tint = this.tint;\n }\n\n if (this.blendMode !== null)\n {\n sf.blendMode = this.blendMode;\n if (vs && hs) stl.blendMode = str.blendMode = sbl.blendMode = sbr.blendMode = this.blendMode;\n if (hs) sl.blendMode = sr.blendMode = this.blendMode;\n if (vs) st.blendMode = sb.blendMode = this.blendMode;\n }\n };\n }\n\n initialize()\n {\n super.initialize();\n const { f, bw } = this;\n\n // get frames\n if (this.vs && this.hs)\n {\n this.ftl = new PIXI.Rectangle(f.x, f.y, bw, bw);\n this.ftr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, bw);\n this.fbl = new PIXI.Rectangle(f.x, f.y + f.height - bw, bw, bw);\n this.fbr = new PIXI.Rectangle(f.x + f.width - bw, f.y + f.height - bw, bw, bw);\n this.ft = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, bw);\n this.fb = new PIXI.Rectangle(f.x + bw, f.y + f.height - bw, f.width - bw * 2, bw);\n this.fl = new PIXI.Rectangle(f.x, f.y + bw, bw, f.height - bw * 2);\n this.fr = new PIXI.Rectangle(f.x + f.width - bw, f.y + bw, bw, f.height - bw * 2);\n this.ff = new PIXI.Rectangle(f.x + bw, f.y + bw, f.width - bw * 2, f.height - bw * 2);\n }\n else if (this.hs)\n {\n this.fl = new PIXI.Rectangle(this.f.x, f.y, bw, f.height);\n this.fr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, f.height);\n this.ff = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, f.height);\n }\n else\n { // vs\n this.ft = new PIXI.Rectangle(f.x, f.y, f.width, bw);\n this.fb = new PIXI.Rectangle(f.x, f.y + f.height - bw, f.width, bw);\n this.ff = new PIXI.Rectangle(f.x, f.y + bw, f.width, f.height - bw * 2);\n }\n\n // TODO: swap frames if rotation\n\n const { t, ff, fl, fr, ft, fb } = this;\n\n // make sprites\n this.sf = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, ff))\n : new PIXI.Sprite(new PIXI.Texture(t, ff));\n this.contentContainer.addChildAt(this.sf, 0);\n\n if (this.vs && this.hs)\n {\n this.stl = new PIXI.Sprite(new PIXI.Texture(t, this.ftl));\n this.str = new PIXI.Sprite(new PIXI.Texture(t, this.ftr));\n this.sbl = new PIXI.Sprite(new PIXI.Texture(t, this.fbl));\n this.sbr = new PIXI.Sprite(new PIXI.Texture(t, this.fbr));\n this.contentContainer.addChildAt(this.stl, 0);\n this.contentContainer.addChildAt(this.str, 0);\n this.contentContainer.addChildAt(this.sbl, 0);\n this.contentContainer.addChildAt(this.sbr, 0);\n }\n if (hs)\n {\n this.sl = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, fl))\n : new PIXI.Sprite(new PIXI.Texture(t, fl));\n this.sr = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, fr))\n : new PIXI.Sprite(new PIXI.Texture(t, fr));\n\n this.contentContainer.addChildAt(this.sl, 0);\n this.contentContainer.addChildAt(this.sr, 0);\n }\n if (this.vs)\n {\n this.st = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, ft))\n : new PIXI.Sprite(new PIXI.Texture(t, ft));\n this.sb = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, fb))\n : new PIXI.Sprite(new PIXI.Texture(t, fb));\n this.contentContainer.addChildAt(this.st, 0);\n this.contentContainer.addChildAt(this.sb, 0);\n }\n\n // set constant position and sizes\n if (this.vs && this.hs)\n {\n this.st.x = bw;\n this.sb.x = bw;\n this.sl.y = bw;\n this.sr.y = bw;\n this.stl.width = bw;\n this.str.width = bw;\n this.sbl.width = bw;\n this.sbr.width = bw;\n this.stl.height = bw;\n this.str.height = bw;\n this.sbl.height = bw;\n this.sbr.height = bw;\n }\n\n if (this.hs)\n {\n this.sf.x = this.sl.width = this.sr.width = bw;\n }\n if (this.vs)\n {\n this.sf.y = this.st.height = this.sb.height = bw;\n }\n }\n\n update(): void\n {\n // NO updates\n }\n}\n\n","import { Stage } from '../Stage';\nimport { Widget } from '../Widget';\nimport * as PIXI from 'pixi.js';\n\nexport abstract class Controller extends PIXI.utils.EventEmitter\n{\n stage: Stage;\n\n constructor(stage: Stage)\n {\n super();\n this.stage = stage;\n }\n\n abstract in(widget: T): any;\n\n abstract out(widget: T): any;\n}\n\n/**\n * A controller handles a stage-level state that can be held by wigets. For example,\n * `PUXI.FocusController` handles which widget is focused.\n *\n * @memberof PUXI\n * @class Controller\n */\n\n/**\n * Enables the widget to enter the controller's state.\n *\n * @memberof PUXI.Controller#\n * @method in\n * @param {PUXI.Widget} widget\n */\n\n/**\n * Disables the widget from the controller's state.\n *\n * @memberof PUXI.Controller#\n * @method out\n * @param {PUXI.Widget} widget\n */\n","import { Controller } from './Controller';\nimport { CheckBox } from '../CheckBox';\nimport { Stage } from '../Stage';\n\nexport type CheckGroup = string;\n\n/**\n * @memberof PUXI\n * @typedef {string} CheckGroup\n */\n\ninterface CBGroup\n{\n checks: Array;\n selected: CheckBox;\n}\n\n/**\n * Check boxes use this controller to deselect other checkboxes in the group when\n * they are selected.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Controller\n */\nexport class CheckBoxGroupController extends Controller\n{\n protected checkGroups: Map;\n\n constructor(stage: Stage)\n {\n super(stage);\n this.checkGroups = new Map();\n }\n\n /**\n * @param {PUXI.CheckBox} widget\n * @param {PUXI.CheckGroup} checkGroup\n * @override\n */\n in(widget: CheckBox, checkGroup?: CheckGroup): void\n {\n if (!checkGroup)\n {\n throw new Error('Default check groups don\\'t exist!');\n }\n\n const group = this.checkGroups.get(checkGroup) || this.initGroup(checkGroup);\n\n group.checks.push(widget);\n widget.checkGroup = checkGroup;\n }\n\n /**\n * @override\n */\n out(widget: CheckBox): void\n {\n const group = this.checkGroups.get(widget.checkGroup);\n const i = group.checks.indexOf(widget);\n\n if (i > 0)\n {\n group.checks.splice(i, 1);\n }\n\n widget.checkGroup = null;\n }\n\n /**\n * Called when a checkbox is selected. Do not call from outside.\n *\n * @param {CheckBox} widget\n */\n notifyCheck(widget: CheckBox): void\n {\n const group = this.checkGroups.get(widget.checkGroup);\n\n if (!group)\n {\n return;\n }\n\n const { checks } = group;\n\n for (let i = 0, j = checks.length; i < j; i++)\n {\n if (checks[i] !== widget)\n {\n checks[i].checked = false;\n }\n }\n\n group.selected = widget;\n }\n\n /**\n * @param {PUXI.CheckGroup} group\n * @returns {CheckBox} the selected checkbox in the group\n */\n getSelected(group: CheckGroup): CheckBox\n {\n return this.checkGroups.get(group)?.selected;\n }\n\n /**\n * Ensures that the check group exists in `this.checkGroups`.\n *\n * @param {PUXI.CheckGroup} id\n * @protected\n */\n protected initGroup(id: CheckGroup): CBGroup\n {\n const cgroup: CBGroup = {\n checks: [],\n selected: null,\n };\n\n this.checkGroups.set(id, cgroup);\n\n return cgroup;\n }\n}\n","import { Controller } from './Controller';\nimport { Stage } from '../Stage';\nimport { IFocusable } from '../IFocusable';\n\nexport type TabGroup = string;\n\n/**\n * Pressing tab on a focused widget will make the next widget its tab group\n * focused. If no tab group is specified for a focusable widget, then it\n * has the `'default'` tab group.\n *\n * @memberof PUXI\n * @typedef {string} TabGroup\n */\n\n/**\n * @memberof PUXI\n * @class\n * @extends PUXI.Controller\n */\nexport class FocusController extends Controller\n{\n stage: Stage;\n\n protected tabGroups: Map;\n protected currentItem: IFocusable;\n\n useTab: boolean;\n useForward: boolean;\n useBack: boolean;\n\n constructor(stage: Stage)\n {\n super(stage);\n\n /**\n * Map of tab-group names to the widgets in those groups.\n * @member {Map}\n * @protected\n */\n this.tabGroups = new Map();\n\n /**\n * Whether to enable tab-based focus movement.\n * @member {boolean}\n */\n this.useTab = true;\n\n /**\n * Whether to enable forward arrow key focus movement.\n * @member {boolean}\n */\n this.useForward = true;\n\n /**\n * Whether to enable back arrow key focus movement.\n * @member {boolean}\n */\n this.useBack = true;\n }\n\n /**\n * Adds the (focusable) widget to the tab group so that pressing tab repeatedly\n * will eventually bring it into focus.\n *\n * @param {PUXI.IFocusable} widget - the widget to add\n * @param {number}[tabIndex=0] - unique index for the widget in tab group used for ordering\n * @param {PUXI.TabGroup}[tabGroup='default'] - tab group name\n */\n in(widget: IFocusable, tabIndex = 0, tabGroup = 'default'): void\n {\n let widgets = this.tabGroups.get(tabGroup);\n\n if (!widgets)\n {\n widgets = [];\n this.tabGroups.set(tabGroup, widgets);\n }\n\n const i = widgets.indexOf(widget);\n\n // Push widget into tab group list if not present already.\n if (i === -1)\n {\n widget.tabIndex = tabIndex !== undefined ? tabIndex : -1;\n widget.tabGroup = tabGroup;\n\n widgets.push(widget);\n widgets.sort((a, b) => a.tabIndex - b.tabIndex);\n }\n }\n\n /**\n * @param {PUXI.IFocusable} widget\n * @override\n */\n out(widget: IFocusable): void\n {\n const widgets = this.tabGroups.get(widget.tabGroup);\n\n if (!widgets)\n {\n return;\n }\n\n const i = widgets.indexOf(widget);\n\n if (i !== -1)\n {\n // Widgets should already be sorted & so deleting should not unsort it.\n widgets.splice(i, 1);\n }\n }\n\n /**\n * Called when a widget comes into focus. Do not call this yourself.\n *\n * @param {IFocusable} widget\n */\n notifyFocus(widget: IFocusable): void\n {\n const lastItem = this.currentItem;\n\n if (lastItem)\n {\n lastItem.blur();\n this.emit('blur', lastItem);\n }\n\n this.currentItem = widget;\n\n this.emit('focus', widget);\n this.emit('focusChanged', widget, lastItem);\n }\n\n /**\n * Clears the currently focused item without blurring it. It is called\n * when a widget goes out of focus.\n */\n notifyBlur(): void\n {\n this.emit('blur', this.currentItem);\n this.emit('focusChanged', null, this.currentItem);\n\n this.currentItem = null;\n }\n\n /**\n * Brings the widget into focus.\n *\n * @param {IFocusable} item\n */\n focus(item: IFocusable): void\n {\n const lastItem = this.currentItem;\n\n if (lastItem)\n {\n lastItem.blur();\n this.emit('blur', lastItem);\n }\n\n item.focus();\n\n this.emit('focus', item);\n this.emit('focusChanged', item, lastItem);\n }\n\n /**\n * Blurs the currently focused widget out of focus.\n */\n blur(): void\n {\n if (this.currentItem)\n {\n this.currentItem.blur();\n\n this.emit('blur', this.currentItem);\n this.emit('focusChanged', null, this.currentItem);\n\n this.currentItem = null;\n }\n }\n\n /**\n * Called when tab is pressed on a focusable widget.\n */\n onTab(): void\n {\n const { tabGroups, currentItem } = this;\n\n if (currentItem)\n {\n const tabGroup = tabGroups.get(currentItem.tabGroup);\n\n let i = tabGroup.indexOf(currentItem) + 1;\n\n if (i >= tabGroup.length)\n {\n i = 0;\n }\n\n this.focus(tabGroup[i]);\n }\n }\n\n /**\n * Focuses the next item without wrapping, i.e. it does not go to the first\n * item if the current one is the last item. This is called when the user\n * presses the forward arrow key.\n */\n onForward(): void\n {\n if (!this.useForward)\n {\n return;\n }\n\n const { currentItem, tabGroups } = this;\n\n if (currentItem)\n {\n const tabGroup = tabGroups.get(currentItem.tabGroup);\n\n let i = tabGroup.indexOf(currentItem) + 1;\n\n if (i >= tabGroup.length)\n {\n i = tabGroup.length - 1;\n }\n\n this.focus(tabGroup[i]);\n }\n }\n\n /**\n * Focuses the last item without wrapping, i.e. it does not go to the last\n * item if the current item is the first one. This is called when the user\n * presses the back arrow button.\n */\n onBack(): void\n {\n const { currentItem, tabGroups } = this;\n\n if (currentItem)\n {\n const tabGroup = tabGroups.get(currentItem.tabGroup);\n let i = tabGroup.indexOf(currentItem) - 1;\n\n if (i < 0) i = 0;\n\n this.focus(tabGroup[i]);\n }\n }\n\n /**\n * Fired when a widget gains focus.\n * @event focus\n * @param {PUXI.IFocusable} widget - the widget that gained focus.\n */\n\n /**\n * Fired when a widget looses focus.\n * @event blur\n * @param {PUXI.IFocusable} widget - the widget that lost focus.\n */\n\n /**\n * Fired when a new widget comes into focus or one looses focus.\n * @event focusChanged\n * @param {PUXI.IFocusable}[newFocus] - the widget that came into focus. It may\n * be null if only a blur occured.\n * @param {PUXI.IFocusable}[oldFocus] - the widget that lost focus. It may be\n * null if a widget gained focused for the first time.\n */\n}\n","import { Widget } from './Widget';\nimport * as PIXI from 'pixi.js';\nimport { MeasureMode } from './IMeasurable';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { FocusController, Controller, CheckBoxGroupController } from './ctl';\n\n/**\n * The stage is the root node in the PUXI scene graph. It does not provide a\n * sophisticated layout model; however, it will accept constraints defined by\n * `PUXI.FastLayoutOptions` or `PUXI.LayoutOptions` in its children.\n *\n * The stage is not a `PUXI.Widget` and its dimensions are always fixed.\n *\n * @memberof PUXI\n * @class\n * @extends PIXI.Container\n */\nexport class Stage extends PIXI.Container\n{\n __width: number;\n __height: number;\n minWidth: number;\n minHeight: number;\n initialized: boolean;\n widgetChildren: Widget[];\n\n stage: any;\n\n private _checkBoxGroupCtl: CheckBoxGroupController;\n private _focusCtl: FocusController;\n\n protected background: PIXI.Container;\n\n /**\n * @param {number} width - width of the stage\n * @param {number} height - height of the stage\n */\n constructor(width: number, height: number)\n {\n super();\n\n this.__width = width;\n this.__height = height;\n this.minWidth = 0;\n this.minHeight = 0;\n\n this.widgetChildren = [];\n this.interactive = true;\n this.stage = this;\n this.hitArea = new PIXI.Rectangle(0, 0, 0, 0);\n this.initialized = true;\n this.resize(width, height);\n\n this._checkBoxGroupCtl = new Stage.CHECK_BOX_GROUP_CONTROLLER(this);\n this._focusCtl = new Stage.FOCUS_CONTROLLER(this);\n }\n\n public measureAndLayout(): void\n {\n if (this.background)\n {\n this.background.width = this.width;\n this.background.height = this.height;\n }\n\n for (let i = 0, j = this.widgetChildren.length; i < j; i++)\n {\n const widget = this.widgetChildren[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n\n const widthMeasureMode = lopt.width < LayoutOptions.MAX_DIMEN\n ? MeasureMode.EXACTLY\n : MeasureMode.AT_MOST;\n const heightMeasureMode = lopt.height < LayoutOptions.MAX_DIMEN\n ? MeasureMode.EXACTLY\n : MeasureMode.AT_MOST;\n const loptWidth = (Math.abs(lopt.width) < 1) ? lopt.width * this.width : lopt.width;\n const loptHeight = (Math.abs(lopt.height) < 1) ? lopt.height * this.height : lopt.height;\n\n widget.measure(\n widthMeasureMode === MeasureMode.EXACTLY ? loptWidth : this.width,\n heightMeasureMode === MeasureMode.EXACTLY ? loptHeight : this.height,\n widthMeasureMode,\n heightMeasureMode);\n\n let x = lopt.x ? lopt.x : 0;\n let y = lopt.y ? lopt.y : 0;\n\n if (Math.abs(x) < 1)\n {\n x *= this.width;\n }\n if (Math.abs(y) < 1)\n {\n y *= this.height;\n }\n\n const anchor = lopt.anchor || FastLayoutOptions.DEFAULT_ANCHOR;\n const l = x - (anchor.x * widget.getMeasuredWidth());\n const t = y - (anchor.y * widget.getMeasuredHeight());\n\n widget.layout(l, t,\n l + widget.getMeasuredWidth(),\n t + widget.getMeasuredHeight(),\n true);\n }\n }\n\n getBackground(): PIXI.Container\n {\n return this.background;\n }\n\n setBackground(bg: PIXI.Container): void\n {\n if (this.background)\n {\n super.removeChild(this.background);\n }\n\n this.background = bg;\n\n if (bg)\n {\n super.addChildAt(bg, 0);\n\n this.background.width = this.width;\n this.background.height = this.height;\n }\n }\n\n private update(widgets: Widget[]): void\n {\n this.emit('preupdate', this);\n\n for (let i = 0, j = widgets.length; i < j; i++)\n {\n const widget = widgets[i];\n\n widget.stage = this;\n\n if (!widget.initialized)\n {\n widget.initialize();\n }\n\n this.update(widget.widgetChildren);\n widget.update();\n }\n\n this.emit('postupdate', this);\n }\n\n render(renderer: PIXI.Renderer): void\n {\n this.update(this.widgetChildren);\n super.render(renderer);\n }\n\n addChild(UIObject: Widget): void\n {\n const argumentLenght = arguments.length;\n\n if (argumentLenght > 1)\n {\n for (let i = 0; i < argumentLenght; i++)\n {\n this.addChild(arguments[i]);\n }\n }\n else\n {\n if (UIObject.parent)\n {\n UIObject.parent.removeChild(UIObject);\n }\n\n UIObject.parent = this;\n this.widgetChildren.push(UIObject);\n super.addChild(UIObject.insetContainer);\n // UIObject.updatesettings(true);\n }\n\n this.measureAndLayout();\n }\n\n removeChild(UIObject: Widget): void\n {\n const argumentLenght = arguments.length;\n\n if (argumentLenght > 1)\n {\n for (let i = 0; i < argumentLenght; i++)\n {\n this.removeChild(arguments[i]);\n }\n }\n else\n {\n super.removeChild(UIObject.insetContainer);\n\n const index = this.widgetChildren.indexOf(UIObject);\n\n if (index !== -1)\n {\n this.children.splice(index, 1);\n UIObject.parent = null;\n }\n }\n\n this.measureAndLayout();\n }\n\n resize(width?: number, height?: number): void\n {\n this.width = width;\n this.height = height;\n\n if (this.hitArea)\n {\n (this.hitArea as PIXI.Rectangle).width = this.__width;\n (this.hitArea as PIXI.Rectangle).height = this.__height;\n }\n\n this.measureAndLayout();\n }\n\n get width(): number\n {\n return this.__width;\n }\n set width(val: number)\n {\n if (!isNaN(val))\n {\n this.__width = val;\n this.resize();\n }\n }\n\n get height(): number\n {\n return this.__height;\n }\n set height(val: number)\n {\n if (!isNaN(val))\n {\n this.__height = val;\n this.resize();\n }\n }\n\n /**\n * The check box group controller for check boxes in this stage.\n *\n * @member {PUXI.CheckBoxGroupController}\n */\n get checkBoxGroupController(): CheckBoxGroupController\n {\n return this._checkBoxGroupCtl;\n }\n\n /**\n * The focus controller for widgets in this stage. You can use this to bring a\n * widget into focus.\n *\n * @member {PUXI.FocusController}\n */\n get focusController(): FocusController\n {\n return this._focusCtl;\n }\n\n /**\n * Use this to override which class is used for the check box group controller. It\n * should extend from `PUXI.CheckBoxGroupController`.\n *\n * @static\n */\n static CHECK_BOX_GROUP_CONTROLLER: typeof CheckBoxGroupController = CheckBoxGroupController;\n\n /**\n * Use this to override which class is used for the focus controller. It should\n * extend from `PUXI.FocusController`.\n *\n * @static\n */\n static FOCUS_CONTROLLER: typeof FocusController = FocusController;\n}\n","import * as PIXI from 'pixi.js';\n\nexport type StyleData = {\n [id: string]: any;\n backgroundColor?: string | number;\n background?: PIXI.Container;\n fontFamily?: string;\n fontSize?: number;\n paddingLeft?: number;\n paddingTop?: number;\n paddingRight?: number;\n paddingBottom?: number;\n padding?: number;\n\n// [':hover']?: StyleData;\n// [':focus']?: StyleData;\n};\n\n/**\n * A StyleSheet provides a mechansim to style widgets in a shared fashion.\n */\nexport class Style extends PIXI.utils.EventEmitter\n{\n public dirtyID: number;\n\n private data: StyleData;\n private extends: Style[];\n\n private computedData: StyleData;\n private computedDirty: boolean;\n\n constructor(data: StyleData = {})\n {\n super();\n\n this.dirtyID = 0;\n\n this.data = data;\n this.extends = [];\n\n this.computedData = data;\n this.computedDirty = false;\n }\n\n /**\n * @param prop\n */\n getProperty(prop: string): any\n {\n if (this.computedDirty)\n {\n this.compute();\n }\n\n return this.computedData[prop];\n }\n\n /**\n * @param props\n * @example\n * style.getProperties('paddingLeft', 'paddingRight')\n */\n getProperties(...props: string[]): Record\n {\n if (this.computedDirty)\n {\n this.compute();\n }\n\n const result = { };\n\n for (let i = 0, j = props.length; i < j; i++)\n {\n result[props[i]] = this.computedData[props[i]];\n }\n\n return result;\n }\n\n /**\n * @param prop\n * @param value\n */\n setProperty(prop: string, value: any): void\n {\n // Ensure computedData is up-to-date to ensure child styles get the correct information.\n if (this.computedDirty)\n {\n this.compute();\n }\n\n this.data[prop] = value;\n this.computedData[prop] = value;\n this.emit('setProperty', prop, value, this);\n\n ++this.dirtyID;\n }\n\n /**\n * Extend the given style so that properties not set on this style are derived from it. If multiple styles\n * are extended, the ones extended later have a higher priority.\n *\n * @param style\n */\n extend(style: Style): void\n {\n this.extends.push(style);\n this.computedDirty = true;\n\n ++this.dirtyID;\n\n // Recompute the set-property for this style\n style.on('setProperty', this.onParentSetProperty);\n }\n\n /**\n * Recomputes the style data\n */\n private compute(): void\n {\n const superStyles = this.extends;\n\n this.computedData = {};\n\n for (let i = 0, j = superStyles.length; i < j; i++)\n {\n Object.assign(this.computedData, superStyles[i].computedData);\n }\n\n this.computedDirty = false;\n }\n\n private onParentSetProperty = (propertyName: string, value: any, style: Style): void =>\n {\n const superStyles = this.extends;\n const superIndex = superStyles.indexOf(style);\n\n if (superIndex === -1)\n {\n throw new Error('onParentSetProperty triggered when by a non-super style.');\n }\n\n const thisValue = this.computedData[propertyName];\n\n for (let i = superIndex, j = superStyles.length; i < j; i++)\n {\n const superStyle = superStyles[i];\n\n if (superStyle.computedData[propertyName])\n {\n this.computedData[propertyName] = superStyle.computedData[propertyName];\n }\n }\n\n if (this.data[propertyName])\n {\n this.computedData[propertyName] = this.data[propertyName];\n }\n\n if (thisValue !== this.computedData[propertyName])\n {\n this.emit('setProperty', propertyName, this.computedData[propertyName], this);\n }\n };\n\n /**\n * @param data\n * @example\n * Style.create({\n * backgroundColor: 0xabcdef,\n * padding: 8\n * })\n */\n static create(data: StyleData): Style\n {\n return new Style(data);\n }\n}\n","import { Style, StyleData } from './Style';\n\nexport class StyleSheet\n{\n [id: string]: Style;\n\n static create(sheetData: { [id: string]: StyleData }): StyleSheet\n {\n const sheet = new StyleSheet();\n\n for (const key in sheetData)\n {\n sheet[key] = Style.create(sheetData[key]);\n }\n\n return sheet;\n }\n}\n","import { FocusableWidget, IFocusableOptions } from './FocusableWidget';\nimport { ScrollWidget } from './ScrollWidget';\nimport * as PIXI from 'pixi.js';\nimport { LayoutOptions } from './layout-options';\nimport { DragManager } from './event/DragManager';\n\n/**\n * @memberof PUXI\n * @interface\n */\ninterface ITextInputOptions extends IFocusableOptions\n{\n multiLine?: boolean;\n style?: PIXI.TextStyle;\n background?: PIXI.Container;\n selectedColor?: string | number[];\n selectedBackgroundColor?: string;\n width?: number;\n height?: number;\n padding?: number;\n paddingTop?: number;\n paddingBottom?: number;\n paddingLeft?: number;\n paddingRight?: number;\n tabIndex?: number;\n tabGroup?: number;\n maxLength?: number;\n caretWidth?: number;\n lineHeight?: number;\n value?: string;\n}\n\n// Dummy element created for mobile keyboards\nlet mockDOMInput: any;\n\nfunction initMockDOMInput(): void\n{\n // create temp input (for mobile keyboard)\n if (typeof mockDOMInput === 'undefined')\n {\n mockDOMInput = document.createElement('INPUT');\n mockDOMInput.setAttribute('type', 'text');\n mockDOMInput.setAttribute('id', '_pui_tempInput');\n mockDOMInput.setAttribute('style', 'position:fixed; left:-10px; top:-10px; width:0px; height: 0px;');\n document.body.appendChild(mockDOMInput);\n }\n}\n\n/**\n * An UI text object\n *\n * @class\n * @extends PIXI.UI.InputBase\n * @memberof PIXI.UI\n */\nexport class TextInput extends FocusableWidget\n{\n protected options: ITextInputOptions;\n\n protected _listeners: any;\n protected _dirtyText: boolean;\n protected _value: string;\n protected _lastValue: string;\n\n protected _lastWidth: number;\n protected _lastHeight: number;\n\n protected selection: PIXI.Graphics;\n protected textContainer: ScrollWidget;\n\n public maxLength: number;\n\n protected chars: any[];\n protected multiLine: boolean;\n protected color: string;\n protected selectedColor: string;\n protected selectedBackgroundColor: string;\n protected tempText: PIXI.Text;\n protected textHeight: number;\n protected lineHeight: number;\n\n protected caret: PIXI.Graphics;\n protected caretInterval: NodeJS.Timeout;\n protected si: number; // startIndex\n protected sie: boolean; // startIndexEnd\n protected ei: number; // endIndex\n protected eie: boolean; // endIndexEnd\n protected sp: PIXI.Point; // startposition\n protected ds: PIXI.Point; // dragStart\n protected de: PIXI.Point; // dragend\n protected rdd: boolean; // Reverse drag direction\n protected vrdd: boolean; // vertical Reverse drag direction\n\n protected selectionStart: number;\n protected selectionEnd: number;\n protected hasSelection: boolean;\n protected t: number; // timestamp\n protected cc: number; // click counter\n protected textLengthPX: number;\n protected textHeightPX: number;\n protected lineIndexMax: number;\n\n protected ctrlDown: boolean;\n protected shiftDown: boolean;\n protected shiftKey: number;\n protected ctrlKey: number;\n protected cmdKey: number;\n\n protected _sp: PIXI.Point;\n\n /**\n * @param {PUXI.ITextInputOptions} options\n * @param {string} options.value Text content\n * @param {boolean} [options.multiLine=false] Multiline input\n * @param options.style {PIXI.TextStyle} Style used for the Text\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\n * @param [options.selectedColor='#ffffff'] {String|Array} Fill color of selected text\n * @param [options.selectedBackgroundColor='#318cfa'] {String} BackgroundColor of selected text\n * @param [options.width=150] {Number} width of input\n * @param [options.height=20] {Number} height of input\n * @param [options.padding=3] {Number} input padding\n * @param [options.paddingTop=0] {Number} input padding\n * @param [options.paddingBottom=0] {Number} input padding\n * @param [options.paddingLeft=0] {Number} input padding\n * @param [options.paddingRight=0] {Number} input padding\n * @param [options.tabIndex=0] {Number} input tab index\n * @param [options.tabGroup=0] {Number|String} input tab group\n * @param [options.maxLength=0] {Number} 0 = unlimited\n * @param [options.caretWidth=1] {Number} width of the caret\n * @param [options.lineHeight=0] {Number} 0 = inherit from text\n */\n constructor(options: ITextInputOptions)\n {\n super(options);\n initMockDOMInput();\n\n this.options = options;\n\n this._listeners = {};\n this._dirtyText = true;\n this.maxLength = options.maxLength || 0;\n this._value = this._lastValue = options.value || '';\n\n if (this.maxLength)\n {\n this._value = this._value.slice(0, this.maxLength);\n }\n\n this.chars = [];\n this.multiLine = options.multiLine !== undefined ? options.multiLine : false;\n this.color = options.style && options.style.fill ? options.style.fill : '#000000';\n this.selectedColor = options.selectedColor || '#ffffff';\n this.selectedBackgroundColor = options.selectedBackgroundColor || '#318cfa';\n this.tempText = new PIXI.Text('1', options.style);\n this.textHeight = this.tempText.height;\n this.lineHeight = options.lineHeight || this.textHeight || this._height;\n\n this.tempText.destroy();\n\n // set cursor\n // this.container.cursor = \"text\";\n\n // selection graphics\n this.selection = new PIXI.Graphics();\n this.selection.visible = false;\n this.selection._startIndex = 0;\n this.selection._endIndex = 0;\n\n // caret graphics\n this.caret = new PIXI.Graphics();\n this.caret.visible = false;\n this.caret._index = 0;\n this.caret.lineStyle(\n options.caretWidth || 1,\n typeof(this.color) == \"number\" ? this.color : parseInt(this.color.slice(1), 16),\n 1\n );\n this.caret.moveTo(0, 0);\n this.caret.lineTo(0, this.textHeight);\n\n // var padding\n const paddingLeft = options.paddingLeft !== undefined ? options.paddingLeft : options.padding;\n const paddingRight = options.paddingRight !== undefined ? options.paddingRight : options.padding;\n const paddingBottom = options.paddingBottom !== undefined ? options.paddingBottom : options.padding;\n const paddingTop = options.paddingTop !== undefined ? options.paddingTop : options.padding;\n\n // insert text container (scrolling container)\n this.textContainer = new ScrollWidget({\n scrollX: !this.multiLine,\n scrollY: this.multiLine,\n dragScrolling: this.multiLine,\n expandMask: 2,\n softness: 0.2,\n overflowX: 40,\n overflowY: 40,\n }).setPadding(\n paddingLeft || 3,\n paddingTop || 3,\n paddingRight || 3,\n paddingBottom || 3,\n ).setLayoutOptions(\n new LayoutOptions(\n LayoutOptions.FILL_PARENT,\n LayoutOptions.FILL_PARENT,\n ),\n ) as ScrollWidget;\n\n this.addChild(this.textContainer);\n\n if (this.multiLine)\n {\n this._useNext = this._usePrev = false;\n this.textContainer.dragRestrictAxis = 'y';\n this.textContainer.dragThreshold = 5;\n this.dragRestrictAxis = 'x';\n this.dragThreshold = 5;\n }\n\n // selection Vars\n this.sp = new PIXI.Point(); // startposition\n this._sp = new PIXI.Point();\n this.ds = new PIXI.Point(); // dragStart\n this.de = new PIXI.Point(); // dragend\n this.rdd = false; // Reverse drag direction\n this.vrdd = false; // vertical Reverse drag direction\n this.selectionStart = -1;\n this.selectionEnd = -1;\n this.hasSelection = false;\n this.t = performance.now(); // timestamp\n this.cc = 0; // click counter\n this.textLengthPX = 0;\n this.textHeightPX = 0;\n this.lineIndexMax = 0;\n this.ctrlDown = false;\n this.shiftDown = false;\n this.shiftKey = 16;\n this.ctrlKey = 17;\n this.cmdKey = 91;\n\n this.setupDrag();\n }\n\n setupDrag(): void\n {\n const event = new DragManager(this);\n\n event.onPress = (e, mouseDown): void =>\n {\n if (mouseDown)\n {\n const timeSinceLast = performance.now() - this.t;\n\n this.t = performance.now();\n if (timeSinceLast < 250)\n {\n this.cc++;\n if (this.cc > 1)\n {\n this.select();\n }\n else\n {\n this.innerContainer.toLocal(this.sp, undefined, this.ds, true);\n this.updateClosestIndex(this.ds, true);\n const c = this.chars[this.si];\n\n if (c)\n {\n if (c.wordIndex != -1)\n {\n this.selectWord(c.wordIndex);\n }\n else\n {\n this.selectRange(this.si, this.si);\n }\n }\n }\n }\n else\n {\n this.cc = 0;\n this.sp.copyFrom(e.data.global);\n this.innerContainer.toLocal(this.sp, undefined, this.ds, true);\n\n if (this.chars.length)\n {\n this.updateClosestIndex(this.ds, true);\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n }\n }\n e.data.originalEvent.preventDefault();\n };\n\n event.onDragMove = (e, offset: PIXI.Point): void =>\n {\n if (!this.chars.length || !this._isFocused)\n {\n return;\n }\n\n this.de.x = this.sp.x + offset.x;\n this.de.y = this.sp.y + offset.y;\n this.innerContainer.toLocal(this.de, undefined, this.de, true);\n this.updateClosestIndex(this.de, false);\n\n if (this.si < this.ei)\n {\n this.selectRange(this.sie ? this.si + 1 : this.si, this.eie ? this.ei : this.ei - 1);\n this.caret._index = this.eie ? this.ei : this.ei - 1;\n }\n else if (this.si > this.ei)\n {\n this.selectRange(this.ei, this.sie ? this.si : this.si - 1);\n this.caret._index = this.ei;\n }\n else if (this.sie === this.eie)\n {\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n else\n {\n this.selectRange(this.si, this.ei);\n this.caret._index = this.ei;\n }\n\n this.caret._forward = this.si <= this.ei;\n this.caret._down = offset.y > 0;\n\n this.scrollToPosition(this.de);\n };\n }\n\n protected get innerContainer(): PIXI.Container\n {\n return this.textContainer.innerContainer.insetContainer;\n }\n\n update(): void\n {\n if (this.width !== this._lastWidth)\n {\n this._lastWidth = this._width;\n\n if (this.multiLine)\n {\n this.updateText();\n\n if (this.caret.visible)\n {\n this.setCaretIndex(this.caret._index);\n }\n if (this.hasSelection)\n {\n this.updateSelectionGraphics();\n }\n }\n }\n\n // update text\n if (this._dirtyText)\n {\n this.updateText();\n this._dirtyText = false;\n }\n }\n\n updateText(): void\n {\n this.textLengthPX = 0;\n this.textHeightPX = 0;\n this.lineIndexMax = 0;\n\n let lineIndex = 0;\n const length = this._value.length;\n let x = 0;\n let y = (this.lineHeight - this.textHeight) * 0.5;\n let i = 0;\n\n // destroy excess chars\n if (this.chars.length > length)\n {\n for (i = this.chars.length - 1; i >= length; i--)\n {\n this.innerContainer.removeChild(this.chars[i]);\n this.chars[i].destroy();\n }\n\n this.chars.splice(length, this.chars.length - length);\n }\n\n // update and add chars\n let whitespace = false;\n let newline = false;\n let wordIndex = 0;\n let lastWordIndex = -1;\n let wrap = false;\n\n for (i = 0; i < this._value.length; i++)\n {\n if (whitespace || newline)\n {\n lastWordIndex = i;\n wordIndex++;\n }\n\n let c = this._value[i];\n\n whitespace = c === ' ';\n newline = c === '\\n';\n\n if (newline)\n { // newline \"hack\". webgl render errors if \\n is passed to text\n c = '';\n }\n\n let charText = this.chars[i];\n\n if (!charText)\n {\n charText = new PIXI.Text(c, this.options.style);\n this.innerContainer.addChild(charText);\n this.chars.push(charText);\n }\n else\n {\n charText.text = c;\n }\n\n charText.scale.x = newline ? 0 : 1;\n charText.wrapped = wrap;\n wrap = false;\n\n if (newline || (this.multiLine && x + charText.width >= this._width - this.paddingLeft - this.paddingRight))\n {\n lineIndex++;\n x = 0;\n y += this.lineHeight;\n\n if (lastWordIndex !== -1 && !newline)\n {\n i = lastWordIndex - 1;\n lastWordIndex = -1;\n wrap = true;\n continue;\n }\n }\n\n charText.lineIndex = lineIndex;\n charText.x = x;\n charText.y = y;\n charText.wordIndex = whitespace || newline ? -1 : wordIndex;\n x += charText.width;\n\n if (x > this.textLengthPX)\n {\n this.textLengthPX = x;\n }\n if (y > this.textHeightPX)\n {\n this.textHeightPX = y;\n }\n }\n\n this.lineIndexMax = lineIndex;\n\n // put caret on top\n this.innerContainer.addChild(this.caret);\n\n // recache\n if (this.innerContainer.cacheAsBitmap)\n {\n this.innerContainer.cacheAsBitmap = false;\n this.innerContainer.cacheAsBitmap = true;\n }\n\n this.textContainer.update();\n }\n\n updateClosestIndex(point: PIXI.Point, start: boolean): void\n {\n let currentDistX = 99999;\n let currentIndex = -1;\n let atEnd = false;\n\n let closestLineIndex = 0;\n\n if (this.lineIndexMax > 0)\n {\n closestLineIndex = Math.max(0, Math.min(\n this.lineIndexMax,\n Math.floor(point.y / this.lineHeight)));\n }\n\n for (let i = 0; i < this.chars.length; i++)\n {\n const char = this.chars[i];\n\n if (char.lineIndex !== closestLineIndex)\n {\n continue;\n }\n\n const distX = Math.abs(point.x - (char.x + (char.width * 0.5)));\n\n if (distX < currentDistX)\n {\n currentDistX = distX;\n currentIndex = i;\n atEnd = point.x > char.x + (char.width * 0.5);\n }\n }\n\n if (start)\n {\n this.si = currentIndex;\n this.sie = atEnd;\n }\n else\n {\n this.ei = currentIndex;\n this.eie = atEnd;\n }\n }\n\n deleteSelection(): boolean\n {\n if (this.hasSelection)\n {\n this.value = this.value.slice(0, this.selectionStart) + this.value.slice(this.selectionEnd + 1);\n this.setCaretIndex(this.selectionStart);\n\n return true;\n }\n\n return false;\n }\n\n updateSelectionColors(): void\n {\n // Color charecters\n for (let i = 0; i < this.chars.length; i++)\n {\n if (i >= this.selectionStart && i <= this.selectionEnd)\n {\n this.chars[i].style.fill = this.selectedColor;\n }\n else\n {\n this.chars[i].style.fill = this.color;\n }\n }\n }\n\n scrollToPosition(pos: PIXI.Point): void\n {\n this._sp.x = pos.x;\n this._sp.y = pos.y;\n\n if (this.multiLine && this._sp.y >= this.lineHeight)\n {\n this._sp.y += this.lineHeight;\n }\n\n this.textContainer.focusPosition(this._sp);\n }\n\n resetScrollPosition(): void\n {\n this._sp.set(0, 0);\n this.textContainer.focusPosition(this._sp);\n }\n\n hideCaret(): void\n {\n this.caret.visible = false;\n clearInterval(this.caretInterval);\n }\n\n showCaret(): void\n {\n this.clearSelection();\n clearInterval(this.caretInterval);\n\n this.caret.alpha = 1;\n this.caret.visible = true;\n\n this.caretInterval = setInterval(() =>\n {\n this.caret.alpha = this.caret.alpha === 0 ? 1 : 0;\n }, 500);\n }\n\n insertTextAtCaret(c: string): void\n {\n if (!this.multiLine && c.indexOf('\\n') !== -1)\n {\n c = c.replace(/\\n/g, '');\n }\n\n if (this.hasSelection)\n {\n this.deleteSelection();\n }\n\n if (!this.maxLength || this.chars.length < this.maxLength)\n {\n if (this.caret._atEnd)\n {\n this.valueEvent += c;\n this.setCaretIndex(this.chars.length);\n }\n else\n {\n const index = Math.min(this.chars.length - 1, this.caret._index);\n\n this.valueEvent = this.value.slice(0, index) + c + this.value.slice(index);\n this.setCaretIndex(index + c.length);\n }\n }\n }\n\n public onKeyDown(e) {\n if (e.which === this.ctrlKey || e.which === this.cmdKey)\n {\n this.ctrlDown = true;\n }\n if (e.which === this.shiftKey)\n {\n this.shiftDown = true;\n }\n\n // FocusableWidget.onKeyDownImpl should've been called before this.\n\n if (e.defaultPrevented)\n {\n return;\n }\n\n if (e.which === 13)\n { // enter\n this.insertTextAtCaret('\\n');\n e.preventDefault();\n\n return;\n }\n\n if (this.ctrlDown)\n {\n // Handle Ctrl+ commands\n\n if (e.which === 65)\n {\n // Ctrl+A (Select all)\n this.select();\n e.preventDefault();\n\n return;\n }\n else if (e.which === 90)\n {\n // Ctrl+Z (Undo)\n if (this.value != this._lastValue)\n {\n this.valueEvent = this._lastValue;\n }\n\n this.setCaretIndex(this._lastValue.length + 1);\n e.preventDefault();\n\n return;\n }\n }\n if (e.which === 8)\n {\n // Handle backspace\n if (!this.deleteSelection())\n {\n if (this.caret._index > 0 || (this.chars.length === 1 && this.caret._atEnd))\n {\n if (this.caret._atEnd)\n {\n this.valueEvent = this.value.slice(0, this.chars.length - 1);\n this.setCaretIndex(this.caret._index);\n }\n else\n {\n this.valueEvent = this.value.slice(0, this.caret._index - 1) + this.value.slice(this.caret._index);\n this.setCaretIndex(this.caret._index - 1);\n }\n }\n }\n\n e.preventDefault();\n\n return;\n }\n\n if (e.which === 46)\n {\n // Delete selection\n if (!this.deleteSelection())\n {\n if (!this.caret._atEnd)\n {\n this.valueEvent = this.value.slice(0, this.caret._index) + this.value.slice(this.caret._index + 1);\n this.setCaretIndex(this.caret._index);\n }\n }\n\n e.preventDefault();\n\n return;\n }\n else if (e.which === 37 || e.which === 39)\n {\n this.rdd = e.which === 37;\n\n if (this.shiftDown)\n {\n if (this.hasSelection)\n {\n const caretAtStart = this.selectionStart === this.caret._index;\n\n if (caretAtStart)\n {\n if (this.selectionStart === this.selectionEnd && this.rdd === this.caret._forward)\n {\n this.setCaretIndex(this.caret._forward ? this.caret._index : this.caret._index + 1);\n }\n else\n {\n const startindex = this.rdd ? this.caret._index - 1 : this.caret._index + 1;\n\n this.selectRange(startindex, this.selectionEnd);\n this.caret._index = Math.min(this.chars.length - 1, Math.max(0, startindex));\n }\n }\n else\n {\n const endIndex = this.rdd ? this.caret._index - 1 : this.caret._index + 1;\n\n this.selectRange(this.selectionStart, endIndex);\n this.caret._index = Math.min(this.chars.length - 1, Math.max(0, endIndex));\n }\n }\n else\n {\n const _i = this.caret._atEnd ? this.caret._index + 1 : this.caret._index;\n const selectIndex = this.rdd ? _i - 1 : _i;\n\n this.selectRange(selectIndex, selectIndex);\n this.caret._index = selectIndex;\n this.caret._forward = !this.rdd;\n }\n }\n else\n {\n // Navigation\n // eslint-disable-next-line no-lonely-if\n if (this.hasSelection)\n {\n this.setCaretIndex(this.rdd ? this.selectionStart : this.selectionEnd + 1);\n }\n else\n {\n this.setCaretIndex(this.caret._index + (this.rdd ? this.caret._atEnd ? 0 : -1 : 1));\n }\n }\n\n e.preventDefault();\n\n return;\n }\n else if (this.multiLine && (e.which === 38 || e.which === 40))\n {\n this.vrdd = e.which === 38;\n\n if (this.shiftDown)\n {\n if (this.hasSelection)\n {\n this.de.y = Math.max(0, Math.min(\n this.textHeightPX,\n this.de.y + (this.vrdd ? -this.lineHeight : this.lineHeight)));\n this.updateClosestIndex(this.de, false);\n\n // console.log(si, ei);\n if (Math.abs(this.si - this.ei) <= 1)\n {\n // console.log(si, ei);\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n else\n {\n this.caret._index = (this.eie ? this.ei + 1 : this.ei) + (this.caret._down ? -1 : 0);\n this.selectRange(this.caret._down ? this.si : this.si - 1, this.caret._index);\n }\n }\n else\n {\n this.si = this.caret._index;\n this.sie = false;\n this.de.copyFrom(this.caret);\n this.de.y = Math.max(0, Math.min(\n this.textHeightPX,\n this.de.y + (this.vrdd ? -this.lineHeight : this.lineHeight)));\n this.updateClosestIndex(this.de, false);\n\n this.caret._index = (this.eie ? this.ei + 1 : ei) - (this.vrdd ? 0 : 1);\n this.selectRange(this.vrdd ? this.si - 1 : this.si, this.caret._index);\n this.caret._down = !this.vrdd;\n }\n }\n else if (this.hasSelection)\n {\n this.setCaretIndex(this.vrdd ? this.selectionStart : this.selectionEnd + 1);\n }\n else\n {\n this.ds.copyFrom(this.caret);\n this.ds.y += this.vrdd ? -this.lineHeight : this.lineHeight;\n this.ds.x += 1;\n this.updateClosestIndex(this.ds, true);\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n e.preventDefault();\n\n return;\n }\n };\n\n public keyUpEvent(e) {\n if (e.which === this.ctrlKey || e.which === this.cmdKey) this.ctrlDown = false;\n if (e.which === this.shiftKey) this.shiftDown = false;\n\n this.emit('keyup', e);\n\n if (e.defaultPrevented)\n { return; }\n };\n\n public copyEvent(e) {\n this.emit('copy', e);\n\n if (e.defaultPrevented)\n { return; }\n\n if (this.hasSelection)\n {\n const clipboardData = e.clipboardData || window.clipboardData;\n\n clipboardData.setData('Text', this.value.slice(this.selectionStart, this.selectionEnd + 1));\n }\n\n e.preventDefault();\n };\n\n public cutEvent(e) {\n this.emit('cut', e);\n\n if (e.defaultPrevented)\n { return; }\n\n if (this.hasSelection)\n {\n this.copyEvent(e);\n this.deleteSelection();\n }\n\n e.preventDefault();\n };\n\n public pasteEvent(e) {\n this.emit('paste', e);\n\n if (e.defaultPrevented)\n { return; }\n\n const clipboardData = e.clipboardData || window.clipboardData;\n\n this.insertTextAtCaret(clipboardData.getData('Text'));\n e.preventDefault();\n };\n\n public inputEvent(e) {\n const c = mockDOMInput.value;\n\n if (c.length)\n {\n this.insertTextAtCaret(c);\n mockDOMInput.value = '';\n }\n\n e.preventDefault();\n };\n\n public inputBlurEvent(e) {\n this.blur();\n };\n\n public focus = (): void =>\n {\n if (!this._isFocused)\n {\n super.focus();\n\n const l = `${this.contentContainer.worldTransform.tx}px`;\n const t = `${this.contentContainer.worldTransform.ty}px`;\n const h = `${this.contentContainer.height}px`;\n const w = `${this.contentContainer.width}px`;\n\n mockDOMInput.setAttribute('style', `position:fixed; left:${l}; top:${t}; height:${h}; width:${w};`);\n mockDOMInput.value = '';\n mockDOMInput.setAttribute('style', 'position:fixed; left:-10px; top:-10px; width:0px; height: 0px;');\n\n this.innerContainer.cacheAsBitmap = false;\n\n this._listeners.blur = e => this.inputBlurEvent(e);\n this._listeners.keydown = e => this.onKeyDown(e);\n this._listeners.keyup = e => this.keyUpEvent(e);\n this._listeners.paste = e => this.pasteEvent(e);\n this._listeners.copy = e => this.copyEvent(e);\n this._listeners.cut = e => this.cutEvent(e);\n this._listeners.input = e => this.inputEvent(e);\n\n mockDOMInput.addEventListener('blur', this._listeners.blur, false);\n document.addEventListener('keydown', this._listeners.keydown, false);\n document.addEventListener('keyup', this._listeners.keyup, false);\n document.addEventListener('paste', this._listeners.paste, false);\n document.addEventListener('copy', this._listeners.copy, false);\n document.addEventListener('cut', this._listeners.cut, false);\n mockDOMInput.addEventListener('input', this._listeners.input, false);\n\n setTimeout(() =>\n {\n mockDOMInput.focus();\n \n if (!this.caret.visible && !this.selection.visible && !this.multiLine)\n {\n this.setCaretIndex(this.chars.length);\n }\n }, 0);\n }\n };\n\n public blur = (): void =>\n {\n if (this._isFocused)\n {\n super.blur();\n this.ctrlDown = false;\n this.shiftDown = false;\n\n this.hideCaret();\n this.clearSelection();\n\n if (this.chars.length > 1)\n {\n this.innerContainer.cacheAsBitmap = true;\n }\n\n mockDOMInput.removeEventListener('blur', this._listeners.blur);\n document.removeEventListener('keydown', this._listeners.keydown);\n document.removeEventListener('keyup', this._listeners.keyup);\n document.removeEventListener('paste', this._listeners.paste);\n document.removeEventListener('copy', this._listeners.copy);\n document.removeEventListener('cut', this._listeners.cut);\n mockDOMInput.removeEventListener('input', this._listeners.input);\n mockDOMInput.blur();\n\n this._listeners = {}\n }\n\n if (!this.multiLine)\n {\n this.resetScrollPosition();\n }\n };\n\n setCaretIndex = (index: number): void =>\n {\n this.caret._atEnd = index >= this.chars.length;\n this.caret._index = Math.max(0, Math.min(this.chars.length - 1, index));\n\n if (this.chars.length && index > 0)\n {\n let i = Math.max(0, Math.min(index, this.chars.length - 1));\n let c = this.chars[i];\n\n if (c && c.wrapped)\n {\n this.caret.x = c.x;\n this.caret.y = c.y;\n }\n else\n {\n i = Math.max(0, Math.min(index - 1, this.chars.length - 1));\n c = this.chars[i];\n this.caret.x = this.chars[i].x + this.chars[i].width;\n this.caret.y = (this.chars[i].lineIndex * this.lineHeight) + (this.lineHeight - this.textHeight) * 0.5;\n }\n }\n else\n {\n this.caret.x = 0;\n this.caret.y = (this.lineHeight - this.textHeight) * 0.5;\n }\n\n this.scrollToPosition(this.caret);\n this.showCaret();\n };\n\n select = (): void =>\n {\n this.selectRange(0, this.chars.length - 1);\n };\n\n selectWord = (wordIndex: number): void =>\n {\n let startIndex = this.chars.length;\n let endIndex = 0;\n\n for (let i = 0; i < this.chars.length; i++)\n {\n if (this.chars[i].wordIndex !== wordIndex)\n {\n continue;\n }\n\n if (i < startIndex)\n {\n startIndex = i;\n }\n if (i > endIndex)\n {\n endIndex = i;\n }\n }\n\n this.selectRange(startIndex, endIndex);\n };\n\n selectRange = (startIndex: number, endIndex: number): void =>\n {\n if (startIndex > -1 && endIndex > -1)\n {\n const start = Math.min(startIndex, endIndex, this.chars.length - 1);\n const end = Math.min(Math.max(startIndex, endIndex), this.chars.length - 1);\n\n if (start !== this.selectionStart || end !== this.selectionEnd)\n {\n this.hasSelection = true;\n this.selection.visible = true;\n this.selectionStart = start;\n this.selectionEnd = end;\n\n this.hideCaret();\n this.updateSelectionGraphics();\n this.updateSelectionColors();\n }\n\n this.focus();\n }\n else\n {\n this.clearSelection();\n }\n };\n\n clearSelection = (): void =>\n {\n if (this.hasSelection)\n {\n // Remove color\n this.hasSelection = false;\n this.selection.visible = false;\n this.selectionStart = -1;\n this.selectionEnd = -1;\n this.updateSelectionColors();\n }\n };\n\n updateSelectionGraphics = () =>\n {\n const c1 = this.chars[this.selectionStart];\n\n if (c1 !== undefined)\n {\n let cx = c1.x;\n let cy = c1.y;\n let w = 0;\n const h = this.textHeight;\n let cl = c1.lineIndex;\n\n this.selection.clear();\n for (let i = this.selectionStart; i <= this.selectionEnd; i++)\n {\n const c = this.chars[i];\n\n if (c.lineIndex != cl)\n {\n this.drawSelectionRect(cx, cy, w, h);\n cx = c.x;\n cy = c.y;\n cl = c.lineIndex;\n w = 0;\n }\n\n w += c.width;\n }\n\n this.drawSelectionRect(cx, cy, w, h);\n this.innerContainer.addChildAt(this.selection, 0);\n }\n };\n\n drawSelectionRect = (x: number, y: number, w: number, h: number): void =>\n {\n this.selection.beginFill(`0x${this.selectedBackgroundColor.slice(1)}`, 1);\n this.selection.moveTo(x, y);\n this.selection.lineTo(x + w, y);\n this.selection.lineTo(x + w, y + h);\n this.selection.lineTo(x, y + h);\n this.selection.endFill();\n };\n\n get valueEvent(): string\n {\n return this._value;\n }\n set valueEvent(val: string)\n {\n if (this.maxLength)\n {\n val = val.slice(0, this.maxLength);\n }\n\n if (this._value != val)\n {\n this.value = val;\n this.emit('change');\n }\n }\n\n get value(): string\n {\n return this._value;\n }\n set value(val: string)\n {\n if (this.maxLength)\n {\n val = val.slice(0, this.maxLength);\n }\n\n if (this._value != val)\n {\n this._lastValue = this._value;\n this._value = val;\n this._dirtyText = true;\n this.update();\n }\n }\n\n get text(): string\n {\n return this.value;\n }\n set text(value: string)\n {\n this.value = value;\n }\n\n get mock() {\n return mockDOMInput\n }\n}\n\n/*\n * Features:\n * multiLine, shift selection, Mouse Selection, Cut, Copy, Paste, Delete, Backspace, Arrow navigation, tabIndex\n *\n * Methods:\n * blur()\n * focus()\n * select() - selects all text\n * selectRange(startIndex, endIndex)\n * clearSelection()\n * setCaretIndex(index) moves caret to index\n *\n *\n * Events:\n * \"change\"\n * \"blur\"\n * \"blur\"\n * \"focus\"\n * \"focusChanged\" param: [bool]focus\n * \"keyup\" param: Event\n * \"keydown\" param: Event\n * \"copy\" param: Event\n * \"paste\" param: Event\n * \"cut\" param: Event\n * \"keyup\" param: Event\n */\n","import * as PIXI from 'pixi.js';\nimport { Widget } from './Widget';\n\n/**\n * An UI sprite object\n *\n * @class\n * @extends PIXI.UI.UIBase\n * @memberof PIXI.UI\n * @param Texture {PIXI.Texture} The texture for the sprite\n * @param [Width=Texture.width] {number} Width of tilingsprite\n * @param [Height=Texture.height] {number} Height of tiling sprite\n */\nexport class TilingSprite extends Widget\n{\n protected sprite: PIXI.TilingSprite;\n\n constructor(t, width: number, height: number)\n {\n const sprite = new PIXI.TilingSprite(t);\n\n super(width || sprite.width, height || sprite.height);\n\n this.sprite = sprite;\n this.contentContainer.addChild(this.sprite);\n }\n\n /**\n * Updates the text\n *\n * @private\n */\n update(): void\n {\n if (this.tint !== null)\n { this.sprite.tint = this.tint; }\n\n if (this.blendMode !== null)\n { this.sprite.blendMode = this.blendMode; }\n\n this.sprite.width = this._width;\n this.sprite.height = this._height;\n }\n\n get tilePosition(): any\n {\n return this.sprite.tilePosition;\n }\n set tilingPosition(val: any)\n {\n this.sprite.tilePosition = val;\n }\n\n get tileScale(): number\n {\n return this.sprite.tileScale;\n }\n set tileScale(val: number)\n {\n this.sprite.tileScale = val;\n }\n}\n","import { Tween } from './Tween';\nimport * as PIXI from 'pixi.js';\n\n/**\n * This ticker is an event-emitter that can be used for running periodic tasks\n * in the rendering loop. It emits the `update` event every animation frame.\n *\n * @memberof PUXI\n * @class\n * @extends PIXI.utils.EventEmitter\n */\nexport class Ticker extends PIXI.utils.EventEmitter\n{\n private _disabled: boolean;\n private _now: number;\n\n DeltaTime: number;\n Time: number;\n Ms: number;\n\n constructor(autoStart: boolean)\n {\n super();\n\n this._disabled = true;\n this._now = 0;\n\n this.DeltaTime = 0;\n this.Time = performance.now();\n this.Ms = 0;\n\n if (autoStart)\n {\n this.disabled = false;\n }\n\n Ticker.shared = this;\n }\n\n get disabled(): boolean\n {\n return this._disabled;\n }\n set disabled(val: boolean)\n {\n if (!this._disabled)\n {\n this._disabled = true;\n }\n else\n {\n this._disabled = false;\n Ticker.shared = this;\n\n this.update(performance.now(), true);\n }\n }\n\n /**\n * Updates the text\n *\n * @private\n */\n update(time: number): void\n {\n Ticker.shared._now = time;\n Ticker.shared.Ms = Ticker.shared._now - Ticker.shared.Time;\n Ticker.shared.Time = Ticker.shared._now;\n Ticker.shared.DeltaTime = Ticker.shared.Ms * 0.001;\n Ticker.shared.emit('update', Ticker.shared.DeltaTime);\n Tween._update(Ticker.shared.DeltaTime);\n\n if (!Ticker.shared._disabled)\n {\n requestAnimationFrame(Ticker.shared.update);\n }\n }\n\n /**\n * The update event is fired periodically and it can be used to for a rendering\n * loop.\n * @event update\n * @param {DOMHighResTimeStamp} deltaTime - milliseconds since last update\n */\n\n static shared: Ticker;\n\n static on(event: any, fn: Function, context: any): void\n {\n Ticker.shared.on(event, fn, context);\n }\n\n static once(event: any, fn: Function, context: any): void\n {\n Ticker.shared.once(event, fn, context);\n }\n\n static removeListener(event: any, fn: Function): void\n {\n Ticker.shared.removeListener(event, fn);\n }\n}\n\nTicker.shared = new Ticker(true);\n"],"names":["MeasureMode","PIXI.Point","PIXI.utils","PIXI.Container","PIXI.BLEND_MODES","PIXI.Graphics","DropShadowFilter","ALIGN","PIXI.Rectangle","PIXI.Text","PIXI.TextStyle","PIXI.Sprite","PIXI.Texture","PIXI.BaseTexture","Texture","PIXI.Ticker","PIXI.TilingSprite"],"mappings":";;;;;;;;;;;IAAA,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,kBAAkB,GAAG;IAC3B,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK;IACnB,IAAI;IACJ,QAAQ,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;IACtD,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,QAAQ;IACR,YAAY,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B;IACA,YAAY,OAAO,IAAI,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK;IACL,IAAI,OAAO,CAAC,MAAM;IAClB,IAAI;IACJ,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC;IACzB,YAAY,KAAK,CAAC;AAClB;IACA,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;IAC9C,QAAQ;IACR,YAAY,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM;IACpC,YAAY;IACZ,gBAAgB,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACjC,gBAAgB,KAAK,GAAG,CAAC,CAAC;IAC1B,gBAAgB,MAAM;IACtB,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,KAAK,IAAI;IACzB,QAAQ;IACR,YAAY,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACpC;IACA,YAAY,OAAO,IAAI,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK;IACL,IAAI,YAAY,CAAC,KAAK,EAAE,KAAK;IAC7B,IAAI;IACJ,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;IACpC,YAAY,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AACvC;IACA,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;IAC9C,QAAQ;IACR,YAAY,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,KAAK,EAAE;IACjD,YAAY;IACZ,gBAAgB,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;IACjD,gBAAgB;IAChB,oBAAoB,OAAO,KAAK,CAAC;IACjC,iBAAiB;IACjB,gBAAgB,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACjC,gBAAgB,KAAK,GAAG,CAAC,CAAC;IAC1B,gBAAgB,MAAM;IACtB,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,KAAK,IAAI;IACzB,QAAQ;IACR,YAAY,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACpC;IACA,YAAY,OAAO,IAAI,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK;IACL,CAAC;;IClED;;;;AAIA,UAAa,MAAM;QASf;YAEI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;SACpB;QAED,KAAK;YAED,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SACpB;KACJ;;IC1BD;;;;;;;;;;AAUA,IAAA,WAAY,WAAW;QAEnB,uDAAa,CAAA;QACb,mDAAW,CAAA;QACX,mDAAW,CAAA;IACf,CAAC,EALWA,mBAAW,KAAXA,mBAAW,QAKtB;IASD;;;;;;;IAQA;;;;;;;;;;IAWA;;;;;IAMA;;;;OAIG;;ICnDH;;;;;;;;;;;;;;;;AAgBA,UAAsB,YAAY;;;;QAQ9B,YAAY,MAAc;YAEtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SAC1B;;;;QAKD,SAAS;YAEL,OAAO,IAAI,CAAC,MAAM,CAAC;SACtB;KAaJ;;IC/CD;;;;;;;;;;AAUA,UAAa,YAAa,SAAQ,YAAY;;;;;;;QAiC1C,YAAY,MAAc,EAAE,YAAsB,EAAE,gBAAiB,EAAE,WAAqB;YAExF,KAAK,CAAC,MAAM,CAAC,CAAC;;;;;;;YAgDlB,eAAU,GAAG,CACT,YAAY,GAAG,IAAI,CAAC,aAAa,EACjC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,EACzC,WAAW,GAAG,IAAI,CAAC,YAAY;gBAG/B,IAAI,IAAI,CAAC,SAAS,EAClB;oBACI,OAAO;iBACV;gBAED,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;gBAClC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;gBACzC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;gBAEhC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBAExB,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBAEjE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAC3B;oBACI,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;iBAChE;gBAED,IAAI,IAAI,CAAC,aAAa,EACtB;oBACI,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBAC5D,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;iBAC7D;gBAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACzB,CAAC;;;;YAKF,cAAS,GAAG;gBAER,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB;oBACI,OAAO;iBACV;gBAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBAExB,IAAI,IAAI,CAAC,KAAK,EACd;oBACI,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBACzE,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;oBAEvF,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAC3B;wBACI,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;wBACrE,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;qBACtF;oBAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;iBACtB;gBAED,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBAE7E,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAC3B;oBACI,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;iBAC5E;gBAED,IAAI,IAAI,CAAC,aAAa,EACtB;oBACI,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBACxE,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBACtE,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBACxE,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;iBAC3E;gBAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aAC1B,CAAC;YAEQ,oBAAe,GAAG,CAAC,KAAwC;gBAEjE,MAAM,EACF,MAAM,EAAE,GAAG,EACX,SAAS,EACT,aAAa,EAAE,UAAU,EACzB,gBAAgB,EAChB,oBAAoB,EAAE,iBAAiB,EACvC,iBAAiB,EAAE,KAAK,GAC3B,GAAG,IAAI,CAAC;gBAET,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;gBAE5C,IAAI,CAAC,IAAI,CAAC,KAAK,EACf;oBACI,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBAC7C,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;oBAE3D,IAAI,CAAC,KAAK,EACV;wBACI,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;wBAC9C,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;qBAC/D;oBAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;iBACrB;gBAED,IAAI,IAAI,CAAC,YAAY,EACrB;oBACI,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;oBAE9B,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,EACzB;wBACI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;qBACjC;yBAED;wBACI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;qBACnB;iBACJ;gBAED,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;aAC7C,CAAC;YAEQ,wBAAmB,GAAG,CAAC,KAAwC;gBAErE,MAAM,EACF,MAAM,EAAE,GAAG,EACX,SAAS,EACT,aAAa,EAAE,UAAU,EACzB,gBAAgB,EAChB,oBAAoB,EAAE,iBAAiB,GAC1C,GAAG,IAAI,CAAC;gBAET,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,EACrC;oBACI,OAAO;iBACV;gBAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAExF,IAAI,IAAI,CAAC,KAAK,EACd;oBACI,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;oBACzD,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;oBAEvE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAC3B;wBACI,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;wBAC1D,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;qBAC3E;oBAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;iBACtB;gBAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;aACxC,CAAC;YAEQ,kBAAa,GAAG,CAAC,KAAK;gBAE5B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,EACrC;oBACI,OAAO;iBACV;gBAED,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;;gBAGhC,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAC7B;oBACI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAEzC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EACxE;wBACI,OAAO;qBACV;iBACJ;gBAED,IAAI,CAAC,IAAI,CAAC,YAAY,EACtB;oBACI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;iBACzC;aACJ,CAAC;YAEQ,yBAAoB,GAAG,CAAC,KAAK;gBAEnC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,EACrC;oBACI,OAAO;iBACV;gBAED,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;aACnC,CAAC;YAEQ,oBAAe,GAAG,CAAC,KAAK;gBAE9B,IAAI,CAAC,IAAI,CAAC,OAAO,EACjB;oBACI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBACjE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBAEjE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;iBAC/C;aACJ,CAAC;YAEQ,mBAAc,GAAG,CAAC,KAAK;gBAE7B,IAAI,IAAI,CAAC,OAAO,EAChB;oBACI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;oBACrB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBAC7E,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBAE7E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;iBAChD;aACJ,CAAC;YAEQ,oBAAe,GAAG,CAAC,KAAK;gBAE9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;aACxC,CAAC;YA3QE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,KAAK,GAAG,IAAIC,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,IAAIA,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YAEnB,IAAI,CAAC,aAAa,GAAG,OAAO,YAAY,KAAK,WAAW,GAAG,IAAI,GAAG,YAAY,CAAC;YAC/E,IAAI,CAAC,gBAAgB,GAAG,OAAO,gBAAgB,KAAK,WAAW,GAAG,KAAK,GAAG,gBAAgB,CAAC;YAC3F,IAAI,CAAC,YAAY,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,KAAK,GAAG,WAAW,CAAC;YAE7E,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;YAE1B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,IAAI,CAAC,OAAO,GAAG,MAAY,IAAI,CAAC;YAChC,IAAI,CAAC,OAAO,GAAG,MAAY,IAAI,CAAC;YAChC,IAAI,CAAC,OAAO,GAAG,MAAY,IAAI,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,MAAY,IAAI,CAAC;SAClC;;;;;QAMD,IAAI,gBAAgB;YAEhB,OAAO,IAAI,CAAC,iBAAiB,CAAC;SACjC;QACD,IAAI,gBAAgB,CAAC,GAAY;YAE7B,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;YAE7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,GAAG,WAAW,GAAG,WAAW,CAAC;YACtE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;YAChE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;SACxF;KAsOJ;;IC3TD;;;;;;;;;;;;;;AAcA,UAAa,WAAY,SAAQ,YAAY;QAiBzC,YAAY,MAAc;YAEtB,KAAK,CAAC,MAAM,CAAC,CAAC;YA8DR,oBAAe,GAAG,CAAC,CAAoC;gBAE7D,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBAExB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAEtB,IAAI,CAAC,IAAI,CAAC,OAAO,EACjB;oBACI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAEvC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBAClD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBAClD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC/C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBACtD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBAChD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBACvD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBAEnD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;iBACvB;gBAED,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;aACzC,CAAC;YAEM,mBAAc,GAAG,CAAC,CAAoC;gBAE1D,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,EACjC;oBACI,OAAO;iBACV;gBAED,MAAM,EACF,UAAU,EACV,UAAU,EACV,SAAS,EACT,MAAM,GACT,GAAG,IAAI,CAAC;gBAET,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAE5E,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB;oBACI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAExC,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC;2BACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,aAAa,EAC1E;wBACI,OAAO;qBACV;oBAED,IAAI,MAAM,CAAC,gBAAgB,KAAK,IAAI,EACpC;wBACI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;wBAEpB,IAAI,MAAM,CAAC,gBAAgB,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EACtE;4BACI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;yBACtB;6BACI,IAAI,MAAM,CAAC,gBAAgB,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAC5E;4BACI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;yBACtB;wBAED,IAAI,IAAI,CAAC,MAAM,EACf;4BACI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;4BAEtB,OAAO;yBACV;qBACJ;oBAED,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;iBAC1B;gBAED,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;aAClC,CAAC;YAEM,kBAAa,GAAG,CAAC,CAAoC;gBAEzD,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,EACjC;oBACI,OAAO;iBACV;gBAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBAExB,IAAI,IAAI,CAAC,OAAO,EAChB;oBACI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC9D,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC9D,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC3D,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBAClE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC5D,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBACnE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;oBAE/D,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;oBACxB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;oBAErB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAClB,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;iBAC1B;aACJ,CAAC;YAtKE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC,SAAS,GAAG,IAAIA,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,IAAIA,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,IAAIA,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YAEpB,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;YAE/B,IAAI,CAAC,OAAO,GAAG,MAAY,IAAI,CAAC;YAChC,IAAI,CAAC,WAAW,GAAG,MAAY,IAAI,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,MAAY,IAAI,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,MAAY,IAAI,CAAC;SACrC;QAED,UAAU;YAEN,IAAI,IAAI,CAAC,SAAS,EAClB;gBACI,OAAO;aACV;YAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YAExB,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5D,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAE7D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;QAED,SAAS;YAEL,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB;gBACI,OAAO;aACV;YAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YAExB,IAAI,IAAI,CAAC,OAAO,EAChB;gBACI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC9D,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC9D,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC3D,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBAClE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC5D,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBAEnE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACxB;YAED,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACxE,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAEzE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SAC1B;KA6GJ;;ICzMD;;;;;;;;;AASA,UAAa,WAAW;QAIpB,YAAY,MAAc;YAEtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAErB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EACtD;gBACI,MAAM,CAAC,cAAc,CACjB,IAAI,EACJ,GAAG,EACH;oBACI,GAAG;wBAEC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EACpB;4BACI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;yBACnE;wBAED,OAAO,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;qBAC1B;iBACJ,CACJ,CAAC;aACL;SACJ;;IAEI,uBAAW,GAAG;QACjB,KAAK,EAAE,YAAY;QACnB,GAAG,EAAE,WAAW;KACnB,CAAC;;ICzCJ;;;;;;;;AAQA,UAAa,aAAc,SAAQ,YAAY;QAM3C,YAAY,MAAc,EAAE,cAAc,GAAG,IAAI;YAE7C,KAAK,CAAC,MAAM,CAAC,CAAC;YAuCV,sBAAiB,GAAG,CAAC,CAAa;gBAEtC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;gBAE/C,IAAI,cAAc,EAClB;oBACI,KAAK,CAAC,cAAc,EAAE,CAAC;iBAC1B;gBAED,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,WAAW,EACnC;oBACI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;iBACjC;;iBAED;oBACI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,EACtC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;iBACzC;gBAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;aACjD,CAAC;;YAGM,gBAAW,GAAG,CAAC,CAAC;gBAEpB,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;gBAEnC,IAAI,CAAC,IAAI,CAAC,KAAK,EACf;oBACI,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;oBAClE,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;oBAEtE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;iBACrB;aACJ,CAAC;;YAGM,mBAAc,GAAG,CAAC,CAAC;gBAEvB,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;gBAEnC,IAAI,IAAI,CAAC,KAAK,EACd;oBACI,QAAQ,CAAC,mBAAmB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;oBAC9D,QAAQ,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;oBAElE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;iBACtB;aACJ,CAAC;;YAEF,kBAAa,GAAG,SAAS,aAAa,CAAC,KAAK,EAAE,KAAiB;;aAG9D,CAAC;YA1FE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,KAAK,GAAG,IAAIA,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;YAErC,IAAI,CAAC,UAAU,EAAE,CAAC;SACrB;;;;QAKD,UAAU;YAEN,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;YAErD,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACrD,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;SAC1D;;;;QAKD,SAAS;YAEL,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;YAExE,IAAI,IAAI,CAAC,KAAK,EACd;gBACI,QAAQ,CAAC,mBAAmB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;gBAC9D,QAAQ,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;gBAElE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;aACtB;YAED,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACjE,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;SACtE;KAwDJ;;ICpGD,MAAM,kBAAkB,GAAG,CAAC,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;IAE1F,MAAM,uBAAuB,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;AAEzE,UAAa,qBAAqB,GAAG;QACjC,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,eAAe;KAClB,CAAC;IAEF;;;;;;;;;AASA,UAAa,MAAO,SAAQC,UAAU,CAAC,YAAY;QAqD/C;YAEI,KAAK,EAAE,CAAC;;;;;;YAOR,IAAI,CAAC,cAAc,GAAG,IAAIC,cAAc,EAAE,CAAC;;;;;;;YAQ3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAIA,cAAc,EAAE,CAAC,CAAC;;;;;;YAO3E,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;;;;;;YAOzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;;;;;;;YAQlB,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,EAAE,CAAC;YAElC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAE7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAEzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YAEpB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,SAAS,GAAGC,gBAAgB,CAAC,MAAM,CAAC;YAEzC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YAEvB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;;YAGlB,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAwB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAwB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAChG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAwB,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAwB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAwB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/F,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAwB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACjG;;;;;;;QAQD,MAAM;YAEF,IAAI,IAAI,CAAC,YAAY,EACrB;;gBAEI,UAAU,CAAC;oBAEP,IAAI,IAAI,CAAC,YAAY,EACrB;wBACI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;qBACjC;iBACJ,EAAE,CAAC,CAAC,CAAC;aACT;YAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EACrD;gBACI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;aACrC;SACJ;;;;;;QAOD,IAAI,aAAa;YAEb,OAAO,IAAI,CAAC,cAAc,CAAC;SAC9B;;;;;;QAOD,IAAI,cAAc;YAEd,OAAO,IAAI,CAAC,eAAe,CAAC;SAC/B;;;;;;QAOD,gBAAgB;YAEZ,OAAO,IAAI,CAAC,cAAc,CAAC;SAC9B;;;;;;QAOD,iBAAiB;YAEb,OAAO,IAAI,CAAC,eAAe,CAAC;SAC/B;;;;;;;;;;;QAYD,SAAS,CAAC,KAAa,EAAE,MAAc,EAAE,SAAsB,EAAE,UAAuB;YAEpF,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAC1E,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;YAE1E,QAAQ,SAAS;gBAEb,KAAKJ,mBAAW,CAAC,OAAO;oBACpB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;oBAC5B,MAAM;gBACV,KAAKA,mBAAW,CAAC,SAAS;oBACtB,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC;oBACnC,MAAM;gBACV,KAAKA,mBAAW,CAAC,OAAO;oBACpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;oBACpD,MAAM;aACb;YAED,QAAQ,UAAU;gBAEd,KAAKA,mBAAW,CAAC,OAAO;oBACpB,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;oBAC9B,MAAM;gBACV,KAAKA,mBAAW,CAAC,SAAS;oBACtB,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC;oBACrC,MAAM;gBACV,KAAKA,mBAAW,CAAC,OAAO;oBACpB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;oBACvD,MAAM;aACb;SACJ;;;;;;;;;;QAWD,OAAO,CAAC,KAAa,EAAE,MAAc,EAAE,SAAsB,EAAE,UAAuB;YAElF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;SACxD;;;;;;;;;;;;QAaD,QAAQ,CAAC,CAAS,EAAE,IAAY,CAAC,EAAE,IAAY,CAAC,EAAE,IAAY,CAAC,EAAE,KAAK,GAAG,IAAI;YAEzE,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YAE9B,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YAErB,IAAI,IAAI,CAAC,UAAU,EACnB;gBACI,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;aAClC;;YAGD,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YAC5C,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;;;YAK3C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC7B;QAED,MAAM,CAAC,CAAS,EAAE,IAAY,CAAC,EAAE,IAAY,CAAC,EAAE,IAAY,CAAC,EAAE,KAAK,GAAG,IAAI;YAEvE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;SACpC;;;;;;;;;QAUD,gBAAgB,CAAC,IAAmB;YAEhC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAE1B,OAAO,IAAI,CAAC;SACf;;;;;;;QAQS,aAAa,CAAC,KAAY;YAEhC,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CACjC,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,CAClB,CAAC;;YAGF,IAAI,SAAS,CAAC,UAAU,EACxB;gBACI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;aAC5C;iBACI,IAAI,OAAO,SAAS,CAAC,eAAe,KAAK,WAAW,EACzD;gBACI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;aACjD;;YAGD,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,WAAW,EAC9C;gBACI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;aAC1C;;YAGD,kBAAkB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAEnC,IAAI,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAC3C;oBACI,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;iBAC9C;qBACI,IAAI,OAAO,SAAS,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,EACtE;oBACI,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBACpE;qBACI,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,EAC9C;oBACI,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;iBAC5C;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACrB;;;;;;;;QASD,cAAc,CAAC,CAAwB;YAEnC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;SAC/B;;;;;;;;QASD,aAAa,CAAC,CAAwB;YAElC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;SAChC;;;;;QAMD,cAAc,CAAC,CAAwB;YAEnC,OAAO;SACV;;;;;QAMD,aAAa,CAAC,CAAwB;YAElC,OAAO;SACV;QAED,gBAAgB,CAAC,CAAwB;YAErC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAC5B;;gBAEI,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;oBAEjC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;iBAClC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;gBAEvB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACnB;iBAED;gBACI,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAEtC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;;gBAG/B,UAAU,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aACnD;YAED,OAAO;SACV;;;;;;;QAQD,aAAa,CAAC,CAAwB,EAAE,KAAc;YAElD,OAAO;SACV;QAED,OAAO,CAAC,CAAwB;YAE5B,OAAO;SACV;QAED,aAAa,CAAC,CAAwB;YAElC,OAAO;SACV;QAED,YAAY,CAAC,CAAwB;YAEjC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;YAEtC,IAAI,IAAI,CAAC,WAAW,EACpB;gBACI,IAAI,CAAC,IAAI,CAAC,YAAY,EACtB;;iBAEC;gBAED,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;aAGxD;YAED,OAAO;SACV;;;;;;;QAQD,IAAI,WAAW;YAEX,IAAI,CAAC,IAAI,CAAC,YAAY,EACtB;gBACI,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;aAC7C;YAED,OAAO,IAAI,CAAC,YAAY,CAAC;SAC5B;;;;;QAMD,IAAI,WAAW;YAEX,OAAO,IAAI,CAAC,YAAY,CAAC;SAC5B;QACD,IAAI,WAAW,CAAC,GAAW;YAEvB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACrB;;;;;QAMD,IAAI,UAAU;YAEV,OAAO,IAAI,CAAC,WAAW,CAAC;SAC3B;QACD,IAAI,UAAU,CAAC,GAAW;YAEtB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACrB;;;;;QAMD,IAAI,YAAY;YAEZ,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;QACD,IAAI,YAAY,CAAC,GAAW;YAExB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACrB;;;;;QAMD,IAAI,aAAa;YAEb,OAAO,IAAI,CAAC,cAAc,CAAC;SAC9B;QACD,IAAI,aAAa,CAAC,GAAW;YAEzB,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACrB;;;;;;QAOD,IAAI,iBAAiB;YAEjB,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;SACjD;;;;;;QAOD,IAAI,eAAe;YAEf,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;SACjD;;;;;QAMD,IAAI,WAAW;YAEX,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;SAC1C;QACD,IAAI,WAAW,CAAC,GAAY;YAExB,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;YACvC,IAAI,CAAC,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC;SAC5C;;;;;;QAOD,IAAI,KAAK;YAEL,OAAO,IAAI,CAAC,MAAM,CAAC;SACtB;;;;;;QAOD,IAAI,MAAM;YAEN,OAAO,IAAI,CAAC,OAAO,CAAC;SACvB;;;;;;QAOD,IAAI,YAAY;YAEZ,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC;SAC/C;;;;;;QAOD,IAAI,aAAa;YAEb,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;SAC9C;;;;;QAMD,IAAI,KAAK;YAEL,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;SACpC;QACD,IAAI,KAAK,CAAC,GAAW;YAEjB,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,GAAG,CAAC;SACnC;;;;;;;;;;;;;;;;;;;QAoBD,UAAU,CAAC,CAAS,EAAE,IAAY,CAAC,EAAE,IAAY,CAAC,EAAE,IAAY,CAAC;YAE7D,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAElB,OAAO,IAAI,CAAC;SACf;;;;QAKD,aAAa;YAET,OAAO,IAAI,CAAC,UAAU,CAAC;SAC1B;;;;;;;;QASD,aAAa,CAAC,EAAoC;YAE9C,IAAI,IAAI,CAAC,UAAU,EACnB;gBACI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACpD;YAED,IAAI,OAAO,EAAE,KAAK,QAAQ,EAC1B;gBACI,EAAE,GAAGE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;aAClC;YACD,IAAI,OAAO,EAAE,KAAK,QAAQ,EAC1B;gBACI,EAAE,GAAG,IAAIG,aAAa,EAAE;qBACnB,SAAS,CAAC,EAAE,CAAC;qBACb,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;qBACpB,OAAO,EAAE,CAAC;aAClB;YAED,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YAErB,IAAI,EAAE,EACN;gBACI,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACtB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBACxB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aACzC;YAED,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAC7C;gBACI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAC5B;oBACI,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC;iBAChC;gBAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aAClD;YAED,OAAO,IAAI,CAAC;SACf;;;;QAKD,kBAAkB;YAEd,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;SACtD;;;;;;;;QASD,kBAAkB,CAAC,GAAW;YAE1B,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB;gBACI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;aAChC;YAED,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,GAAG,CAAC;YAE5B,OAAO,IAAI,CAAC;SACf;;;;;;;;;QAUD,cAAc,CAAC,IAAU;YAErB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;;;;QAKD,YAAY;YAER,OAAO,IAAI,CAAC,UAAU,CAAC;SAC1B;;;;;;;QAQD,YAAY,CAAC,GAAW;YAEpB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;YAEtB,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EACjC;gBACI,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB;oBACI,OAAO,IAAI,CAAC;iBACf;gBAED,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAE5D,IAAI,CAAC,GAAG,CAAC,EACT;oBACI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBACxC;aACJ;iBACI,IAAI,GAAG,GAAG,CAAC,EAChB;gBACI,IAAI,CAAC,IAAI,CAAC,WAAW,EACrB;oBACI,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAC/C;wBACI,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC;qBAChC;oBAED,IAAI,CAAC,WAAW,GAAG,IAAIC,iCAAgB,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;oBAE3D,IAAI,IAAI,CAAC,UAAU,EACnB;wBACI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;qBAClD;iBACJ;gBAED,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,GAAG,CAAC;aACnC;YAED,OAAO,IAAI,CAAC;SACf;;;;;;QAOD,QAAQ,CAAC,KAAa;YAElB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAElB,OAAO,IAAI,CAAC;SACf;;;;QAKD,aAAa;YAET,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;;;;;;;QAQD,QAAQ,CAAC,GAAG,OAAiB;YAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC;gBACI,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAE1B,IAAI,MAAM,CAAC,MAAM,EACjB;oBACI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;iBACrC;gBAED,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;gBACrB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACtD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACpC;YAED,OAAO,IAAI,CAAC;SACf;;;;;;;QAQD,WAAW,CAAC,GAAG,OAAiB;YAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC;gBACI,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAElD,IAAI,KAAK,KAAK,CAAC,CAAC,EAChB;oBACI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBAChE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBACrC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;iBACxB;aACJ;YAED,OAAO,IAAI,CAAC;SACf;QAEO,aAAa,CAAC,CAAS,EAAE,CAAS;YAEtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,aAAkC,CAAC;YAElE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAEX,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAC1C;QAEO,cAAc;YAElB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAC7C;;;;QAKD,aAAa;YAET,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAEtB,IAAI,IAAI,CAAC,WAAW,EACpB;gBACI,IAAI,CAAC,aAAa,EAAE,CAAC;aACxB;YAED,OAAO,IAAI,CAAC;SACf;;;;QAKD,cAAc;YAEV,IAAI,IAAI,CAAC,eAAe,EACxB;gBACI,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,WAAW,CAAC,GAAmB,CAAC,SAAS,EAAE,CAAC;aACrD;SACJ;;;;;;;;;;;;;QAcD,UAAU;YAEN,IAAI,IAAI,CAAC,WAAW,EACpB;gBACI,OAAO;aACV;YAED,IAAI,IAAI,CAAC,SAAS,EAClB;gBACI,IAAI,CAAC,aAAa,EAAE,CAAC;aACxB;YACD,IAAI,IAAI,CAAC,SAAS,EAClB;gBACI,IAAI,CAAC,aAAa,EAAE,CAAC;aACxB;YAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;QAEO,aAAa;YAEjB,IAAI,IAAI,CAAC,eAAe,EACxB;gBACI,OAAO;aACV;YAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAE5B,MAAM,YAAY,GAAG,IAAIL,UAAU,EAAE,CAAC;YACtC,MAAM,YAAY,GAAG,IAAIA,UAAU,EAAE,CAAC;YAEtC,MAAM,GAAG,GAAgB,IAAI,CAAC,WAAW,CAAC,GAAkB,CAAC;YAC7D,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;YAEhC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAwB;gBAEvC,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAE9C,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,EAC7B;oBACI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;oBACvB,cAAc,CAAC,WAAW,GAAG,KAAK,CAAC;oBACnC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;oBAE/C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;iBAClC;aACJ,CAAC;YAEF,GAAG,CAAC,UAAU,GAAG,CAAC,CAAwB,EAAE,MAAkB;gBAE1D,IAAI,IAAI,CAAC,UAAU,EACnB;oBACI,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAEvE,cAAc,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;oBAClC,cAAc,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;oBAElC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;iBACjC;aACJ,CAAC;YAEF,GAAG,CAAC,SAAS,GAAG,CAAC,CAAwB;gBAErC,IAAI,IAAI,CAAC,UAAU,EACnB;oBACI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;oBACxB,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;oBAGjC,UAAU,CAAC;wBAEP,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;wBACvC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;wBAEpD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;qBAChC,EAAE,CAAC,CAAC,CAAC;iBACT;aACJ,CAAC;YAEF,GAAG,CAAC,UAAU,EAAE,CAAA;SACnB;;;;QAKD,aAAa;YAET,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAEtB,IAAI,IAAI,CAAC,WAAW,EACpB;gBACI,IAAI,CAAC,aAAa,EAAE,CAAC;aACxB;YAED,OAAO,IAAI,CAAC;SACf;;;;QAOD,cAAc;YAEV,IAAI,IAAI,CAAC,eAAe,EACxB;gBACI,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7D,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACjE;SACJ;QAEO,aAAa;YAEjB,IAAI,CAAC,IAAI,CAAC,eAAe,EACzB;gBACI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAExC,IAAI,CAAC,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC;gBAEzC,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK;oBAEhB,MAAM,IAAI,GAAG,kBAAkB,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBAEpE,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAC3B;wBACI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;wBACxB,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;wBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,KAAK,IAAI,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;wBAE/E,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;wBAC/E,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;4BAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;yBAAE;qBAC5E;iBACJ,CAAC;gBAEF,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrC,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACzC;SACJ;;;;;;;QAQD,OAAO,WAAW,CAAC,OAAgC;YAE/C,IAAI,OAAO,YAAY,MAAM,EAC7B;gBACI,OAAO,OAAO,CAAC;aAClB;YAED,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YAE5B,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAE1C,OAAO,MAAM,CAAC;SACjB;;;;;;;QAQD,OAAO,oBAAoB,CAAC,OAAe,EAAE,KAAa,EAAE,IAAiB;YAEzE,IAAI,IAAI,KAAKD,mBAAW,CAAC,OAAO,EAChC;gBACI,OAAO,KAAK,CAAC;aAChB;iBACI,IAAI,IAAI,KAAKA,mBAAW,CAAC,OAAO,EACrC;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aACnC;YAED,OAAO,OAAO,CAAC;SAClB;;IA9lCD;;;IAGc,kBAAW,GAAG,GAAG,CAAC;;ICtCpC;;;;;;AAMA,IAAA,WAAY,KAAK;QAEb,iCAAQ,CAAA;QACR,+BAAO,CAAA;QACP,wCAAc,CAAA;QACd,wCAAc,CAAA;QACd,yCAAe,CAAA;QACf,2CAAgB,CAAA;QAChB,0CAAiB,CAAA;IACrB,CAAC,EATWO,aAAK,KAALA,aAAK,QAShB;;ICfD;;;;;;;;;;;;;;;;;;;;;;;AAuBA,UAAa,aAAa;;;;;QAqBtB,YAAY,QAAyB,aAAa,CAAC,YAAY,EAAE,SAA0B,aAAa,CAAC,YAAY;YAEjH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;;;;;YAMvB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACnB;;;;;;;;;;;;;QAcD,QAAQ,CAAC,GAAoB;;;;;;;YAQzB,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SAC9C;;;;;;;;;;;;;QAcD,SAAS,CAAC,GAAoB;;;;;;;YAQ1B,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SAC/C;;;;;QAMD,IAAI,iBAAiB;YAEjB,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,SAAS,CAAC;SAClE;;;;;QAMD,IAAI,kBAAkB;YAElB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC;SACpE;;;;;;QAOD,IAAI,UAAU;YAEV,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;SAChC;QACD,IAAI,UAAU,CAAC,GAAW;YAEtB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;SAC1B;;;;;;QAOD,IAAI,SAAS;YAET,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;SAC/B;QACD,IAAI,SAAS,CAAC,GAAW;YAErB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;SACzB;;;;;;QAOD,IAAI,WAAW;YAEX,OAAO,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;SACjC;QACD,IAAI,WAAW,CAAC,GAAW;YAEvB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;SAC3B;;;;;;QAOD,IAAI,YAAY;YAEZ,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;SAClC;QACD,IAAI,YAAY,CAAC,GAAW;YAExB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;SAC5B;;;;;;;QAQD,SAAS,CAAC,IAAY,EAAE,GAAW,EAAE,KAAa,EAAE,MAAc;YAE9D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;SAC/B;QAED,OAAO,UAAU,CAAC,GAAoB;YAElC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAC3B;gBACI,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EACrB;oBACI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;iBAChD;qBACI,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC3B;oBACI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;iBAC3C;gBAED,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,EACzC;oBACI,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;iBACjD;aACJ;YAED,OAAO,GAAG,CAAC;SACd;;IAzLa,yBAAW,GAAG,UAAU,CAAC;IACzB,0BAAY,GAAG,UAAU,CAAC;IAC1B,uBAAS,GAAG,UAAU,CAAC;IAEvB,qBAAO,GAAG,IAAI,aAAa,EAAE,CAAC;;ICdhD;;;;;;;;;;;;IAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,UAAa,mBAAoB,SAAQ,aAAa;QAUlD,YAAY,OAA4B;YAEpC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAErC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;YAE5C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAIA,aAAK,CAAC,IAAI,CAAC;YAC7D,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAIA,aAAK,CAAC,MAAM,CAAC;SAC9D;KACJ;;ICpED;;;;;;;;;IAUA;;;;;;;;;;;AAWA,UAAa,iBAAkB,SAAQ,aAAa;QAShD,YAAY,OAA0B;YAElC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;;;;;;;;YASrC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;;;;;;;;YASxB,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;;;;;;;;;;YAWxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;SAC5E;;IAvCM,gCAAc,GAAG,IAAIN,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,+BAAa,GAAG,IAAIA,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,kCAAiC;;ICxBrF;;;;;;;;;IAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,UAAa,mBAAoB,SAAQ,aAAa;QA0ClD,YAAY,OAA4B;YAEpC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;;;;;;;YAQrC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,mBAAmB,CAAC,aAAa,CAAC;;;;;;YAOlE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAIM,aAAK,CAAC,IAAI,CAAC;;;;;;YAO7D,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAIA,aAAK,CAAC,GAAG,CAAC;SAC3D;;IAjED;;;;;IAKO,+BAAW,GAAG,MAAM,CAAC;IAE5B;;;;;IAKO,8BAAU,GAAG,MAAM,CAAC;IAE3B;;;;;IAKO,gCAAY,GAAG,MAAM,CAAC;IAE7B;;;;;IAKO,iCAAa,GAAG,MAAM,CAAC;IAE9B;;;;;;IAMO,iCAAa,GAAG,MAAM,CAAC;;IClFlC;;;;;;;;;;;;AAYA,UAAa,UAAU;QAMnB,QAAQ,CAAC,IAAiB;YAEtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;QAED,QAAQ;YAEJ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;QAED,QAAQ;YAEJ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;YACzB,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;YAExF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC/C;gBACI,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAsB,CAAC;gBAElF,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAE5B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EACnB;oBACI,CAAC,IAAI,KAAK,CAAC;iBACd;gBACD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EACnB;oBACI,CAAC,IAAI,MAAM,CAAC;iBACf;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,iBAAiB,CAAC,cAAc,CAAC;gBAE/D,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBAEtD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EACd,CAAC,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAC7B,CAAC,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;aACvC;SACJ;QAED,SAAS,CAAC,QAAgB,EAAE,SAAiB,EAAE,SAAsB,EAAE,UAAuB;;;YAK1F,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;YAC/B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;;YAG1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC/C;gBACI,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAsB,CAAC;gBAElF,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;gBAClF,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;gBACvF,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBACzE,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAE5E,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;aAC9E;YAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAClE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAEtE,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9B;QAEO,mBAAmB,CAAC,KAAa,EAAE,iBAA8B;YAErE,IAAI,KAAK,KAAK,aAAa,CAAC,YAAY,EACxC;;gBAEI,OAAO,iBAAiB,KAAKP,mBAAW,CAAC,SAAS,GAAGA,mBAAW,CAAC,SAAS,GAAGA,mBAAW,CAAC,OAAO,CAAC;aACpG;YAED,OAAO,iBAAiB,CAAC;SAC5B;QAEO,iBAAiB,CAAC,gBAAwB,EAAE,SAAsB;YAEtE,IAAI,SAAS,KAAKA,mBAAW,CAAC,OAAO,EACrC;gBACI,OAAO,gBAAgB,CAAC;aAC3B;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YAC1C,IAAI,aAAa,GAAG,CAAC,CAAC;YAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC/C;gBACI,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC7C,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAsB,CAAC;gBAClF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,cAAc,CAAC;;;gBAI5E,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;gBAExF,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;aACjD;YAED,IAAI,SAAS,KAAKA,mBAAW,CAAC,OAAO,EACrC;gBACI,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;aAC7D;YAED,OAAO,aAAa,CAAC;SACxB;QAEO,kBAAkB,CAAC,iBAAyB,EAAE,UAAuB;YAEzE,IAAI,UAAU,KAAKA,mBAAW,CAAC,OAAO,EACtC;gBACI,OAAO,iBAAiB,CAAC;aAC5B;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YAC1C,IAAI,cAAc,GAAG,CAAC,CAAC;YAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC/C;gBACI,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAC/C,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAsB,CAAC;gBAClF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,cAAc,CAAC;gBAE5E,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;gBAE1F,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;aACnD;YAED,IAAI,UAAU,KAAKA,mBAAW,CAAC,OAAO,EACtC;gBACI,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;aAChE;YAED,OAAO,cAAc,CAAC;SACzB;QAEO,mBAAmB;YAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC/C;gBACI,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAsB,CAAC;gBAClF,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC3F,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;gBAEhG,IAAI,SAAS,KAAK,aAAa,CAAC,YAAY,EAC5C;oBACI,SAAS,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;iBACzC;gBACD,IAAI,UAAU,KAAK,aAAa,CAAC,YAAY,EAC7C;oBACI,UAAU,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;iBAC3C;gBAED,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,WAAW,EACzF;oBACI,MAAM,CAAC,OAAO,CACV,IAAI,CAAC,KAAK,KAAK,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,EAC1E,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,GAAG,UAAU,EAC7EA,mBAAW,CAAC,OAAO,EACnBA,mBAAW,CAAC,OAAO,CACtB,CAAC;iBACL;aACJ;SACJ;QAED,gBAAgB;YAEZ,OAAO,IAAI,CAAC,cAAc,CAAC;SAC9B;QAED,iBAAiB;YAEb,OAAO,IAAI,CAAC,eAAe,CAAC;SAC/B;KACJ;;IC/MD;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,UAAa,WAAY,SAAQ,MAAM;;;;;;QASnC,SAAS,CAAC,SAAyB;YAE/B,IAAI,IAAI,CAAC,SAAS,EAClB;gBACI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;aAC7B;YAED,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAE3B,IAAI,SAAS,EACb;gBACI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aACjC;YAED,OAAO,IAAI,CAAC;SACf;;;;;QAMD,gBAAgB;YAEZ,IAAI,CAAC,SAAS,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;SACpC;QAED,SAAS,CAAC,KAAa,EAAE,MAAc,EAAE,SAAsB,EAAE,UAAuB;YAEpF,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YAEtD,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EACpC;gBACI,OAAO;aACV;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB;gBACI,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B;YAED,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YAE/G,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC;SAC5F;QAED,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,KAAK,GAAG,IAAI;YAE7D,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAElC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EACpC;gBACI,OAAO;aACV;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB;gBACI,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B;YAED,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;SAC7B;KACJ;;ICjGD;;;;;;;AAOA,UAAa,gBAAiB,SAAQ,WAAW;QAI7C;YAEI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,OAAO,GAAG,IAAIQ,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;SAC9C;QAED,MAAM;YAEF,KAAK,CAAC,MAAM,EAAE,CAAC;SAClB;QAED,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,KAAc;YAE7D,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAEhC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;SACrC;KACJ;;ICbD;;;;;;;;;;AAUA,UAAsB,eAAgB,SAAQ,gBAAgB;;;;;;;QAgB1D,YAAY,UAA6B,EAAE;YAEvC,KAAK,EAAE,CAAC;YA6FJ,eAAU,GAAG;gBAEjB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBAC7D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;aAC5D,CAAC;YAEM,gBAAW,GAAG;gBAElB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBAC9D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;aAC/D,CAAC;YAEQ,kBAAa,GAAG,CAAC,CAAM;gBAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;gBAE5C,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,EACpC;oBACI,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACjB,CAAC,CAAC,cAAc,EAAE,CAAC;iBACtB;qBACI,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,QAAQ,CAAC,OAAO,EAC3C;oBACI,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAClB,CAAC,CAAC,cAAc,EAAE,CAAC;iBACtB;qBACI,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,QAAQ,CAAC,UAAU,EAC9C;oBACI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACrB,CAAC,CAAC,cAAc,EAAE,CAAC;iBACtB;gBAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACxB,CAAC;YAEM,8BAAyB,GAAG;gBAEhC,IAAI,CAAC,IAAI,CAAC,eAAe,EACzB;oBACI,IAAI,CAAC,IAAI,EAAE,CAAC;iBACf;aACJ,CAAC;YApIE,IAAI,OAAO,CAAC,UAAU,EACtB;gBACI,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;aAC3C;;YAGD,IAAI,OAAO,CAAC,eAAe,EAC3B;gBACI,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAA;aAClD;;YAGD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;;YAGxB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAE7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;;;;;YAMxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;;;;;;;YAQjC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAEjC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,EAAqC;gBAExE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACf,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;aAC/B,CAAC,CAAC;YAEH,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7E,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,kBAAkB,EAAE,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;SACvF;;;;QAKD,KAAK,CAAC,EAAsC;YAExC,IAAI,IAAI,CAAC,SAAS,EAClB;gBACI,OAAO;aACV;YAED,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAEvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACtB;;;;QAKD,IAAI;YAEA,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB;gBACI,OAAO;aACV;YAED,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;YAElC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,WAAW,EAAE,CAAC;YAEnB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACrB;;;;;;QAOD,IAAI,SAAS;YAET,OAAO,IAAI,CAAC,UAAU,CAAC;SAC1B;QA6CD,UAAU;YAEN,KAAK,CAAC,UAAU,EAAE,CAAC;YACnB,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC/D;;;;;;;;;;;;;;QAkBD,IAAc,eAAe;YACzB,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAA;SAC7D;KACJ;;IC7MD;;;;;;AAMA,UAAa,UAAW,SAAQ,MAAM;;;;;QAQlC,YAAY,IAAY,EAAE,SAA0B;YAEhD,KAAK,EAAE,CAAC;YAER,IAAI,CAAC,WAAW,GAAG,IAAIC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAClD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACpD;QAED,MAAM;YAEF,KAAK,CAAC,MAAM,EAAE,CAAC;YAEf,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAA;YACxC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAO,IAAI,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBAChE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;aAC1C;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EACtB;gBACI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBAClC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;aAC3C;YAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAC3B;gBACI,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;aAC/C;SACJ;;;;QAKD,IAAI,KAAK;YAEL,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;SAChC;QACD,IAAI,KAAK,CAAC,GAAW;YAEjB,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,CAAC;SAC/B;QAED,IAAI,IAAI;YAEJ,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;QACD,IAAI,IAAI,CAAC,GAAW;YAEhB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;SACpB;;;;QAKD,YAAY;YAER,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;SACjC;;;;;;;;;;;QAYD,YAAY,CAAC,SAAyB;YAElC,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC;YAEnC,OAAO,IAAI,CAAC;SACf;QAES,aAAa,CAAC,KAAY;YAEhC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAE3B,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,qBAAqB,CAAC,CAAC;YAChE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAEzC,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAgB;gBAE3C,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,SAAS,EACrC;oBACI,SAAS,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;iBAC7C;aACJ,CAAC,CAAC;SACN;KACJ;;ICvFD;;;;;;;AAOA,UAAa,MAAO,SAAQ,eAAe;;;;;;;;;QAevC,YAAY,OAAuB;YAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;YAEf,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YAErB,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EACpC;gBACI,OAAO,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAIC,cAAc,EAAE,CAAC,CAAC;aACrE;YAED,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAC3C,IAAI,iBAAiB,CAAC;gBAClB,KAAK,EAAE,aAAa,CAAC,YAAY;gBACjC,MAAM,EAAE,aAAa,CAAC,YAAY;gBAClC,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,GAAG;gBACN,MAAM,EAAE,iBAAiB,CAAC,aAAa;aAC1C,CAAC,CACS,CAAC;YAEhB,IAAI,IAAI,CAAC,UAAU,EACnB;gBACI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAClC;YAED,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC;SAC3C;QAED,OAAO,CAAC,CAAwB;YAE5B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAEjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;SACzB;QAED,aAAa,CAAC,CAAwB;YAElC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAEvB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;SAC/B;QAED,MAAM;YAEF,KAAK,CAAC,MAAM,EAAE,CAAC;;SAElB;QAED,UAAU;YAEN,KAAK,CAAC,UAAU,EAAE,CAAC;YAEnB,IAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,KAAK,CAAC;;SAEnD;;;;;QAMD,IAAI,KAAK;YAEL,IAAI,IAAI,CAAC,UAAU,EACnB;gBACI,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;aAC/B;YAED,OAAO,EAAE,CAAC;SACb;QACD,IAAI,KAAK,CAAC,GAAW;YAEjB,IAAI,IAAI,CAAC,UAAU,EACnB;gBACI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;aAC9B;SACJ;QAED,IAAI,IAAI;YAEJ,OAAO,IAAI,CAAC,UAAU,CAAC;SAC1B;QACD,IAAI,IAAI,CAAC,GAAQ;YAEb,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;SACpB;QAED,aAAa,CAAC,KAAY;;;YAItB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SACxC;KACJ;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;;IC5IH;;;;;;;;IASA;;;;;;;;;;;AAWA,UAAa,QAAS,SAAQ,eAAe;;;;;;;;;;;QAoBzC,YAAY,OAAyB;YAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;YAoGT,WAAM,GAAG,CAAC,GAAY;gBAE5B,IAAI,IAAI,CAAC,SAAS,EAClB;oBACI,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;iBACtC;aACJ,CAAC;YAEQ,UAAK,GAAG;gBAEd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEnB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,EAC5C;oBACI,OAAO;iBACV;gBAED,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;aACtC,CAAC;YAtHE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;YACxE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;YAE7C,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAC3B,IAAI,iBAAiB,CAAC;gBAClB,KAAK,EAAE,aAAa,CAAC,YAAY;gBACjC,MAAM,EAAE,aAAa,CAAC,YAAY;gBAClC,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,GAAG;gBACN,MAAM,EAAE,iBAAiB,CAAC,aAAa;aAC1C,CAAC,CACL,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE9B,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC;SAC3C;QAED,MAAM;;SAGL;QAED,IAAI,OAAO;YAEP,OAAO,IAAI,CAAC,QAAQ,CAAC;SACxB;QACD,IAAI,OAAO,CAAC,GAAY;YAEpB,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,EACzB;gBACI,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,EACnC;oBACI,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;iBACxD;gBAED,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACpB;SACJ;QAED,IAAI,KAAK;YAEL,OAAO,IAAI,CAAC,MAAM,CAAC;SACtB;QACD,IAAI,KAAK,CAAC,GAAW;YAEjB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;YAElB,IAAI,IAAI,CAAC,OAAO,EAChB;gBACI,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aACxD;SACJ;QAED,IAAI,aAAa;;YAEb,aAAO,IAAI,CAAC,KAAK,0CACX,uBAAuB,CACxB,WAAW,CAAC,IAAI,CAAC,UAAU,EAC3B,KAAK,CAAC;SACd;QAED,UAAU;YAEN,KAAK,CAAC,UAAU,EAAE,CAAC;YAEnB,MAAM,QAAQ,GAAI,IAAI,CAAC,WAAW,CAAC,KAAsB,CAAC;YAE1D,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI;gBAEvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;aAC5B,CAAC;YAEF,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,SAAS;gBAE5B,IAAI,SAAS,EACb;oBACI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;iBACzC;gBAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;aACjC,CAAC;YAEF,QAAQ,CAAC,OAAO,GAAG;gBAEf,IAAI,CAAC,KAAK,EAAE,CAAC;aAChB,CAAC;YAEF,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAC5B;gBACI,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;aAChE;SACJ;KAyCJ;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;;IChOH,MAAM,QAAQ;IACd;IACA,IAAI,WAAW,CAAC,CAAC;IACjB,IAAI;IACJ,QAAQ,OAAO,CAAC,CAAC;IACjB,KAAK;IACL,CAAC;;ICJD,SAAS,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO;IAC/C;IACA,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC;IACtB,IAAI,MAAM,CAAC,GAAG,MAAM,IAAI,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AACtD;IACA,IAAI,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,IAAI;IACJ,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpF;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC;IACrB,QAAQ;IACR,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,SAAS;IACT,aAAa,IAAI,GAAG,KAAK,CAAC;IAC1B,QAAQ;IACR,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvB,SAAS;IACT,aAAa,IAAI,GAAG,KAAK,CAAC;IAC1B,QAAQ;IACR,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,SAAS;IACT,aAAa,IAAI,GAAG,KAAK,CAAC;IAC1B,QAAQ;IACR,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,KAAK,CAAC;IACN,CAAC;AACD;IACA,eAAe,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9D,eAAe,CAAC,SAAS,CAAC,WAAW,GAAG,eAAe,CAAC;;AC9BnD,UAAC,IAAI,GAAG,EAAE,CAAC;AAChB;IACA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AAC9B;AACA,IAAO,SAAS,MAAM,CAAC,EAAE;IACzB;IACA,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAChD;IACA,IAAI,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC;AACvB;IACA,IAAI,OAAO,CAAC,CAAC;IACb,CAAC;AACD;IACA,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;AAC9B;IACA;IACA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB;IACA;AACA,IAAO,SAAS,QAAQ,CAAC,cAAc,EAAE,eAAe,EAAE,iBAAiB;IAC3E;IACA,IAAI,OAAO;IACX,QAAQ,MAAM,EAAE,cAAc;IAC9B,QAAQ,OAAO,EAAE,eAAe;IAChC,QAAQ,SAAS,EAAE,iBAAiB;IACpC,KAAK,CAAC;IACN,CAAC;AACD;IACA,IAAI,CAAC,MAAM,GAAG;IACd,IAAI,QAAQ,EAAE,MAAM;IACpB,CAAC,CAAC;AACF;IACA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ;IAClC,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClC;IACA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ;IACnC,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClC;IACA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ;IACnC,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClC;IACA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ;IACnC,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClC;IACA;IACA,IAAI,CAAC,MAAM,GAAG;IACd,IAAI,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,IAAI;IACJ,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI;IAClC,QAAQ;IACR,YAAY,OAAO,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,SAAS;IACT,aAAa,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;IAC7B,QAAQ;IACR,YAAY,OAAO,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/D,SAAS;IACT,aAAa,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI;IAC/B,QAAQ;IACR,YAAY,OAAO,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAClE,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IACjE,KAAK,CAAC;IACN,IAAI,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,IAAI;IACJ,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;IACxB,QAAQ;IACR,YAAY,OAAO,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,SAAS;IACT,aAAa,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;IAC7B,QAAQ;IACR,YAAY,OAAO,MAAM,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACzD,SAAS;IACT,aAAa,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI;IAC/B,QAAQ;IACR,YAAY,OAAO,MAAM,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IAC5D,SAAS;AACT;IACA,QAAQ,OAAO,MAAM,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IAC3D,KAAK,CAAC;IACN,IAAI,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC;IACnC,IAAI;IACJ,QAAQ,MAAM,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACjC;IACA,QAAQ,IAAI,MAAM;IAClB,QAAQ;IACR,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,SAAS;IACT;IACA,QAAQ;IACR,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS;IACT,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;IACxB,QAAQ;IACR,YAAY,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,SAAS;IACT,aAAa,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;IAC7B,QAAQ;IACR,YAAY,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACtD,SAAS;IACT,aAAa,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI;IAC/B,QAAQ;IACR,YAAY,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IACzD,SAAS;IACT;IACA,QAAQ;IACR,YAAY,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IAC5D,SAAS;AACT;IACA,QAAQ,OAAO,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;IACtD,KAAK,CAAC;IACN,CAAC,CAAC;AACF;IACA;IACA,IAAI,CAAC,IAAI,GAAG;IACZ,IAAI,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;IAC9B,IAAI;IACJ,QAAQ,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,KAAK,CAAC;IACN,IAAI,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,IAAI;IACJ,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,KAAK,CAAC;IACN,IAAI,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,IAAI;IACJ,QAAQ,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5G,KAAK,CAAC;IACN,CAAC,CAAC;AACF;IACA;IACA,IAAI,CAAC,IAAI,GAAG;IACZ,IAAI,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;IAC9B,IAAI;IACJ,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACjD,KAAK,CAAC;IACN,IAAI,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,IAAI;IACJ,QAAQ,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACxC,KAAK,CAAC;IACN,IAAI,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,IAAI;IACJ,QAAQ,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACzG,KAAK,CAAC;IACN,CAAC,CAAC;AACF;IACA;IACA,IAAI,CAAC,IAAI,GAAG;IACZ,IAAI,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;IAC9B,IAAI;IACJ,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,KAAK,CAAC;IACN,IAAI,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,IAAI;IACJ,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;IACrC,KAAK,CAAC;IACN,IAAI,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,IAAI;IACJ,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,CAAC;IACN,CAAC,CAAC;;UC1KW,OAAO,GAAG;QACnB,IAAI,CAAC,KAAa,EAAE,IAAY,EAAE,GAAW;YAEzC,IAAI,GAAG,GAAG,CAAC;gBAAE,GAAG,GAAG,CAAC,CAAC;iBAChB,IAAI,GAAG,GAAG,CAAC;gBAAE,GAAG,GAAG,CAAC,CAAC;YAE1B,OAAO,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC;SACvC;QACD,KAAK,CAAC,MAAc,EAAE,QAAgB;YAElC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAEnC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;SACzC;QACD,cAAc,CAAC,CAAM;YAEjB,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAE3B,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC;SAC5C;QACD,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;YAEpC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;SACzF;QACD,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;YAEvC,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;SAClC;QACD,WAAW,CAAC,CAAS;YAEjB,OAAO;gBACH,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;gBAC9B,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;gBAC5B,CAAC,EAAE,CAAC,GAAG,GAAG;aACb,CAAC;SACL;QACD,QAAQ,CAAC,GAAQ;YAEb,IAAI,GAAG,KAAK,IAAI,EAChB;gBACI,GAAG,GAAG,QAAQ,CAAC;aAClB;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EACf;gBACI,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;aAChC;;YAGD,MAAM,cAAc,GAAG,kCAAkC,CAAC;YAE1D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBAElD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAChC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,CAAC,2CAA2C,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAEvE,OAAO,MAAM,GAAG;gBACZ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;aAC7B,GAAG,IAAI,CAAC;SACZ;KACJ;;IC5DD;;;;;;;AAOA,UAAa,MAAO,SAAQ,MAAM;QAI9B,YAAY,OAAqB;YAE7B,KAAK,EAAE,CAAC;YAER,IAAI,CAAC,aAAa,GAAG,IAAIC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACtD;QAED,MAAM;YAEF,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EACtB;gBACI,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;aACvC;YAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAC3B;gBACI,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;aACjD;SACJ;QAED,OAAO,SAAS,CAAC,QAAQ;YAErB,OAAO,IAAI,MAAM,CAAC,IAAIC,YAAY,CAAC,IAAIC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACvE;KACJ;AAGD,UAAa,WAAW,GAAG,MAAM;;IChCjC;;;;;;;;;;AAUA,UAAa,YAAY;QAOrB,QAAQ,CAAC,IAAiB;YAEtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;QAED,QAAQ;YAEJ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;QAED,QAAQ;YAEJ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;YACzB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC;YAElC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;YACxC,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;YAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAC9C;gBACI,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,aAAa,IAAI,KAAK,CAAC,aAAa,IAAI,EAAE,CAAwB,CAAC;gBAEzE,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,UAAU,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;gBAC3F,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,IAAI,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;gBAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;gBAC5F,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;gBAE/F,IAAI,CAAC,GAAG,UAAU,CAAC;gBACnB,IAAI,CAAC,GAAG,SAAS,CAAC;gBAElB,QAAQ,aAAa,CAAC,eAAe;oBAEjC,KAAKN,aAAK,CAAC,MAAM;wBACb,CAAC,GAAG,CAAC,WAAW,GAAG,UAAU,GAAG,UAAU,IAAI,CAAC,CAAC;wBAChD,MAAM;oBACV,KAAKA,aAAK,CAAC,KAAK;wBACZ,CAAC,GAAG,WAAW,GAAG,UAAU,CAAC;wBAC7B,MAAM;iBACb;gBAED,QAAQ,aAAa,CAAC,aAAa;oBAE/B,KAAKA,aAAK,CAAC,MAAM;wBACb,CAAC,GAAG,CAAC,YAAY,GAAG,SAAS,GAAG,WAAW,IAAI,CAAC,CAAC;wBACjD,MAAM;oBACV,KAAKA,aAAK,CAAC,MAAM;wBACb,CAAC,GAAG,YAAY,GAAG,WAAW,CAAC;wBAC/B,MAAM;iBACb;gBAED,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;aACvD;SACJ;QAED,SAAS,CAAC,UAAkB,EAAE,WAAmB,EAAE,SAAsB,EAAE,UAAuB;YAE9F,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YAE1C,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,aAAa,GAAG,CAAC,CAAC;YAEtB,MAAM,aAAa,GAAG,SAAS,KAAKP,mBAAW,CAAC,OAAO,GAAGA,mBAAW,CAAC,OAAO,GAAG,SAAS,CAAC;YAC1F,MAAM,cAAc,GAAG,UAAU,KAAKA,mBAAW,CAAC,OAAO,GAAGA,mBAAW,CAAC,OAAO,GAAG,UAAU,CAAC;YAE7F,IAAI,UAAU,GAAG,KAAK,CAAC;;;YAIvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC/C;gBACI,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAwB,CAAC;gBAEpF,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,CAAC,WAAW,EAC5C;oBACI,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;iBAC9G;gBACD,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,WAAW,EAC7C;oBACI,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;iBAC/G;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;gBACjF,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;gBAChF,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;gBAClF,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;;gBAGrF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC5C,MAAM,gBAAgB,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,GAAG,UAAU,CAAC;gBAC5E,MAAM,iBAAiB,GAAG,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;gBAE/E,MAAM,eAAe,GAAG,UAAU,GAAGA,mBAAW,CAAC,OAAO,GAAG,aAAa,CAAC;gBACzE,MAAM,gBAAgB,GAAG,WAAW,GAAGA,mBAAW,CAAC,OAAO,GAAG,cAAc,CAAC;;gBAG5E,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;gBAEjE,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;gBAEvF,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CACvC,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CACrC,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBAE7E,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;gBACvD,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;aAC1D;YAED,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YACtF,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YAE1F,IAAI,CAAC,UAAU,EACf;gBACI,OAAO;aACV;;YAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC/C;gBACI,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAwB,CAAC;gBAEpF,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACzC;oBACI,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;oBACzF,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;oBACxF,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;oBAC1F,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;oBAE7F,MAAM,CAAC,OAAO,CACV,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,GAAG,UAAU,EAC9D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,GAAG,SAAS,EAChE,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,GAAGA,mBAAW,CAAC,OAAO,GAAGA,mBAAW,CAAC,OAAO,EACtF,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,kBAAkB,GAAGA,mBAAW,CAAC,OAAO,GAAGA,mBAAW,CAAC,OAAO,CAC3F,CAAC;iBACL;aACJ;SACJ;QAED,gBAAgB;YAEZ,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;QAED,iBAAiB;YAEb,OAAO,IAAI,CAAC,cAAc,CAAC;SAC9B;;;;;;;;QASS,eAAe,CAAC,MAAc,EAAE,KAAa,EAAE,aAAsB;YAE3E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;YAE9D,OAAO,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;SAClD;;;;;;;;;QAUS,cAAc,CAAC,WAAmB,EAAE,SAAiB,EAAE,KAAa;YAE1E,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EACxD;gBACI,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC;aAChD;iBACI,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAClC;gBACI,OAAO,CAAC,SAAS,GAAG,KAAK,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC;aAClD;iBACI,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAChC;gBACI,OAAO,CAAC,WAAW,GAAG,KAAK,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;aAClD;YAED,OAAO,WAAW,GAAG,KAAK,GAAG,SAAS,CAAC;SAC1C;KACJ;;IClND;;;;;;;IAQA;;;;;;;IAQA;;;;;;;IAQA;;;;;;;;;OASG;;ICpCH,MAAM,EACF,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,aAAa,GAChB,GAAG,mBAAmB,CAAC;IAExB,MAAM,EACF,WAAW,GACd,GAAG,aAAa,CAAC;IAElB,MAAM,EACF,OAAO,EACP,OAAO,GACV,GAAGA,mBAAW,CAAC;IAEhB;;;;;;;;;;;;AAYA,UAAa,YAAY;QAoBrB;YAEI,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;SAC3B;QAED,QAAQ,CAAC,IAAiB;YAEtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;QAED,QAAQ;YAEJ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;QAED,QAAQ;YAEJ,IAAI,CAAC,cAAc,CACf,IAAI,CAAC,WAAW,EAChB,CAAC,EACD,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACvF,IAAI,CAAC,cAAc,CACf,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAC5C,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,oBAAoB,CAC5B,CAAC;YACF,IAAI,CAAC,cAAc,CACf,IAAI,CAAC,aAAa,EAClB,CAAC,EACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAClD,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,oBAAoB,CAC5B,CAAC;YACF,IAAI,CAAC,cAAc,CACf,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,oBAAoB,CAC5B,CAAC;SACL;QAED,cAAc,CACV,OAAiB,EACjB,OAAe,EACf,OAAe,EACf,WAAmB,EACnB,YAAoB;;YAGpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC9C;gBACI,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAE1B,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEV,cAAS,MAAM,CAAC,aAAqC,0CAAE,eAAe;oBAElE,KAAKO,aAAK,CAAC,MAAM;wBAAE,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;wBAAC,MAAM;oBAC5E,KAAKA,aAAK,CAAC,KAAK;wBAAE,CAAC,GAAG,WAAW,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;wBAAC,MAAM;oBACrE;wBAAS,CAAC,GAAG,CAAC,CAAC;wBAAC,MAAM;iBACzB;gBAED,cAAS,MAAM,CAAC,aAAqC,0CAAE,aAAa;oBAEhE,KAAKA,aAAK,CAAC,MAAM;wBAAE,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;wBAAC,MAAM;oBAC9E,KAAKA,aAAK,CAAC,MAAM;wBAAE,CAAC,GAAG,YAAY,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;wBAAC,MAAM;oBACxE;wBAAS,CAAC,GAAG,CAAC,CAAC;wBAAC,MAAM;iBACzB;gBAED,CAAC,IAAI,OAAO,CAAC;gBACb,CAAC,IAAI,OAAO,CAAC;gBAEb,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,CAAC;aAC5F;SACJ;;;;;;;;QASD,SAAS,CAAC,QAAgB,EAAE,SAAiB,EAAE,SAAsB,EAAE,UAAuB;YAE1F,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;;YAGzB,MAAM,cAAc,GAAG,SAAS,KAAKP,mBAAW,CAAC,OAAO,GAAGA,mBAAW,CAAC,OAAO,GAAG,SAAS,CAAC;YAC3F,MAAM,eAAe,GAAG,UAAU,KAAKA,mBAAW,CAAC,OAAO,GAAGA,mBAAW,CAAC,OAAO,GAAG,SAAS,CAAC;;YAG7F,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,eAAe;YACxC,IAAI,CAAC,UAAU,EACf,QAAQ,EACR,SAAS,EACT,cAAc,EAAE,eAAe,CAClC,CAAC;YACF,IAAI,CAAC,EAAE,EAAE,EAAE,IAAG,KAAK,CAAC,GAAG,IAAI,CAAC,eAAe;YACvC,IAAI,CAAC,aAAa,EAClB,QAAQ,EACR,SAAS,EACT,cAAc,EAAE,eAAe,CAClC,CAAC;YACF,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,eAAe;YAC7C,IAAI,CAAC,aAAa,EAClB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,UAAU,CAAC,CAAC;;YAGhB,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,eAAe;YACpC,IAAI,CAAC,WAAW,EAChB,QAAQ,EACR,EAAE,EACF,cAAc,EAAEA,mBAAW,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,eAAe;YACpC,IAAI,CAAC,YAAY,EACjB,QAAQ,EACR,EAAE,EACF,cAAc,EAAEA,mBAAW,CAAC,OAAO,CAAC,CAAC;;;YAKzC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;;YAG/B,IAAI,SAAS,KAAKA,mBAAW,CAAC,OAAO,EACrC;gBACI,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;aACjC;iBACI,IAAI,SAAS,KAAKA,mBAAW,CAAC,OAAO,EAC1C;gBACI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aACrD;iBAED;gBACI,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;aACjC;YAED,IAAI,UAAU,KAAKA,mBAAW,CAAC,OAAO,EACtC;gBACI,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;aACnC;iBACI,IAAI,UAAU,KAAKA,mBAAW,CAAC,OAAO,EAC3C;gBACI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;aACxD;iBAED;gBACI,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;aACnC;YAED,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YACxB,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YAExB,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,EACnC;gBACI,MAAM,IAAI,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;;gBAGrC,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,EAC9B;oBACI,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,CAAC,CAAC;oBAEpE,EAAE,GAAG,KAAK,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC;oBACxC,EAAE,GAAG,KAAK,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC;oBACxC,EAAE,GAAG,KAAK,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC;iBAC3C;;qBAGD;oBACI,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;oBAElD,EAAE,IAAI,SAAS,CAAC;oBAChB,EAAE,IAAI,SAAS,CAAC;oBAChB,EAAE,IAAI,SAAS,CAAC;iBACnB;aACJ;YAED,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,EACjC;gBACI,MAAM,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;;gBAGnC,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,EAC7B;oBACI,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,CAAC;oBAElE,EAAE,GAAG,KAAK,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC;oBACxC,EAAE,GAAG,KAAK,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC;oBACxC,EAAE,GAAG,KAAK,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC;iBAC3C;;qBAGD;oBACI,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;oBAEhD,EAAE,IAAI,SAAS,CAAC;oBAChB,EAAE,IAAI,SAAS,CAAC;oBAChB,EAAE,IAAI,SAAS,CAAC;iBACnB;aACJ;;YAGD,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;YAE/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACtF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9E,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACxF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACpF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;SAC7F;;;;;;;;;;;;;;QAeS,eAAe,CACrB,IAAc,EACd,QAAgB,EAChB,SAAiB,EACjB,SAAsB,EACtB,UAAuB;YAGvB,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,IAAI,oBAAoB,GAAG,CAAC,CAAC;YAC7B,IAAI,qBAAqB,GAAG,CAAC,CAAC;YAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC3C;gBACI,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAC;gBAE3D,IAAI,CAAC,GAAG,QAAQ,CAAC;gBACjB,IAAI,CAAC,GAAG,SAAS,CAAC;gBAClB,IAAI,GAAG,GAAG,SAAS,CAAC;gBACpB,IAAI,GAAG,GAAG,UAAU,CAAC;gBAErB,IAAI,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,SAAS,EACzC;oBACI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;oBACf,GAAG,GAAG,OAAO,CAAC;oBAEd,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;iBAC5D;gBACD,IAAI,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,SAAS,EAC1C;oBACI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;oBAChB,GAAG,GAAG,OAAO,CAAC;oBAEd,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;iBAC9D;gBAED,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAE/B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBACnD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;aACzD;YAED,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,CAAC;SACvE;;;;;;;;;;;;QAaS,WAAW,CACjB,IAAc,EACd,mBAA2B,EAC3B,oBAA4B;;YAG5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC3C;gBACI,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAEvB,IAAI,MAAM,CAAC,gBAAgB,EAAE,IAAI,mBAAmB;uBAC7C,MAAM,CAAC,iBAAiB,EAAE,IAAI,oBAAoB;uBAClD,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC;uBAC7B,MAAM,CAAC,iBAAiB,EAAE,GAAG,CAAC;uBAC9B,OAAA,MAAM,CAAC,aAAa,0CAAE,KAAK,MAAK,WAAW;uBAC3C,OAAA,MAAM,CAAC,aAAa,0CAAE,MAAM,MAAK,WAAW,EACnD;oBACI,SAAS;iBACZ;gBAED,IAAI,mBAAmB,GAAG,CAAC,IAAI,oBAAoB,GAAG,CAAC,EACvD;oBACI,MAAM,EAAE,GAAG,OAAA,MAAM,CAAC,aAAa,0CAAE,KAAK,MAAK,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;oBAC3E,MAAM,EAAE,GAAG,OAAA,MAAM,CAAC,aAAa,0CAAE,MAAM,MAAK,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;oBAE5E,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;iBACrE;aACJ;SACJ;;;;QAKS,YAAY;YAElB,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC/C;gBACI,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAwB,CAAC;gBAEpF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC;gBAE5C,QAAQ,MAAM;oBAEV,KAAK,WAAW;wBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAAC,MAAM;oBACvD,KAAK,UAAU;wBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAAC,MAAM;oBACrD,KAAK,YAAY;wBAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAAC,MAAM;oBACzD,KAAK,aAAa;wBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAAC,MAAM;oBAC3D,SAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC5C;aACJ;SACJ;;;;QAKS,YAAY;YAElB,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC;;;;QAKS,iBAAiB;YAEvB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;SACjC;QAED,gBAAgB;YAEZ,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;QAED,iBAAiB;YAEb,OAAO,IAAI,CAAC,cAAc,CAAC;SAC9B;KACJ;;UC9bY,YAAY;QAQrB,YAAY,cAAyC,UAAU,EAAE,UAAmB,QAAQ;YAExF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SAC1B;QAED,QAAQ,CAAC,IAAiB;YAEtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;QAED,QAAQ;YAEJ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;QAED,QAAQ;YAEJ,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,KAAK,UAAU;kBACzC,IAAI,CAAC,aAAa;kBAClB,IAAI,CAAC,cAAc,CAAC;YAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC/C;gBACI,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;gBAG3B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,KAAK,UAAU;sBACnC,MAAM,CAAC,gBAAgB,EAAE;sBACzB,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,KAAK,UAAU;sBACnC,MAAM,CAAC,iBAAiB,EAAE;sBAC1B,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAEhC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEV,IAAI,CAAC,GAAG,OAAO,EACf;oBACI,QAAQ,IAAI,CAAC,OAAO;wBAEhB,KAAK,QAAQ,CAAC;wBACd,KAAK,QAAQ;4BACT,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;4BACtB,MAAM;wBACV,KAAK,OAAO,CAAC;wBACb,KAAK,QAAQ;4BACT,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;4BAChB,MAAM;qBACb;iBACJ;gBAED,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EACnC;oBACI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;iBACnD;qBAED;oBACI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;iBACnD;gBAED,QAAQ,IAAI,CAAC,CAAC;aACjB;SACJ;QAED,SAAS,CAAC,UAAkB,EAAE,WAAmB,EAAE,SAAsB,EAAE,UAAuB;YAE9F,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YAC1C,MAAM,aAAa,GAAG,SAAS,KAAKA,mBAAW,CAAC,OAAO,GAAGA,mBAAW,CAAC,OAAO,GAAG,SAAS,CAAC;YAC1F,MAAM,cAAc,GAAG,UAAU,KAAKA,mBAAW,CAAC,OAAO,GAAGA,mBAAW,CAAC,OAAO,GAAG,UAAU,CAAC;YAE7F,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC/C;gBACI,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;gBAE7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;gBAC1E,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;gBAC9E,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,GAAGA,mBAAW,CAAC,OAAO,GAAG,aAAa,CAAC;gBACrF,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,GAAGA,mBAAW,CAAC,OAAO,GAAG,cAAc,CAAC;gBAExF,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;gBAEvF,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EACnC;oBACI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;oBACvD,MAAM,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;iBACxC;qBAED;oBACI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;oBACxD,MAAM,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;iBACvC;aACJ;YAED,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EACnC;gBACI,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;gBAC7B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;aAChC;iBAED;gBACI,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;gBAC5B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;aACjC;SACJ;QAED,gBAAgB;YAEZ,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;QAED,iBAAiB;YAEb,OAAO,IAAI,CAAC,cAAc,CAAC;SAC9B;KACJ;;UC7HY,WAAY,SAAQ,MAAM;QAInC,YAAY,OAA4B;YAEpC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEf,IAAI,EAAE,OAAO,CAAC,IAAI,YAAY,WAAW,CAAC,EAC1C;gBACI,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,YAAYc,YAAO,GAAG,OAAO,CAAC,IAAI;sBACxDA,YAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEjC,OAAO,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;aAC3C;YAED,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YAE/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAE/B,IAAI,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;SAChD;KACJ;;ICZD;;;;;;IAOA;;;;;;;;;;;;;;;IAgBA;;;;;;;;AAQA,UAAa,MAAO,SAAQ,MAAM;;;;;;;;;;;;;;QAsC9B,YAAY,OAAuB;YAE/B,KAAK,EAAE,CAAC;;;;;;;;;YAUR,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YAEvB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC;YACzC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC;YAC5D,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;YACnD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC;YACvD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;;YAGjC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK;oBACrC,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU;sBACpC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE;sBACvC,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC;YAElF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAEvC,IAAI,CAAC,YAAY,GAAG,IAAIb,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC;SAClD;QAED,UAAU;YAEN,KAAK,CAAC,UAAU,EAAE,CAAC;YAEnB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,SAAS,CAAC;YAEd,MAAM,kBAAkB,GAAG;gBAEvB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEhC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,EAClC;oBACI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;oBAE9B,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,UAAU,EAC5C;wBACI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBAClC;iBACJ;aACJ,CAAC;YAEF,MAAM,oBAAoB,GAAG;gBAEzB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAElC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,EACpC;oBACI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;oBAEhC,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,UAAU,EAC9C;wBACI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACpC;iBACJ;aACJ,CAAC;YAEF,MAAM,qBAAqB,GAAG,CAAC,aAAa,EAAE,IAAI;gBAE9C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC,CAAC;gBACnE,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,oBAAoB,EAAE,CAAC;aAC1B,CAAC;;YAGF,MAAM,UAAU,GAAgB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAkB,CAAC;YAE3E,UAAU,CAAC,OAAO,GAAG,CAAC,KAAwC;gBAE1D,KAAK,CAAC,eAAe,EAAE,CAAC;aAC3B,CAAC;YAEF,UAAU,CAAC,WAAW,GAAG;gBAErB,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC/B,SAAS,GAAG,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU;sBAC5C,IAAI,CAAC,KAAK,CAAC,KAAK;sBAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;aAC3B,CAAC;YAEF,UAAU,CAAC,UAAU,GAAG,CAAC,KAAK,EAAE,MAAkB;gBAE9C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CACpC,CAAC,EACD,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,SAAS,CACvF,CAAC,CAAC,CAAC;gBAER,oBAAoB,EAAE,CAAC;gBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB,CAAC;YAEF,UAAU,CAAC,SAAS,GAAG;gBAEnB,kBAAkB,EAAE,CAAC;gBACrB,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB,CAAC;;YAGF,MAAM,SAAS,GAAgB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAkB,CAAC;YAEzE,SAAS,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,SAAS;gBAEjC,IAAI,SAAS,EACb;oBACI,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;iBAClD;gBAED,KAAK,CAAC,eAAe,EAAE,CAAC;aAC3B,CAAC;YAEF,SAAS,CAAC,UAAU,GAAG,CAAC,KAAwC;gBAE5D,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;aACnD,CAAC;YAEF,SAAS,CAAC,SAAS,GAAG;gBAElB,kBAAkB,EAAE,CAAC;aACxB,CAAC;YAEF,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;QAED,IAAI,KAAK;YAEL,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SACxG;QACD,IAAI,KAAK,CAAC,GAAW;YAEjB,IAAI,GAAG,KAAK,IAAI,CAAC,KAAK,EACtB;gBACI,OAAO;aACV;YACD,IAAI,KAAK,CAAC,GAAG,CAAC,EACd;gBACI,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;aAChD;YAED,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAEnI,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,UAAU,EAC5C;gBACI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAClC;YACD,IAAI,OAAO,IAAI,CAAC,eAAe,KAAK,UAAU,EAC9C;gBACI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACpC;YAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EACnC;gBACI,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB;SACJ;QAED,IAAI,QAAQ;YAER,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QACD,IAAI,QAAQ,CAAC,GAAW;YAEpB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;YACrB,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;QAED,IAAI,QAAQ;YAER,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QACD,IAAI,QAAQ,CAAC,GAAW;YAEpB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;YACrB,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;QAED,IAAI,QAAQ;YAER,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QACD,IAAI,QAAQ,CAAC,GAAY;YAErB,IAAI,GAAG,KAAK,IAAI,CAAC,SAAS,EAC1B;gBACI,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;gBACrB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC;gBAChD,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC;aAClD;SACJ;;;;;;QAOS,gBAAgB;YAEtB,OAAO,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU;kBACvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE;kBAClD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;SAC9D;;;;;;;QAQS,0BAA0B,CAAC,MAAkB;;YAGnD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAEzF,IAAI,MAAc,CAAC;YACnB,IAAI,KAAa,CAAC;YAElB,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU,EAC1C;gBACI,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAEnD,MAAM,GAAG,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;gBAC9D,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;aAC3C;iBAED;gBACI,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAErD,MAAM,GAAG,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;gBAC9D,KAAK,GAAG,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;aAC7C;YAED,OAAO,MAAM,GAAG,KAAK,CAAC;SACzB;;;;QAKS,YAAY;YAElB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAE3B,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAChD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAChD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;YAEhD,IAAI,OAAe,CAAC;YACpB,IAAI,OAAe,CAAC;YAEpB,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU,EAC1C;gBACI,KAAK,IAAI,WAAW,CAAC;gBAErB,OAAO,GAAG,CAAC,MAAM,GAAG,YAAY,IAAI,CAAC,CAAC;gBACtC,OAAO,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;aACzC;iBAED;gBACI,MAAM,IAAI,YAAY,CAAC;gBAEvB,OAAO,GAAG,CAAC,KAAK,GAAG,WAAW,IAAI,CAAC,CAAC;gBACpC,OAAO,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;aAC1C;YAED,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,GAAG,YAAY,CAAC,CAAC;SAClF;;;;;;;;;;;QAYD,SAAS,CAAC,KAAa,EAAE,MAAc,EAAE,SAAiB,EAAE,UAAkB;YAE1E,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU;kBACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;kBAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC;kBAC3E,IAAI,CAAC,iBAAiB,CAAC;YACjC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,QAAQ;kBACtD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;kBAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC;kBAC7E,IAAI,CAAC,eAAe,CAAC;YAE/B,QAAQ,SAAS;gBAEb,KAAKD,mBAAW,CAAC,OAAO;oBACpB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;oBAC5B,MAAM;gBACV,KAAKA,mBAAW,CAAC,SAAS;oBACtB,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC;oBACnC,MAAM;gBACV,KAAKA,mBAAW,CAAC,OAAO;oBACpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;oBACpD,MAAM;aACb;YAED,QAAQ,UAAU;gBAEd,KAAKA,mBAAW,CAAC,OAAO;oBACpB,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;oBAC9B,MAAM;gBACV,KAAKA,mBAAW,CAAC,SAAS;oBACtB,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC;oBACrC,MAAM;gBACV,KAAKA,mBAAW,CAAC,OAAO;oBACpB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;oBACvD,MAAM;aACb;SACJ;;;;;;;;;;;;QAaD,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,KAAc;YAE/D,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAClC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YAE/B,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;;;;YAK5F,KAAK,CAAC,cAAc,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACzC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAE3C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAEA,mBAAW,CAAC,OAAO,EAAEA,mBAAW,CAAC,OAAO,CAAC,CAAC;YAElF,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;;IAED;;;;IAIO,+BAAwB,GAAkB,IAAIK,aAAa,EAAE;SAC/D,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;SACtB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;SACtB,OAAO,EAAE;SACT,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;SACpC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;SACZ,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAEnB;;;;IAIO,6BAAsB,GAAkB,IAAIA,aAAa,EAAE;SAC7D,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;SACtB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;SACtB,OAAO,EAAE;SACT,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;SACpC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;SACZ,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEnB;;;IAGO,qBAAc,GAAkB,IAAIA,aAAa,EAAE;SACrD,SAAS,CAAC,QAAQ,CAAC;SACnB,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;SACrB,OAAO,EAAE;SACT,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC;SACxB,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;SACtB,OAAO,EAAE,CAAC;IACf;;;;IAIO,iBAAU,GAAG,KAAK,CAAC;IAE1B;;;;IAIO,eAAQ,GAAG,KAAK,CAAC;;ICjf5B,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,MAAM,kBAAkB,GAAG,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,EAAE,CAAC;IACzB,MAAM,mBAAmB,GAAG,EAAE,CAAC;IAC/B,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,MAAM,WAAW;QAOb,YAAY,MAAS;YAEjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACxB;KACJ;IAED,MAAM,YAAY;QAWd;YAEI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;SACxB;QAED,MAAM;YAEF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAC3C;gBACI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC5B,OAAO,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;aACvD;SACJ;QAED,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI;YAEnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;YAEtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAChC;gBAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,CAAC;aAAE;iBAEpC;gBAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;aAAE;YAElC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;YAClB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EACvB;gBACI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;gBAC1B,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;aAC9D;SACJ;QAED,MAAM,CAAC,KAAa;YAEhB,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC;YAC1B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,EACjC;gBACI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACnC;SACJ;KACJ;IAED,MAAM,SAAS;QAkBX;YAEI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;SACxB;QAED,MAAM;YAEF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAC3C;gBACI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBAC3B,OAAO,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;aACvD;SACJ;QAED,GAAG,CAAC,GAAQ,EAAE,GAAW,EAAE,IAAS,EAAE,EAAO,EAAE,IAAY,EAAE,IAAS;YAElE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;YAC5E,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;YAClB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;YACtB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAE5B,IAAI,IAAI,CAAC,OAAO,EAChB;gBACI,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC/B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;aAC1E;iBAED;gBACI,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;gBACzB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aACrD;YAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YAEpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EACvB;gBACI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;gBAC1B,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;aAC9D;SACJ;QAED,MAAM,CAAC,KAAa;YAEhB,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC;YAC1B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3D,IAAI,IAAI,CAAC,IAAI,EACb;gBAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAAE;YAE3C,IAAI,IAAI,CAAC,OAAO,EAChB;gBACI,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/E,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/E,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aAC3G;iBAED;gBACI,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gBAErD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;aAC9D;YAED,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,EACjC;gBACI,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;SACJ;KACJ;IAED,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACvG,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAE3G,SAAS,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG;;QAGpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAC9B;YAAE,OAAO,IAAI,CAAC;SAAE;;QAGhB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAClF;YAAE,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;SAAE;;QAG7C,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACzD;YACI,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACjC;gBAAE,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;aAAE;iBACrE,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACvC;gBAAE,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;aAAE;YAE3E,OAAO,CAAC,CAAC;SACZ;;QAGD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACvD;YACI,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACjC;gBAAE,OAAO,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;aAAE;iBACrC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACvC;gBAAE,OAAO,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;aAAE;YAE3C,OAAO,CAAC,CAAC;SACZ;QAED,OAAO,CAAC,CAAC;IACb,CAAC;IAED,SAAS,SAAS,CAAC,EAAmB;QAElC,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACvC;YAAE,OAAO,GAAG,CAAC;SAAE;IACnB,CAAC;IAED,SAAS,UAAU,CAAC,EAAmB;QAEnC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EACd;YAAE,OAAO,EAAE,CAAC;SAAE;QACd,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACvC;YAAE,OAAO,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;SAAE;IAC/C,CAAC;IAED,SAAS,SAAS,CAAC,GAAQ;QAEvB,IAAI,CAAC,GAAG,CAAC,cAAc,EACvB;YACI,GAAG,CAAC,cAAc,GAAG,UAAU,CAAC;YAChC,UAAU,EAAE,CAAC;SAChB;QACD,IAAI,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE/C,IAAI,CAAC,MAAM,EACX;YACI,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;SACrE;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,SAAS,YAAY;QAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAC/C;YACI,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAC7B;gBAAE,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;aAAE;SACjC;QAED,MAAM,KAAK,GAAG,IAAI,SAAS,EAAE,CAAC;QAE9B,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,SAAS,eAAe;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAClD;YACI,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,EAChC;gBAAE,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;aAAE;SACpC;QAED,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC;QAE9B,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE5B,OAAO,EAAE,CAAC;IACd,CAAC;AAED,IAAO,MAAM,KAAK,GAAG;QACjB,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAK;YAEvB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC;YAEpB,KAAK,MAAM,GAAG,IAAI,MAAM,EACxB;gBACI,IAAI,GAAG,KAAK,YAAY,EACxB;oBACI,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;oBAE7B,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;oBAClC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oBAC3B,SAAS;iBACZ;gBAED,IAAI,GAAG,KAAK,UAAU,EACtB;oBACI,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;oBACvB,SAAS;iBACZ;gBAED,IAAI,IAAI,EACR;oBACI,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;oBAEvC,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW;wBAAE,SAAS;oBAE9C,IAAI,KAAK,EACT;wBACI,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;4BAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;qBACvD;yBAED;wBACI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EACvB;4BAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,EAAE,CAAC;yBAAE;wBACxC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;qBAC1E;iBACJ;aACJ;YAED,IAAI,IAAI,EACR;gBAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;aAAE;;gBAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;SAC9B;QACD,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;YAExB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC;YAEpB,KAAK,MAAM,GAAG,IAAI,MAAM,EACxB;gBACI,IAAI,GAAG,KAAK,YAAY,EACxB;oBACI,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;oBAE7B,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;oBAClC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oBAC3B,SAAS;iBACZ;gBAED,IAAI,GAAG,KAAK,UAAU,EACtB;oBACI,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;oBACvB,SAAS;iBACZ;gBAED,IAAI,IAAI,EACR;oBACI,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;oBAEtC,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW;wBAAE,SAAS;oBAE9C,IAAI,KAAK,EACT;wBACI,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;4BAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;qBACvD;yBAED;wBACI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EACvB;4BAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,EAAE,CAAC;yBAAE;wBACxC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;qBAC1E;iBACJ;aACJ;YAED,IAAI,IAAI,EACR;gBAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;aAAE;;gBAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;SAC9B;QACD,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI;YAExC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC;YAEpB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAC1B;gBACI,IAAI,GAAG,KAAK,YAAY,EACxB;oBACI,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;oBAE7B,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;oBACpC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oBAC3B,SAAS;iBACZ;gBAED,IAAI,GAAG,KAAK,UAAU,EACtB;oBACI,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACzB,SAAS;iBACZ;gBAED,IAAI,IAAI,EACR;oBACI,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAE/C,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,WAAW;wBAAE,SAAS;oBAExF,IAAI,KAAK,EACT;wBACI,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;4BAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;wBACpD,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;qBAC5B;yBAED;wBACI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EACvB;4BACI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,EAAE,CAAC;yBACvC;wBACD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;qBACnF;iBACJ;aACJ;YAED,IAAI,IAAI,EACR;gBAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;aAAE;;gBAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;SAChC;QACD,GAAG,CAAC,GAAG,EAAE,MAAM;YAEX,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAE9B,KAAK,MAAM,GAAG,IAAI,MAAM,EACxB;gBACI,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW;oBAAE,SAAS;gBAC9C,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;oBAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;aAC1B;SACJ;QACD,OAAO,CAAC,KAAK;YAET,KAAK,MAAM,EAAE,IAAI,mBAAmB,EACpC;gBACI,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;gBAEvC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAC/B;oBACI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBACpC;gBACD,IAAI,MAAM,CAAC,QAAQ,EACnB;oBACI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;iBAC9C;aACJ;SACJ;KACJ,CAAC;;IC5bF;;;;;;IAOA;;;;;;;;;;;;;AAaA,UAAa,SAAU,SAAQ,MAAM;QAMjC,YAAY,OAA0B;YAElC,KAAK,CAAC;gBACF,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE;gBACvD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE;gBAC1D,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,CAAC;aACd,CAAC,CAAC;YAEH,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YACrD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YACjC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;SACxB;QAED,UAAU;YAEN,KAAK,CAAC,UAAU,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;;YAGlB,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;gBAEhB,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CACpC,IAAI,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU,GAAG,GAAG,GAAG,GAAG,EAClD,IAAI,CAAC,YAAY,CAAC,CAAC;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;gBAEd,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,CAAC;aAC/C,CAAC,CAAC;SACN;QAED,YAAY,CAAC,MAAe;YAExB,IAAI,IAAI,CAAC,QAAQ,EACjB;gBACI,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAC3B;oBACI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;oBAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;iBACvB;qBACI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAChC;oBACI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;oBAClC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;iBACxB;aACJ;SACJ;;IAED;;;IAGO,uBAAa,GAAG,IAAIA,aAAa,EAAE;SACrC,SAAS,CAAC,QAAQ,CAAC;SACnB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACpB,OAAO,EAAE,CAAC;IAEf;;;IAGO,wBAAc,GAAkB,IAAIA,aAAa,EAAE;SACrD,SAAS,CAAC,QAAQ,CAAC;SACnB,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACnB,OAAO,EAAE;SACT,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC;SACxB,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACnB,OAAO,EAAE,CAAC;;ICjFnB;;;;;;;;AAQA,UAAa,YAAa,SAAQ,gBAAgB;;;;;;;;;;;;;;QA0C9C,YAAY,UAAsC,EAAE;YAEhD,KAAK,EAAE,CAAC;YAsSZ,qBAAgB,GAAG,CAAC,SAAiB,EAAE,GAAW;gBAE9C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;gBAErD,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS,KAAK,GAAG,EACrC;oBACI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;iBACxE;gBACD,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS,KAAK,GAAG,EACrC;oBACI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;iBAC1E;gBAED,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aACnG,CAAC;YAEF,kBAAa,GAAG,CAAC,GAAe;gBAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;gBAErD,IAAI,GAAG,CAAC;gBAER,IAAI,IAAI,CAAC,OAAO,EAChB;oBACI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAEvD,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAChC;wBACI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;wBACrB,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;qBACtB;yBACI,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,EAC5B;wBACI,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wBACtB,SAAS,CAAC,CAAC,IAAI,GAAG,CAAC;qBACtB;iBACJ;gBACD,IAAI,IAAI,CAAC,OAAO,EAChB;oBACI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAExD,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EACjC;wBACI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;wBACtB,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;qBACtB;yBACI,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,EAC5B;wBACI,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;wBACtB,SAAS,CAAC,CAAC,IAAI,GAAG,CAAC;qBACtB;iBACJ;gBAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC/C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACjD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAEjD,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B,CAAC;;;;YAKF,sBAAiB,GAAG,CAAC,QAAqB;gBAEtC,IAAI,QAAQ,EACZ;oBACI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;iBAC1C;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;gBAErD,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB;oBACI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBACtB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBAC/C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBAEjDU,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;iBACrD;aACJ,CAAC;;;;;YAMQ,yBAAoB,GAAG,CAAC,KAAa;gBAE3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBAEjB,IAAI,IAAI,CAAC,OAAO,EAChB;oBACI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBACpC;gBACD,IAAI,IAAI,CAAC,OAAO,EAChB;oBACI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;iBACpC;gBAED,IAAI,IAAI,CAAC,IAAI,EACb;oBACIA,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;oBACrD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;iBAC1B;gBAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B,CAAC;;;;;;YAOQ,oBAAe,GAAG,CAAC,SAAiB,EAAE,KAAa;gBAEzD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrC,MAAM,EACF,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,GACf,GAAG,IAAI,CAAC;gBACT,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;gBAErD,IAAI,GAAG,CAAC;gBAER,IAAI,SAAS,KAAK,GAAG,EACrB;oBACI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;iBAC9D;qBAED;oBACI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;iBAC5D;gBAED,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAClE;oBACI,cAAc,CAAC,SAAS,CAAC,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;oBACvD,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CACpC,cAAc,CAAC,SAAS,CAAC,EACzB,CAAC,EACD,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;oBAEvD,IAAI,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,EACjC;wBACI,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;qBACjC;yBACI,IAAI,cAAc,CAAC,SAAS,CAAC,GAAG,GAAG,EACxC;wBACI,cAAc,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;qBACnC;iBACJ;gBAED,IAAI,CAAC,IAAI,CAAC,SAAS;uBACZ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;wBAC1C,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;2BACzB,SAAS,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,EAClC;oBACI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;oBAE5D,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CACpC,cAAc,CAAC,SAAS,CAAC,EACzB,MAAM,EACN,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC;oBACzC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;iBACrB;qBACI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EACtE;oBACI,IAAI,IAAI,CAAC,SAAS,EAClB;wBACI,cAAc,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;wBACrF,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;qBACzC;oBACD,IAAI,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,EACjC;wBACI,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;wBAC9B,cAAc,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;qBACtG;yBACI,IAAI,cAAc,CAAC,SAAS,CAAC,GAAG,GAAG,EACxC;wBACI,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;wBAC9B,cAAc,CAAC,SAAS,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBACtH;yBAED;wBACI,cAAc,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;qBACzD;oBAED,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;iBACrB;gBAED,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;aACzE,CAAC;YAteE,IAAI,CAAC,IAAI,GAAG,IAAIV,aAAa,EAAE,CAAC;YAChC,IAAI,CAAC,cAAc,GAAG,IAAI,gBAAgB,EAAE,CAAC;YAC7C,IAAI,CAAC,WAAW,GAAG,IAAIG,cAAc,EAAE,CAAC;YACxC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACpC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAEvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;YACvE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;YACvE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,SAAS,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;YACxF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;YACvG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;YAExC,IAAI,CAAC,cAAc,GAAG,IAAIP,UAAU,EAAE,CAAC;;;;;;YAOvC,IAAI,CAAC,cAAc,GAAG,IAAIA,UAAU,EAAE,CAAC;;;;;;YAOvC,IAAI,CAAC,cAAc,GAAG,IAAIA,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,YAAY,GAAG,IAAIA,UAAU,EAAE,CAAC;YAErC,IAAI,CAAC,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;YAEnC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YAErB,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EACtC;gBACI,MAAM,mBAAmB,GAAc,IAAI,SAAS,CAAC;oBACjD,WAAW,EAAE,SAAS,CAAC,UAAU;oBACjC,kBAAkB,EAAE,IAAI;oBACxB,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,CAAC;iBACd,CAAC;qBACG,gBAAgB,CACb,IAAI,mBAAmB,CAAC;oBACpB,KAAK,EAAE,aAAa,CAAC,WAAW;oBAChC,MAAM,EAAE,aAAa,CAAC,YAAY;oBAClC,MAAM,EAAE,mBAAmB,CAAC,aAAa;oBACzC,eAAe,EAAEM,aAAK,CAAC,MAAM;oBAC7B,aAAa,EAAEA,aAAK,CAAC,MAAM;iBAC9B,CAAC,CACL;qBACA,aAAa,CAAC,IAAI,CAAC;qBACnB,kBAAkB,CAAC,GAAG,CAAc,CAAC;gBAE1C,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;aAC7C;YACD,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EACtC;gBACI,MAAM,iBAAiB,GAAc,IAAI,SAAS,CAAC;oBAC/C,WAAW,EAAE,SAAS,CAAC,QAAQ;oBAC/B,kBAAkB,EAAE,IAAI;oBACxB,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,CAAC;iBACd,CAAC;qBACG,gBAAgB,CACb,IAAI,mBAAmB,CAAC;oBACpB,KAAK,EAAE,aAAa,CAAC,YAAY;oBACjC,MAAM,EAAE,aAAa,CAAC,WAAW;oBACjC,MAAM,EAAE,mBAAmB,CAAC,YAAY;oBACxC,eAAe,EAAEA,aAAK,CAAC,KAAK;oBAC5B,aAAa,EAAEA,aAAK,CAAC,MAAM;iBAC9B,CAAC,CACL;qBACA,aAAa,CAAC,IAAI,CAAC;qBACnB,kBAAkB,CAAC,GAAG,CAAc,CAAC;gBAE1C,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;aAC3C;YAED,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;SACxB;;;;;;QAOD,MAAM;YAEF,KAAK,CAAC,MAAM,EAAE,CAAC;YAEf,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,EACpE;gBACI,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;gBAE3B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAEjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACrB;oBACI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;iBACnE;qBAED;oBACI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;iBACvF;gBAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAEpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;aACjC;SACJ;;;;;;;;QASD,YAAY,CAAC,SAAoB;YAE7B,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEhC,OAAO,IAAI,CAAC;SACf;;;;;QAMD,QAAQ,CAAC,GAAG,WAAqB;YAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAC3C;gBACI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;aAChD;YAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAE1B,OAAO,IAAI,CAAC;SACf;;;;QAKD,gBAAgB;YAEZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EACtD;gBACI,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAErC,IAAI,SAAS,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU,EAC/C;oBACI,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;oBAEvC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;iBACvB;qBACI,IAAI,SAAS,CAAC,WAAW,KAAK,MAAM,CAAC,QAAQ,EAClD;oBACI,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;oBAEvC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;iBACvB;aACJ;SACJ;QAED,cAAc,CAAC,KAAe;;YAG1B,IAAI,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,EACxD;gBACI,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAEpE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC/E,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC;gBAC7E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;aACxC;YAED,OAAO,IAAI,CAAC,WAAW,CAAC;SAC3B;;;;QAKD,UAAU;YAEN,KAAK,CAAC,UAAU,EAAE,CAAC;YAEnB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAChC;gBACI,IAAI,CAAC,aAAa,EAAE,CAAC;aACxB;SACJ;QAEO,aAAa;YAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;YACrD,MAAM,YAAY,GAAG,IAAIN,UAAU,EAAE,CAAC;YACtC,MAAM,EACF,cAAc,EACd,cAAc,GACjB,GAAG,IAAI,CAAC;;YAGT,IAAI,IAAI,CAAC,aAAa,EACtB;gBACI,MAAM,IAAI,GAAgB,IAAI,CAAC,WAAW,CAAC,GAAkB,CAAC;gBAE9D,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBAEjB,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB;wBACI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBAC1C,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;wBAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;wBACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;wBAEzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;qBAC/B;iBACJ,CAAC;gBAEF,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,MAAM;oBAExB,IAAI,IAAI,CAAC,OAAO,EAChB;wBACI,cAAc,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;qBAChD;oBACD,IAAI,IAAI,CAAC,OAAO,EAChB;wBACI,cAAc,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;qBAChD;oBAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;iBAC5B,CAAC;;gBAGF,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;oBAEf,IAAI,IAAI,CAAC,SAAS,EAClB;wBACI,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;wBACvB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;qBAC7B;iBACJ,CAAC;aACL;;YAGD,MAAM,WAAW,GAAG,IAAIA,UAAU,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAE7C,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,KAAiB;gBAExC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBAChD,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;aACvC,CAAC;YAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;;;;;;QAOD,kBAAkB,CAAC,SAAoB;YAEnC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC;YAErD,IAAI,SAAS,KAAK,GAAG,EACrB;gBACI,OAAO,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;aACpD;iBACI,IAAI,SAAS,KAAK,GAAG,EAC1B;gBACI,OAAO,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;aACtD;YAED,OAAO,CAAC,CAAC;SACZ;KA+MJ;;IC/jBD;;;;;;;;;;AAUA,UAAa,YAAa,SAAQ,gBAAgB;QAS9C,YAAY,IAAI,EAAE,SAAS,EAAE,SAAS;YAElC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEZ,IAAI,CAAC,IAAI,GAAG,OAAO,IAAI,KAAK,WAAW,GAAG,IAAI,GAAG,KAAK,CAAC;YACvD,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACnB;QAED,QAAQ,CAAC,QAAa,EAAE,OAAQ,EAAE,QAAS;YAEvC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEzB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACvC;gBACI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC7B;YAED,IAAI,OAAO,OAAO,KAAK,UAAU,EACjC;gBACI,QAAQ,CAAC,cAAc,GAAG,OAAO,CAAC;aACrC;YAED,IAAI,OAAO,QAAQ,KAAK,UAAU,EAClC;gBACI,QAAQ,CAAC,oBAAoB,GAAG,QAAQ,CAAC;aAC5C;YAED,IAAI,CAAC,QAAQ,CAAC,YAAY,EAC1B;gBACI,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;aACzC;YAED,IAAI,CAAC,IAAI,EAAE,CAAC;SACf;QAED,WAAW,CAAC,QAAQ;YAEhB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EACxB;gBACI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EACzC;oBACI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;iBAClC;aACJ;iBAED;gBACI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAE3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAChB;oBACI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBAC/B;gBAED,IAAI,CAAC,IAAI,EAAE,CAAC;aACf;SACJ;QAED,IAAI,CAAC,OAAO,GAAG,KAAK;YAEhB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEhC,IAAI,OAAO,EACX;gBACI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAEb,OAAO;aACV;YAED,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SAC9D;QAED,KAAK;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,IAAI,GAAG,GAAG,IAAI,CAAC;YAEf,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAE1B,IAAI,GAAG,GAAG,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;sBAC3D,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAElE,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC,oBAAoB,EACjE;oBACI,GAAG,GAAG,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,oBAAoB,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;0BACnE,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,oBAAoB,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBACjF;gBACD,IAAI,GAAG,KAAK,CAAC,EACb;oBACI,GAAG,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC;0BACnC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;iBAClD;gBAED,OAAO,GAAG,CAAC;aACd,CAAC,CAAC;YAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAC1C;gBACI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAE3B,GAAG,GAAG,CAAC,GAAG,CAAC;gBAEX,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EACtB;oBACI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;iBAC7F;qBAED;oBACI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;iBACd;gBACD,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;gBACjB,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,UAAU,EACvC;oBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;iBAAE;aAC1B;;YAGD,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EACtB;gBACI,UAAU,CAAC;oBAEP,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;iBACpC,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;aAC7B;SACJ;KACJ;;ICrJD;;;;;;;;;;;AAWA,UAAa,WAAY,SAAQ,MAAM;QAkCnC,YAAY,OAAqB,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,IAAI;YAEhF,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAErC,IAAI,CAAC,EAAE,GAAG,WAAW,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,EAAE,GAAG,OAAO,aAAa,KAAK,WAAW,GAAG,aAAa,GAAG,IAAI,CAAC;YACtE,IAAI,CAAC,EAAE,GAAG,OAAO,eAAe,KAAK,WAAW,GAAG,eAAe,GAAG,IAAI,CAAC;YAC1E,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;YAC7B,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAEjB,IAAI,IAAI,CAAC,EAAE,EACX;gBACI,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC;aAC3C;YACD,IAAI,IAAI,CAAC,EAAE,EACX;gBACI,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,GAAG,CAAC,CAAC;aAC5C;;;;;;YAOD,IAAI,CAAC,MAAM,GAAG;gBAEV,IAAI,CAAC,IAAI,CAAC,WAAW;oBAAE,OAAO;gBAC9B,IAAI,EAAE,IAAI,EAAE,EACZ;oBACI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;oBACxC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;oBACtD,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;iBAC7D;qBACI,IAAI,EAAE,EACX;oBACI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;oBACxB,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;oBACjD,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;iBACnC;qBAED;oBACI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC7C,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;iBACrC;gBAED,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EACtB;oBACI,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBACpB,IAAI,EAAE,IAAI,EAAE;wBAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBACpE,IAAI,EAAE;wBAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBACtC,IAAI,EAAE;wBAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;iBACzC;gBAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAC3B;oBACI,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC9B,IAAI,EAAE,IAAI,EAAE;wBAAE,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC7F,IAAI,EAAE;wBAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;oBACrD,IAAI,EAAE;wBAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;iBACxD;aACJ,CAAC;SACL;QAED,UAAU;YAEN,KAAK,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;;YAGvB,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EACtB;gBACI,IAAI,CAAC,GAAG,GAAG,IAAIO,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAChD,IAAI,CAAC,GAAG,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC/D,IAAI,CAAC,GAAG,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAChE,IAAI,CAAC,GAAG,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC/E,IAAI,CAAC,EAAE,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClE,IAAI,CAAC,EAAE,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClF,IAAI,CAAC,EAAE,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gBACnE,IAAI,CAAC,EAAE,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gBAClF,IAAI,CAAC,EAAE,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;aACzF;iBACI,IAAI,IAAI,CAAC,EAAE,EAChB;gBACI,IAAI,CAAC,EAAE,GAAG,IAAIA,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC1D,IAAI,CAAC,EAAE,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBACpE,IAAI,CAAC,EAAE,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;aAC3E;iBAED;gBACI,IAAI,CAAC,EAAE,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACpD,IAAI,CAAC,EAAE,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACpE,IAAI,CAAC,EAAE,GAAG,IAAIA,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;aAC3E;;YAID,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;;YAGvC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI;kBACb,IAAIQ,iBAAiB,CAAC,IAAIJ,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;kBAC9C,IAAID,WAAW,CAAC,IAAIC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAE7C,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EACtB;gBACI,IAAI,CAAC,GAAG,GAAG,IAAID,WAAW,CAAC,IAAIC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1D,IAAI,CAAC,GAAG,GAAG,IAAID,WAAW,CAAC,IAAIC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1D,IAAI,CAAC,GAAG,GAAG,IAAID,WAAW,CAAC,IAAIC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1D,IAAI,CAAC,GAAG,GAAG,IAAID,WAAW,CAAC,IAAIC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1D,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aACjD;YACD,IAAI,EAAE,EACN;gBACI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI;sBACb,IAAII,iBAAiB,CAAC,IAAIJ,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;sBAC9C,IAAID,WAAW,CAAC,IAAIC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC/C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI;sBACb,IAAII,iBAAiB,CAAC,IAAIJ,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;sBAC9C,IAAID,WAAW,CAAC,IAAIC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAE/C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aAChD;YACD,IAAI,IAAI,CAAC,EAAE,EACX;gBACI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI;sBACb,IAAII,iBAAiB,CAAC,IAAIJ,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;sBAC9C,IAAID,WAAW,CAAC,IAAIC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC/C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI;sBACb,IAAII,iBAAiB,CAAC,IAAIJ,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;sBAC9C,IAAID,WAAW,CAAC,IAAIC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC/C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aAChD;;YAGD,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EACtB;gBACI,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;aACxB;YAED,IAAI,IAAI,CAAC,EAAE,EACX;gBACI,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;aAClD;YACD,IAAI,IAAI,CAAC,EAAE,EACX;gBACI,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC;aACpD;SACJ;QAED,MAAM;;SAGL;KACJ;;UCzNqB,UAAc,SAAQV,UAAU,CAAC,YAAY;QAI/D,YAAY,KAAY;YAEpB,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACtB;KAKJ;IAED;;;;;;;IAQA;;;;;;;IAQA;;;;;;OAMG;;ICxBH;;;;;;;;AAQA,UAAa,uBAAwB,SAAQ,UAAoB;QAI7D,YAAY,KAAY;YAEpB,KAAK,CAAC,KAAK,CAAC,CAAC;YACb,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;SACrD;;;;;;QAOD,EAAE,CAAC,MAAgB,EAAE,UAAuB;YAExC,IAAI,CAAC,UAAU,EACf;gBACI,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;aACzD;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAE7E,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;SAClC;;;;QAKD,GAAG,CAAC,MAAgB;YAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEvC,IAAI,CAAC,GAAG,CAAC,EACT;gBACI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC7B;YAED,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;SAC5B;;;;;;QAOD,WAAW,CAAC,MAAgB;YAExB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAEtD,IAAI,CAAC,KAAK,EACV;gBACI,OAAO;aACV;YAED,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC7C;gBACI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EACxB;oBACI,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;iBAC7B;aACJ;YAED,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;SAC3B;;;;;QAMD,WAAW,CAAC,KAAiB;;YAEzB,aAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,0CAAE,QAAQ,CAAC;SAChD;;;;;;;QAQS,SAAS,CAAC,EAAc;YAE9B,MAAM,MAAM,GAAY;gBACpB,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,IAAI;aACjB,CAAC;YAEF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAEjC,OAAO,MAAM,CAAC;SACjB;KACJ;;ICpHD;;;;;;;;IASA;;;;;AAKA,UAAa,eAAgB,SAAQ,UAAsB;QAWvD,YAAY,KAAY;YAEpB,KAAK,CAAC,KAAK,CAAC,CAAC;;;;;;YAOb,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;;;;;YAMnD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;;;;;YAMnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;;;;;YAMvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACvB;;;;;;;;;QAUD,EAAE,CAAC,MAAkB,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS;YAErD,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE3C,IAAI,CAAC,OAAO,EACZ;gBACI,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;aACzC;YAED,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;;YAGlC,IAAI,CAAC,KAAK,CAAC,CAAC,EACZ;gBACI,MAAM,CAAC,QAAQ,GAAG,QAAQ,KAAK,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;gBACzD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAE3B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;aACnD;SACJ;;;;;QAMD,GAAG,CAAC,MAAkB;YAElB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEpD,IAAI,CAAC,OAAO,EACZ;gBACI,OAAO;aACV;YAED,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAElC,IAAI,CAAC,KAAK,CAAC,CAAC,EACZ;;gBAEI,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACxB;SACJ;;;;;;QAOD,WAAW,CAAC,MAAkB;YAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;YAElC,IAAI,QAAQ,EACZ;gBACI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;aAC/B;YAED,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;YAE1B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;SAC/C;;;;;QAMD,UAAU;YAEN,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAElD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;;;;;;QAOD,KAAK,CAAC,IAAgB;YAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;YAElC,IAAI,QAAQ,EACZ;gBACI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;aAC/B;YAED,IAAI,CAAC,KAAK,EAAE,CAAC;YAEb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SAC7C;;;;QAKD,IAAI;YAEA,IAAI,IAAI,CAAC,WAAW,EACpB;gBACI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBAExB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBAElD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aAC3B;SACJ;;;;QAKD,KAAK;YAED,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;YAExC,IAAI,WAAW,EACf;gBACI,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAErD,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAE1C,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EACxB;oBACI,CAAC,GAAG,CAAC,CAAC;iBACT;gBAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B;SACJ;;;;;;QAOD,SAAS;YAEL,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB;gBACI,OAAO;aACV;YAED,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YAExC,IAAI,WAAW,EACf;gBACI,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAErD,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAE1C,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EACxB;oBACI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;iBAC3B;gBAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B;SACJ;;;;;;QAOD,MAAM;YAEF,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YAExC,IAAI,WAAW,EACf;gBACI,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACrD,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAE1C,IAAI,CAAC,GAAG,CAAC;oBAAE,CAAC,GAAG,CAAC,CAAC;gBAEjB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B;SACJ;KAsBJ;;IC7QD;;;;;;;;;;;AAWA,UAAa,KAAM,SAAQC,cAAc;;;;;QAoBrC,YAAY,KAAa,EAAE,MAAc;YAErC,KAAK,EAAE,CAAC;YAER,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YAEnB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,IAAIK,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAE3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;YACpE,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;SACrD;QAEM,gBAAgB;YAEnB,IAAI,IAAI,CAAC,UAAU,EACnB;gBACI,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACnC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;aACxC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1D;gBACI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBACtC,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,CAAsB,CAAC;gBAElF,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,SAAS;sBACvDR,mBAAW,CAAC,OAAO;sBACnBA,mBAAW,CAAC,OAAO,CAAC;gBAC1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,SAAS;sBACzDA,mBAAW,CAAC,OAAO;sBACnBA,mBAAW,CAAC,OAAO,CAAC;gBAC1B,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACpF,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAEzF,MAAM,CAAC,OAAO,CACV,gBAAgB,KAAKA,mBAAW,CAAC,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,EACjE,iBAAiB,KAAKA,mBAAW,CAAC,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,EACpE,gBAAgB,EAChB,iBAAiB,CAAC,CAAC;gBAEvB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAE5B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EACnB;oBACI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;iBACnB;gBACD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EACnB;oBACI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;iBACpB;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,iBAAiB,CAAC,cAAc,CAAC;gBAC/D,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBAEtD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EACd,CAAC,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAC7B,CAAC,GAAG,MAAM,CAAC,iBAAiB,EAAE,EAC9B,IAAI,CAAC,CAAC;aACb;SACJ;QAED,aAAa;YAET,OAAO,IAAI,CAAC,UAAU,CAAC;SAC1B;QAED,aAAa,CAAC,EAAkB;YAE5B,IAAI,IAAI,CAAC,UAAU,EACnB;gBACI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACtC;YAED,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YAErB,IAAI,EAAE,EACN;gBACI,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAExB,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACnC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;aACxC;SACJ;QAEO,MAAM,CAAC,OAAiB;YAE5B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC9C;gBACI,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAE1B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;gBAEpB,IAAI,CAAC,MAAM,CAAC,WAAW,EACvB;oBACI,MAAM,CAAC,UAAU,EAAE,CAAC;iBACvB;gBAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACnC,MAAM,CAAC,MAAM,EAAE,CAAC;aACnB;YAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;SACjC;QAED,MAAM,CAAC,QAAuB;YAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACjC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SAC1B;QAED,QAAQ,CAAC,QAAgB;YAErB,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;YAExC,IAAI,cAAc,GAAG,CAAC,EACtB;gBACI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EACvC;oBACI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/B;aACJ;iBAED;gBACI,IAAI,QAAQ,CAAC,MAAM,EACnB;oBACI,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;iBACzC;gBAED,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;;aAE3C;YAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;QAED,WAAW,CAAC,QAAgB;YAExB,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;YAExC,IAAI,cAAc,GAAG,CAAC,EACtB;gBACI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EACvC;oBACI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;iBAClC;aACJ;iBAED;gBACI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAEpD,IAAI,KAAK,KAAK,CAAC,CAAC,EAChB;oBACI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC/B,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;iBAC1B;aACJ;YAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;QAED,MAAM,CAAC,KAAc,EAAE,MAAe;YAElC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAErB,IAAI,IAAI,CAAC,OAAO,EAChB;gBACK,IAAI,CAAC,OAA0B,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;gBACrD,IAAI,CAAC,OAA0B,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;aAC3D;YAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;QAED,IAAI,KAAK;YAEL,OAAO,IAAI,CAAC,OAAO,CAAC;SACvB;QACD,IAAI,KAAK,CAAC,GAAW;YAEjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EACf;gBACI,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;gBACnB,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;SACJ;QAED,IAAI,MAAM;YAEN,OAAO,IAAI,CAAC,QAAQ,CAAC;SACxB;QACD,IAAI,MAAM,CAAC,GAAW;YAElB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EACf;gBACI,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACpB,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;SACJ;;;;;;QAOD,IAAI,uBAAuB;YAEvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;SACjC;;;;;;;QAQD,IAAI,eAAe;YAEf,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;;IAED;;;;;;IAMO,gCAA0B,GAAmC,uBAAuB,CAAC;IAE5F;;;;;;IAMO,sBAAgB,GAA2B,eAAe,CAAC;;IC9QtE;;;AAGA,UAAa,KAAM,SAAQE,UAAU,CAAC,YAAY;QAU9C,YAAY,OAAkB,EAAE;YAE5B,KAAK,EAAE,CAAC;YAmGJ,wBAAmB,GAAG,CAAC,YAAoB,EAAE,KAAU,EAAE,KAAY;gBAEzE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;gBACjC,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAE9C,IAAI,UAAU,KAAK,CAAC,CAAC,EACrB;oBACI,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;iBAC/E;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;gBAElD,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC3D;oBACI,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;oBAElC,IAAI,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,EACzC;wBACI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;qBAC3E;iBACJ;gBAED,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAC3B;oBACI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;iBAC7D;gBAED,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EACjD;oBACI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;iBACjF;aACJ,CAAC;YAhIE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YAEjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAElB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;SAC9B;;;;QAKD,WAAW,CAAC,IAAY;YAEpB,IAAI,IAAI,CAAC,aAAa,EACtB;gBACI,IAAI,CAAC,OAAO,EAAE,CAAC;aAClB;YAED,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SAClC;;;;;;QAOD,aAAa,CAAC,GAAG,KAAe;YAE5B,IAAI,IAAI,CAAC,aAAa,EACtB;gBACI,IAAI,CAAC,OAAO,EAAE,CAAC;aAClB;YAED,MAAM,MAAM,GAAG,EAAG,CAAC;YAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC5C;gBACI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAClD;YAED,OAAO,MAAM,CAAC;SACjB;;;;;QAMD,WAAW,CAAC,IAAY,EAAE,KAAU;;YAGhC,IAAI,IAAI,CAAC,aAAa,EACtB;gBACI,IAAI,CAAC,OAAO,EAAE,CAAC;aAClB;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAE5C,EAAE,IAAI,CAAC,OAAO,CAAC;SAClB;;;;;;;QAQD,MAAM,CAAC,KAAY;YAEf,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAE1B,EAAE,IAAI,CAAC,OAAO,CAAC;;YAGf,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;SACrD;;;;QAKO,OAAO;YAEX,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;YAEjC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAClD;gBACI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;aACjE;YAED,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;SAC9B;;;;;;;;;QA2CD,OAAO,MAAM,CAAC,IAAe;YAEzB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;SAC1B;KACJ;;UC/KY,UAAU;QAInB,OAAO,MAAM,CAAC,SAAsC;YAEhD,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;YAE/B,KAAK,MAAM,GAAG,IAAI,SAAS,EAC3B;gBACI,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;aAC7C;YAED,OAAO,KAAK,CAAC;SAChB;KACJ;;ICeD;IACA,IAAI,YAAiB,CAAC;IAEtB,SAAS,gBAAgB;;QAGrB,IAAI,OAAO,YAAY,KAAK,WAAW,EACvC;YACI,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC/C,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1C,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YAClD,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,gEAAgE,CAAC,CAAC;YACrG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;SAC3C;IACL,CAAC;IAED;;;;;;;AAOA,UAAa,SAAU,SAAQ,eAAe;;;;;;;;;;;;;;;;;;;;;;QA4E1C,YAAY,OAA0B;YAElC,KAAK,CAAC,OAAO,CAAC,CAAC;YAiwBZ,UAAK,GAAG;gBAEX,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB;oBACI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAEd,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC;oBACzD,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC;oBACzD,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC;oBAC9C,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;oBAE7C,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,wBAAwB,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBACpG,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC;oBACxB,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,gEAAgE,CAAC,CAAC;oBAErG,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,KAAK,CAAC;oBAE1C,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;oBACnD,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACjD,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAChD,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAChD,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC9C,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC5C,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAEhD,YAAY,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBACnE,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBACrE,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBACjE,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBACjE,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAC/D,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC7D,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErE,UAAU,CAAC;wBAEP,YAAY,CAAC,KAAK,EAAE,CAAC;wBAErB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EACrE;4BACI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;yBACzC;qBACJ,EAAE,CAAC,CAAC,CAAC;iBACT;aACJ,CAAC;YAEK,SAAI,GAAG;gBAEV,IAAI,IAAI,CAAC,UAAU,EACnB;oBACI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACb,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;oBAEvB,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjB,IAAI,CAAC,cAAc,EAAE,CAAC;oBAEtB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EACzB;wBACI,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,IAAI,CAAC;qBAC5C;oBAED,YAAY,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAC/D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBACjE,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBAC7D,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBAC7D,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAC3D,QAAQ,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBACzD,YAAY,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBACjE,YAAY,CAAC,IAAI,EAAE,CAAC;oBAEpB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;iBACvB;gBAED,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB;oBACI,IAAI,CAAC,mBAAmB,EAAE,CAAC;iBAC9B;aACJ,CAAC;YAEF,kBAAa,GAAG,CAAC,KAAa;gBAE1B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBAExE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAClC;oBACI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC5D,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAEtB,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAClB;wBACI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACnB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBACtB;yBAED;wBACI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC5D,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAClB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;wBACrD,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;qBAC1G;iBACJ;qBAED;oBACI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;oBACjB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;iBAC5D;gBAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,CAAC,SAAS,EAAE,CAAC;aACpB,CAAC;YAEF,WAAM,GAAG;gBAEL,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aAC9C,CAAC;YAEF,eAAU,GAAG,CAAC,SAAiB;gBAE3B,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBACnC,IAAI,QAAQ,GAAG,CAAC,CAAC;gBAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAC1C;oBACI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,EACzC;wBACI,SAAS;qBACZ;oBAED,IAAI,CAAC,GAAG,UAAU,EAClB;wBACI,UAAU,GAAG,CAAC,CAAC;qBAClB;oBACD,IAAI,CAAC,GAAG,QAAQ,EAChB;wBACI,QAAQ,GAAG,CAAC,CAAC;qBAChB;iBACJ;gBAED,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;aAC1C,CAAC;YAEF,gBAAW,GAAG,CAAC,UAAkB,EAAE,QAAgB;gBAE/C,IAAI,UAAU,GAAG,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,EACpC;oBACI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACpE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAE5E,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc,IAAI,GAAG,KAAK,IAAI,CAAC,YAAY,EAC9D;wBACI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;wBACzB,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;wBAC9B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;wBAC5B,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;wBAExB,IAAI,CAAC,SAAS,EAAE,CAAC;wBACjB,IAAI,CAAC,uBAAuB,EAAE,CAAC;wBAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;qBAChC;oBAED,IAAI,CAAC,KAAK,EAAE,CAAC;iBAChB;qBAED;oBACI,IAAI,CAAC,cAAc,EAAE,CAAC;iBACzB;aACJ,CAAC;YAEF,mBAAc,GAAG;gBAEb,IAAI,IAAI,CAAC,YAAY,EACrB;;oBAEI,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1B,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;oBAC/B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;oBACzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,qBAAqB,EAAE,CAAC;iBAChC;aACJ,CAAC;YAEF,4BAAuB,GAAG;gBAEtB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAE3C,IAAI,EAAE,KAAK,SAAS,EACpB;oBACI,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;oBACd,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;oBACd,IAAI,CAAC,GAAG,CAAC,CAAC;oBACV,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;oBAC1B,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC;oBAEtB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;oBACvB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,EAC7D;wBACI,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAExB,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE,EACrB;4BACI,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;4BACrC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;4BACT,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;4BACT,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;4BACjB,CAAC,GAAG,CAAC,CAAC;yBACT;wBAED,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;qBAChB;oBAED,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACrC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;iBACrD;aACJ,CAAC;YAEF,sBAAiB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;gBAE3D,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC1E,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;aAC5B,CAAC;YAh+BE,gBAAgB,EAAE,CAAC;YAEnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YAEvB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAEpD,IAAI,IAAI,CAAC,SAAS,EAClB;gBACI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aACtD;YAED,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;YAC7E,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;YAClF,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,SAAS,CAAC;YACxD,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,IAAI,SAAS,CAAC;YAC5E,IAAI,CAAC,QAAQ,GAAG,IAAIO,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC;YAExE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;;;;YAMxB,IAAI,CAAC,SAAS,GAAG,IAAIJ,aAAa,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;;YAG7B,IAAI,CAAC,KAAK,GAAG,IAAIA,aAAa,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,SAAS,CAChB,OAAO,CAAC,UAAU,IAAI,CAAC,EACvB,QAAO,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAC/E,CAAC,CACJ,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;YAGtC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;YAC9F,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS,GAAG,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;YACjG,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,SAAS,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;YACpG,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,KAAK,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;;YAG3F,IAAI,CAAC,aAAa,GAAG,IAAI,YAAY,CAAC;gBAClC,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS;gBACxB,OAAO,EAAE,IAAI,CAAC,SAAS;gBACvB,aAAa,EAAE,IAAI,CAAC,SAAS;gBAC7B,UAAU,EAAE,CAAC;gBACb,QAAQ,EAAE,GAAG;gBACb,SAAS,EAAE,EAAE;gBACb,SAAS,EAAE,EAAE;aAChB,CAAC,CAAC,UAAU,CACT,WAAW,IAAI,CAAC,EAChB,UAAU,IAAI,CAAC,EACf,YAAY,IAAI,CAAC,EACjB,aAAa,IAAI,CAAC,CACrB,CAAC,gBAAgB,CACd,IAAI,aAAa,CACb,aAAa,CAAC,WAAW,EACzB,aAAa,CAAC,WAAW,CAC5B,CACY,CAAC;YAElB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAElC,IAAI,IAAI,CAAC,SAAS,EAClB;gBACI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACtC,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,GAAG,CAAC;gBAC1C,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC;gBACrC,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;gBAC5B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;aAC1B;;YAGD,IAAI,CAAC,EAAE,GAAG,IAAIJ,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,GAAG,IAAIA,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,EAAE,GAAG,IAAIA,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC,EAAE,GAAG,IAAIA,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YAEjB,IAAI,CAAC,SAAS,EAAE,CAAC;SACpB;QAED,SAAS;YAEL,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;YAEpC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,SAAS;gBAEzB,IAAI,SAAS,EACb;oBACI,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;oBAEjD,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;oBAC3B,IAAI,aAAa,GAAG,GAAG,EACvB;wBACI,IAAI,CAAC,EAAE,EAAE,CAAC;wBACV,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EACf;4BACI,IAAI,CAAC,MAAM,EAAE,CAAC;yBACjB;6BAED;4BACI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;4BAC/D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;4BACvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BAE9B,IAAI,CAAC,EACL;gCACI,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,EACrB;oCACI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;iCAChC;qCAED;oCACI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;iCACtC;6BACJ;yBACJ;qBACJ;yBAED;wBACI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;wBACZ,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAChC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;wBAE/D,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EACrB;4BACI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;4BACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;yBACxD;qBACJ;iBACJ;gBACD,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;aACzC,CAAC;YAEF,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,MAAkB;gBAErC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAC1C;oBACI,OAAO;iBACV;gBAED,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC/D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAExC,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,EACrB;oBACI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACrF,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;iBACxD;qBACI,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,EAC1B;oBACI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC5D,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;iBAC/B;qBACI,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAC9B;oBACI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;iBACxD;qBAED;oBACI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;oBACnC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;iBAC/B;gBAED,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;gBAEhC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAClC,CAAC;SACL;QAED,IAAc,cAAc;YAExB,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,cAAc,CAAC;SAC3D;QAED,MAAM;YAEF,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,EAClC;gBACI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;gBAE9B,IAAI,IAAI,CAAC,SAAS,EAClB;oBACI,IAAI,CAAC,UAAU,EAAE,CAAC;oBAElB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EACtB;wBACI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;qBACzC;oBACD,IAAI,IAAI,CAAC,YAAY,EACrB;wBACI,IAAI,CAAC,uBAAuB,EAAE,CAAC;qBAClC;iBACJ;aACJ;;YAGD,IAAI,IAAI,CAAC,UAAU,EACnB;gBACI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;aAC3B;SACJ;QAED,UAAU;YAEN,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YAEtB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;YAClD,IAAI,CAAC,GAAG,CAAC,CAAC;;YAGV,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,EAC9B;gBACI,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAChD;oBACI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC3B;gBAED,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;aACzD;;YAGD,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,GAAG,KAAK,CAAC;YAEjB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC;gBACI,IAAI,UAAU,IAAI,OAAO,EACzB;oBACI,aAAa,GAAG,CAAC,CAAC;oBAClB,SAAS,EAAE,CAAC;iBACf;gBAED,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAEvB,UAAU,GAAG,CAAC,KAAK,GAAG,CAAC;gBACvB,OAAO,GAAG,CAAC,KAAK,IAAI,CAAC;gBAErB,IAAI,OAAO,EACX;oBACI,CAAC,GAAG,EAAE,CAAC;iBACV;gBAED,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAE7B,IAAI,CAAC,QAAQ,EACb;oBACI,QAAQ,GAAG,IAAIQ,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAChD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC7B;qBAED;oBACI,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;iBACrB;gBAED,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;gBACxB,IAAI,GAAG,KAAK,CAAC;gBAEb,IAAI,OAAO,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,EAC3G;oBACI,SAAS,EAAE,CAAC;oBACZ,CAAC,GAAG,CAAC,CAAC;oBACN,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;oBAErB,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EACpC;wBACI,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC;wBACtB,aAAa,GAAG,CAAC,CAAC,CAAC;wBACnB,IAAI,GAAG,IAAI,CAAC;wBACZ,SAAS;qBACZ;iBACJ;gBAED,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC/B,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;gBACf,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;gBACf,QAAQ,CAAC,SAAS,GAAG,UAAU,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;gBAC5D,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC;gBAEpB,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EACzB;oBACI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;iBACzB;gBACD,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EACzB;oBACI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;iBACzB;aACJ;YAED,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;;YAG9B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YAGzC,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,EACrC;gBACI,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC1C,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,IAAI,CAAC;aAC5C;YAED,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;SAC/B;QAED,kBAAkB,CAAC,KAAiB,EAAE,KAAc;YAEhD,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;YACtB,IAAI,KAAK,GAAG,KAAK,CAAC;YAElB,IAAI,gBAAgB,GAAG,CAAC,CAAC;YAEzB,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EACzB;gBACI,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CACnC,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aAC/C;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAC1C;gBACI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAE3B,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,EACvC;oBACI,SAAS;iBACZ;gBAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEhE,IAAI,KAAK,GAAG,YAAY,EACxB;oBACI,YAAY,GAAG,KAAK,CAAC;oBACrB,YAAY,GAAG,CAAC,CAAC;oBACjB,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;iBACjD;aACJ;YAED,IAAI,KAAK,EACT;gBACI,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC;gBACvB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;aACpB;iBAED;gBACI,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC;gBACvB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;aACpB;SACJ;QAED,eAAe;YAEX,IAAI,IAAI,CAAC,YAAY,EACrB;gBACI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBAChG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAExC,OAAO,IAAI,CAAC;aACf;YAED,OAAO,KAAK,CAAC;SAChB;QAED,qBAAqB;;YAGjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAC1C;gBACI,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,EACtD;oBACI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;iBACjD;qBAED;oBACI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;iBACzC;aACJ;SACJ;QAED,gBAAgB,CAAC,GAAe;YAE5B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAEnB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,EACnD;gBACI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;aACjC;YAED,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9C;QAED,mBAAmB;YAEf,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9C;QAED,SAAS;YAEL,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACrC;QAED,SAAS;YAEL,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAElC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YAE1B,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;gBAE7B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACrD,EAAE,GAAG,CAAC,CAAC;SACX;QAED,iBAAiB,CAAC,CAAS;YAEvB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAC7C;gBACI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;aAC5B;YAED,IAAI,IAAI,CAAC,YAAY,EACrB;gBACI,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;YAED,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EACzD;gBACI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EACrB;oBACI,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;oBACrB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;iBACzC;qBAED;oBACI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAEjE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC3E,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;iBACxC;aACJ;SACJ;QAEM,SAAS,CAAC,CAAC;YACd,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,EACvD;gBACI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;aACxB;YACD,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,EAC7B;gBACI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACzB;;YAID,IAAI,CAAC,CAAC,gBAAgB,EACtB;gBACI,OAAO;aACV;YAED,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,EAClB;gBACI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC,CAAC,cAAc,EAAE,CAAC;gBAEnB,OAAO;aACV;YAED,IAAI,IAAI,CAAC,QAAQ,EACjB;;gBAGI,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,EAClB;;oBAEI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACd,CAAC,CAAC,cAAc,EAAE,CAAC;oBAEnB,OAAO;iBACV;qBACI,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,EACvB;;oBAEI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,EACjC;wBACI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;qBACrC;oBAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC/C,CAAC,CAAC,cAAc,EAAE,CAAC;oBAEnB,OAAO;iBACV;aACJ;YACD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,EACjB;;gBAEI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAC3B;oBACI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAC3E;wBACI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EACrB;4BACI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;4BAC7D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;yBACzC;6BAED;4BACI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;4BACnG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;yBAC7C;qBACJ;iBACJ;gBAED,CAAC,CAAC,cAAc,EAAE,CAAC;gBAEnB,OAAO;aACV;YAED,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,EAClB;;gBAEI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAC3B;oBACI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EACtB;wBACI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACnG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;qBACzC;iBACJ;gBAED,CAAC,CAAC,cAAc,EAAE,CAAC;gBAEnB,OAAO;aACV;iBACI,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,EACzC;gBACI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;gBAE1B,IAAI,IAAI,CAAC,SAAS,EAClB;oBACI,IAAI,IAAI,CAAC,YAAY,EACrB;wBACI,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;wBAE/D,IAAI,YAAY,EAChB;4BACI,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EACjF;gCACI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;6BACvF;iCAED;gCACI,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gCAE5E,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gCAChD,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;6BAChF;yBACJ;6BAED;4BACI,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;4BAE1E,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;4BAChD,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;yBAC9E;qBACJ;yBAED;wBACI,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;wBACzE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;wBAE3C,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;wBAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;wBAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;qBACnC;iBACJ;qBAED;;;oBAGI,IAAI,IAAI,CAAC,YAAY,EACrB;wBACI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;qBAC9E;yBAED;wBACI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBACvF;iBACJ;gBAED,CAAC,CAAC,cAAc,EAAE,CAAC;gBAEnB,OAAO;aACV;iBACI,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,EAC7D;gBACI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;gBAE3B,IAAI,IAAI,CAAC,SAAS,EAClB;oBACI,IAAI,IAAI,CAAC,YAAY,EACrB;wBACI,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAC5B,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBACnE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;;wBAGxC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EACpC;;4BAEI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;yBACxD;6BAED;4BACI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BACrF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;yBACjF;qBACJ;yBAED;wBACI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;wBAC5B,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;wBACjB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC7B,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAC5B,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBACnE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;wBAExC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;wBACxE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBACvE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;qBACjC;iBACJ;qBACI,IAAI,IAAI,CAAC,YAAY,EAC1B;oBACI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;iBAC/E;qBAED;oBACI,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC7B,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;oBAC5D,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBACf,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;oBACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;iBACxD;gBACD,CAAC,CAAC,cAAc,EAAE,CAAC;gBAEnB,OAAO;aACV;SACJ;;QAEM,UAAU,CAAC,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC/E,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ;gBAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YAEtD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,CAAC,gBAAgB,EACtB;gBAAE,OAAO;aAAE;SACd;;QAEM,SAAS,CAAC,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAErB,IAAI,CAAC,CAAC,gBAAgB,EACtB;gBAAE,OAAO;aAAE;YAEX,IAAI,IAAI,CAAC,YAAY,EACrB;gBACI,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC;gBAE9D,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;aAC/F;YAED,CAAC,CAAC,cAAc,EAAE,CAAC;SACtB;;QAEM,QAAQ,CAAC,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAEpB,IAAI,CAAC,CAAC,gBAAgB,EACtB;gBAAE,OAAO;aAAE;YAEX,IAAI,IAAI,CAAC,YAAY,EACrB;gBACI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;YAED,CAAC,CAAC,cAAc,EAAE,CAAC;SACtB;;QAEM,UAAU,CAAC,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,CAAC,gBAAgB,EACtB;gBAAE,OAAO;aAAE;YAEX,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC;YAE9D,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACtD,CAAC,CAAC,cAAc,EAAE,CAAC;SACtB;;QAEK,UAAU,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;YAE7B,IAAI,CAAC,CAAC,MAAM,EACZ;gBACI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBAC1B,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC;aAC3B;YAED,CAAC,CAAC,cAAc,EAAE,CAAC;SACtB;;QAEM,cAAc,CAAC,CAAC;YACnB,IAAI,CAAC,IAAI,EAAE,CAAC;SACf;;QAoOD,IAAI,UAAU;YAEV,OAAO,IAAI,CAAC,MAAM,CAAC;SACtB;QACD,IAAI,UAAU,CAAC,GAAW;YAEtB,IAAI,IAAI,CAAC,SAAS,EAClB;gBACI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aACtC;YAED,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EACtB;gBACI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACvB;SACJ;QAED,IAAI,KAAK;YAEL,OAAO,IAAI,CAAC,MAAM,CAAC;SACtB;QACD,IAAI,KAAK,CAAC,GAAW;YAEjB,IAAI,IAAI,CAAC,SAAS,EAClB;gBACI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aACtC;YAED,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EACtB;gBACI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC9B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;gBAClB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;SACJ;QAED,IAAI,IAAI;YAEJ,OAAO,IAAI,CAAC,KAAK,CAAC;SACrB;QACD,IAAI,IAAI,CAAC,KAAa;YAElB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACtB;QAED,IAAI,IAAI;YACJ,OAAO,YAAY,CAAA;SACtB;KACJ;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;;IClrCH;;;;;;;;;;AAUA,UAAa,YAAa,SAAQ,MAAM;QAIpC,YAAY,CAAC,EAAE,KAAa,EAAE,MAAc;YAExC,MAAM,MAAM,GAAG,IAAIO,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAExC,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;YAEtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC/C;;;;;;QAOD,MAAM;YAEF,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EACtB;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;aAAE;YAEjC,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAC3B;gBAAE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;aAAE;YAE3C,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;SACrC;QAED,IAAI,YAAY;YAEZ,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;SACnC;QACD,IAAI,cAAc,CAAC,GAAQ;YAEvB,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,CAAC;SAClC;QAED,IAAI,SAAS;YAET,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;SAChC;QACD,IAAI,SAAS,CAAC,GAAW;YAErB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;SAC/B;KACJ;;IC1DD;;;;;;;;AAQA,UAAa,MAAO,SAAQd,UAAU,CAAC,YAAY;QAS/C,YAAY,SAAkB;YAE1B,KAAK,EAAE,CAAC;YAER,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAEd,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAEZ,IAAI,SAAS,EACb;gBACI,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;aACzB;YAED,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;SACxB;QAED,IAAI,QAAQ;YAER,OAAO,IAAI,CAAC,SAAS,CAAC;SACzB;QACD,IAAI,QAAQ,CAAC,GAAY;YAErB,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB;gBACI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACzB;iBAED;gBACI,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;gBAErB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;aACxC;SACJ;;;;;;QAOD,MAAM,CAAC,IAAY;YAEf,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACtD,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAEvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAC5B;gBACI,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aAC/C;SACJ;QAWD,OAAO,EAAE,CAAC,KAAU,EAAE,EAAY,EAAE,OAAY;YAE5C,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;SACxC;QAED,OAAO,IAAI,CAAC,KAAU,EAAE,EAAY,EAAE,OAAY;YAE9C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;SAC1C;QAED,OAAO,cAAc,CAAC,KAAU,EAAE,EAAY;YAE1C,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;SAC3C;KACJ;IAED,MAAM,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/packages/core/lib/puxi-core.js b/packages/core/lib/puxi-core.js index 392851b..0f75527 100644 --- a/packages/core/lib/puxi-core.js +++ b/packages/core/lib/puxi-core.js @@ -1,6 +1,6 @@ /*! * @puxi/core - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * @puxi/core is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license @@ -5902,7 +5902,7 @@ class TextInput extends FocusableWidget { const selectIndex = this.rdd ? _i - 1 : _i; this.selectRange(selectIndex, selectIndex); this.caret._index = selectIndex; - this.caret._forward = !rdd; + this.caret._forward = !this.rdd; } } else { diff --git a/packages/core/lib/puxi-core.js.map b/packages/core/lib/puxi-core.js.map index b2214b8..fb4e5d4 100644 --- a/packages/core/lib/puxi-core.js.map +++ b/packages/core/lib/puxi-core.js.map @@ -1 +1 @@ -{"version":3,"file":"puxi-core.js","sources":["../src/event/DragDropController.js","../src/layout-options/Insets.ts","../src/IMeasurable.ts","../src/event/EventManager.ts","../src/event/ClickManager.ts","../src/event/DragManager.ts","../src/event/EventBroker.ts","../src/event/ScrollManager.ts","../src/Widget.ts","../src/layout-options/Align.ts","../src/layout-options/LayoutOptions.ts","../src/layout-options/AnchorLayoutOptions.ts","../src/layout-options/FastLayoutOptions.ts","../src/layout-options/BorderLayoutOptions.ts","../src/layout-manager/FastLayout.ts","../src/WidgetGroup.ts","../src/InteractiveGroup.ts","../src/FocusableWidget.ts","../src/TextWidget.ts","../src/Button.ts","../src/CheckBox.ts","../src/Ease/EaseBase.js","../src/Ease/ExponentialEase.js","../src/Ease/Ease.js","../src/Helpers.ts","../src/Sprite.ts","../src/layout-manager/AnchorLayout.ts","../src/layout-manager/BorderLayout.ts","../src/layout-manager/LinearLayout.ts","../src/ImageButton.ts","../src/Slider.ts","../src/Tween.ts","../src/ScrollBar.ts","../src/ScrollWidget.ts","../src/SortableList.ts","../src/SliceSprite.ts","../src/ctl/Controller.ts","../src/ctl/CheckBoxGroupController.ts","../src/ctl/FocusController.ts","../src/Stage.ts","../src/Style.ts","../src/StyleSheet.ts","../src/TextInput.ts","../src/TilingSprite.ts","../src/Ticker.ts"],"sourcesContent":["const _items = [];\nconst DragDropController = {\n add(item, event)\n {\n item._dragDropEventId = event.data.identifier;\n if (_items.indexOf(item) === -1)\n {\n _items.push(item);\n\n return true;\n }\n\n return false;\n },\n getItem(object)\n {\n let item = null; let\n index;\n\n for (let i = 0; i < _items.length; i++)\n {\n if (_items[i] === object)\n {\n item = _items[i];\n index = i;\n break;\n }\n }\n\n if (item !== null)\n {\n _items.splice(index, 1);\n\n return item;\n }\n\n return false;\n },\n getEventItem(event, group)\n {\n let item = null; let index; const\n id = event.data.identifier;\n\n for (let i = 0; i < _items.length; i++)\n {\n if (_items[i]._dragDropEventId === id)\n {\n if (group !== _items[i].dragGroup)\n {\n return false;\n }\n item = _items[i];\n index = i;\n break;\n }\n }\n\n if (item !== null)\n {\n _items.splice(index, 1);\n\n return item;\n }\n\n return false;\n },\n};\n\nexport { DragDropController };\nexport default DragDropController;\n","/**\n * @memberof PUXI\n * @class\n */\nexport class Insets\n{\n left: number;\n top: number;\n right: number;\n bottom: number;\n\n dirtyId: number;\n\n constructor()\n {\n this.reset();\n this.dirtyId = 0;\n }\n\n reset(): void\n {\n this.left = -1;\n this.top = -1;\n this.right = -1;\n this.bottom = -1;\n }\n}\n","/**\n * These are the modes in which an entity can measures its dimension. They are\n * relevant when a layout needs to know the optimal sizes of its children.\n *\n * @memberof PUXI\n * @enum\n * @property {number} UNBOUNDED - no upper limit on bounds. This should calculate the optimal dimensions for the entity.\n * @property {number} EXACTLY - the entity should set its dimension to the one passed to it.\n * @property {number} AT_MOST - the entity should find an optimal dimension below the one passed to it.\n */\nexport enum MeasureMode\n{\n UNBOUNDED = 0,\n EXACTLY = 1,\n AT_MOST = 2\n}\n\nexport interface IMeasurable\n{\n onMeasure(maxWidth: number, maxHeight: number, widthMode: MeasureMode, heightMode: MeasureMode);\n getMeasuredWidth(): number;\n getMeasuredHeight(): number;\n}\n\n/**\n * Any renderable entity that can be used in a widget hierarchy must be\n * measurable.\n *\n * @memberof PUXI\n * @interface IMeasurable\n */\n\n/**\n * Measures its width & height based on the passed constraints.\n *\n * @memberof PUXI.IMeasurable#\n * @method onMeasure\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n */\n\n/**\n * @memberof PUXI.IMeasurable#\n * @method getMeasuredWidth\n * @returns {number} - the measured width of the entity after a `onMeasure` call\n */\n\n/**\n * @memberof PUXI.IMeasurable#\n * @method getMeasuredHeight\n * @returns {number} - the measured height of the entity after a `onMeasure` call\n */\n","import { Widget } from '../Widget';\n\n/**\n * An event manager handles the states related to certain events and can augment\n * widget interaction. For example, the click manager will hide clicks when\n * the object is dragging.\n *\n * Event managers are lifecycle objects - they can start/stop. Their constructor\n * will always accept one argument - the widget. Other settings can be applied before\n * `startEvent`.\n *\n * Ideally, you should access event managers _after_ your widget has initialized. This is\n * because it may depend on the widget's stage being assigned.\n *\n * @memberof PUXI\n * @class\n * @abstract\n */\nexport abstract class EventManager\n{\n protected target: Widget;\n protected isEnabled: boolean;\n\n /**\n * @param {Widget} target\n */\n constructor(target: Widget)\n {\n this.target = target;\n this.isEnabled = false;// use to track start/stopEvent\n }\n\n /**\n * @returns {Widget}\n */\n getTarget(): Widget\n {\n return this.target;\n }\n\n /**\n * Registers the interaction event listeners that will emit corresponding events\n * on the target widget.\n */\n abstract startEvent(): any;\n\n /**\n * Unregisters any event listeners and releases any resources held. This should\n * revert all changes made by `startEvent`.\n */\n abstract stopEvent(): any;\n}\n","import * as PIXI from 'pixi.js';\nimport { Widget } from '../Widget';\nimport { EventManager } from './EventManager';\n\n/**\n * `ClickManager` handles hover and click events. It registers listeners\n * for `mousedown`, `mouseup`, `mousemove`, `mouseout`, `mouseover`, `touchstart`,\n * `touchend`, `touchendoutside`, `touchmove`, `rightup`, `rightdown`, `rightupoutside`\n * events.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.EventManager\n */\nexport class ClickManager extends EventManager\n{\n onHover: (event: PIXI.InteractionEvent, over: boolean) => void;\n onPress: (event: PIXI.InteractionEvent, isPressed: boolean) => void;\n onClick: (event: PIXI.InteractionMouseEvents) => void;\n onMove: (event: PIXI.InteractionEvent) => void;\n\n protected _rightMouseButton: boolean;\n protected _includeHover: boolean;\n protected _doubleClick: boolean;\n\n private bound: boolean;\n private id: number;\n private ishover: boolean;\n protected target: Widget;\n\n private movementX: number;\n private movementY: number;\n mouse: PIXI.Point;\n offset: PIXI.Point;\n\n private evMouseDown: string;\n private evMouseUp: string;\n private evMouseUpOutside: string;\n\n time: number;\n\n /**\n * @param {PUXI.Widget | PUXI.Button} target\n * @param {boolean}[includeHover=false] - enable hover (`mouseover`, `mouseout`) listeners\n * @param {boolean}[rightMouseButton=false] - use right mouse clicks\n * @param {boolean}[doubleClick=false] - fire double clicks\n */\n constructor(target: Widget, includeHover?: boolean, rightMouseButton?, doubleClick?: boolean)\n {\n super(target);\n\n this.bound = false;\n this.id = 0;\n this.ishover = false;\n this.mouse = new PIXI.Point();\n this.offset = new PIXI.Point();\n this.movementX = 0;\n this.movementY = 0;\n\n this._includeHover = typeof includeHover === 'undefined' ? true : includeHover;\n this.rightMouseButton = typeof rightMouseButton === 'undefined' ? false : rightMouseButton;\n this._doubleClick = typeof doubleClick === 'undefined' ? false : doubleClick;\n\n target.interactive = true;\n\n this.time = 0;\n this.startEvent();\n\n this.onHover = (): void => null;\n this.onPress = (): void => null;\n this.onClick = (): void => null;\n this.onMove = (): void => null;\n }\n\n /**\n * Whether right mice are used for clicks rather than left mice.\n * @member boolean\n */\n get rightMouseButton(): boolean\n {\n return this._rightMouseButton;\n }\n set rightMouseButton(val: boolean)\n {\n this._rightMouseButton = val;\n\n this.evMouseDown = this._rightMouseButton ? 'rightdown' : 'mousedown';\n this.evMouseUp = this._rightMouseButton ? 'rightup' : 'mouseup';\n this.evMouseUpOutside = this._rightMouseButton ? 'rightupoutside' : 'mouseupoutside';\n }\n\n /**\n * @param {boolean}[includeHover]\n * @param {boolean}[rightMouseButton]\n * @param {boolean}[doubleClick]\n * @override\n */\n startEvent = (\n includeHover = this._includeHover,\n rightMouseButton = this._rightMouseButton,\n doubleClick = this._doubleClick,\n ): void =>\n {\n if (this.isEnabled)\n {\n return;\n }\n\n this._includeHover = includeHover;\n this.rightMouseButton = rightMouseButton;\n this._doubleClick = doubleClick;\n\n const { target } = this;\n\n target.insetContainer.on(this.evMouseDown, this.onMouseDownImpl);\n\n if (!this._rightMouseButton)\n {\n target.insetContainer.on('touchstart', this.onMouseDownImpl);\n }\n\n if (this._includeHover)\n {\n target.insetContainer.on('mouseover', this.onMouseOverImpl);\n target.insetContainer.on('mouseout', this.onMouseOutImpl);\n }\n\n this.isEnabled = true;\n };\n\n /**\n * @override\n */\n stopEvent = (): void =>\n {\n if (!this.isEnabled)\n {\n return;\n }\n\n const { target } = this;\n\n if (this.bound)\n {\n target.insetContainer.removeListener(this.evMouseUp, this.onMouseUpImpl);\n target.insetContainer.removeListener(this.evMouseUpOutside, this.onMouseUpOutsideImpl);\n\n if (!this._rightMouseButton)\n {\n target.insetContainer.removeListener('touchend', this.onMouseUpImpl);\n target.insetContainer.removeListener('touchendoutside', this.onMouseUpOutsideImpl);\n }\n\n this.bound = false;\n }\n\n target.insetContainer.removeListener(this.evMouseDown, this.onMouseDownImpl);\n\n if (!this._rightMouseButton)\n {\n target.insetContainer.removeListener('touchstart', this.onMouseDownImpl);\n }\n\n if (this._includeHover)\n {\n target.insetContainer.removeListener('mouseover', this.onMouseOverImpl);\n target.insetContainer.removeListener('mouseout', this.onMouseOutImpl);\n target.insetContainer.removeListener('mousemove', this.onMouseMoveImpl);\n target.insetContainer.removeListener('touchmove', this.onMouseMoveImpl);\n }\n\n this.isEnabled = false;\n };\n\n protected onMouseDownImpl = (event: PIXI.interaction.InteractionEvent): void =>\n {\n const {\n target: obj,\n evMouseUp,\n onMouseUpImpl: _onMouseUp,\n evMouseUpOutside,\n onMouseUpOutsideImpl: _onMouseUpOutside,\n _rightMouseButton: right,\n } = this;\n\n this.mouse.copyFrom(event.data.global);\n this.id = event.data.identifier;\n this.onPress.call(this.target, event, true);\n\n if (!this.bound)\n {\n obj.insetContainer.on(evMouseUp, _onMouseUp);\n obj.insetContainer.on(evMouseUpOutside, _onMouseUpOutside);\n\n if (!right)\n {\n obj.insetContainer.on('touchend', _onMouseUp);\n obj.insetContainer.on('touchendoutside', _onMouseUpOutside);\n }\n\n this.bound = true;\n }\n\n if (this._doubleClick)\n {\n const now = performance.now();\n\n if (now - this.time < 210)\n {\n this.onClick.call(obj, event);\n }\n else\n {\n this.time = now;\n }\n }\n\n event.data.originalEvent.preventDefault();\n };\n\n protected onMouseUpCommonImpl = (event: PIXI.interaction.InteractionEvent): void =>\n {\n const {\n target: obj,\n evMouseUp,\n onMouseUpImpl: _onMouseUp,\n evMouseUpOutside,\n onMouseUpOutsideImpl: _onMouseUpOutside,\n } = this;\n\n if (event.data.identifier !== this.id)\n {\n return;\n }\n\n this.offset.set(event.data.global.x - this.mouse.x, event.data.global.y - this.mouse.y);\n\n if (this.bound)\n {\n obj.insetContainer.removeListener(evMouseUp, _onMouseUp);\n obj.insetContainer.removeListener(evMouseUpOutside, _onMouseUpOutside);\n\n if (!this._rightMouseButton)\n {\n obj.insetContainer.removeListener('touchend', _onMouseUp);\n obj.insetContainer.removeListener('touchendoutside', _onMouseUpOutside);\n }\n\n this.bound = false;\n }\n\n this.onPress.call(obj, event, false);\n };\n\n protected onMouseUpImpl = (event): void =>\n {\n if (event.data.identifier !== this.id)\n {\n return;\n }\n\n this.onMouseUpCommonImpl(event);\n\n // prevent clicks with scrolling/dragging objects\n if (this.target.dragThreshold)\n {\n this.movementX = Math.abs(this.offset.x);\n this.movementY = Math.abs(this.offset.y);\n\n if (Math.max(this.movementX, this.movementY) > this.target.dragThreshold)\n {\n return;\n }\n }\n\n if (!this._doubleClick)\n {\n this.onClick.call(this.target, event);\n }\n };\n\n protected onMouseUpOutsideImpl = (event): void =>\n {\n if (event.data.identifier !== this.id)\n {\n return;\n }\n\n this.onMouseUpCommonImpl(event);\n };\n\n protected onMouseOverImpl = (event): void =>\n {\n if (!this.ishover)\n {\n this.ishover = true;\n this.target.insetContainer.on('mousemove', this.onMouseMoveImpl);\n this.target.insetContainer.on('touchmove', this.onMouseMoveImpl);\n\n this.onHover.call(this.target, event, true);\n }\n };\n\n protected onMouseOutImpl = (event): void =>\n {\n if (this.ishover)\n {\n this.ishover = false;\n this.target.insetContainer.removeListener('mousemove', this.onMouseMoveImpl);\n this.target.insetContainer.removeListener('touchmove', this.onMouseMoveImpl);\n\n this.onHover.call(this.target, event, false);\n }\n };\n\n protected onMouseMoveImpl = (event): void =>\n {\n this.onMove.call(this.target, event);\n };\n}\n","import * as PIXI from 'pixi.js';\nimport { EventManager } from './EventManager';\nimport { Widget } from '../Widget';\n\n/**\n * `DragManager` handles drag & drop events. It registers listeners for `mousedown`,\n * `touchstart` on the target and `mousemove`, `touchmove`, `mouseup`, `mouseupoutside`,\n * `touchend`, `touchendoutside` on the stage.\n *\n * By default, `draggable` widgets will internally handle drag-n-drop and reassigning\n * the callbacks on their `DragManager` will break their behaviour. You can prevent\n * this by using `eventBroker.dnd` directly without setting `widget.draggable` to\n * `true` (or using `widget.makeDraggable()`).\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.EventManager\n */\nexport class DragManager extends EventManager\n{\n protected isBound: boolean;\n protected isDragging: boolean;\n protected id: number;\n protected dragStart: PIXI.Point;\n protected dragOffset: PIXI.Point;\n protected lastCursor: PIXI.Point;\n protected movementX: number;\n protected movementY: number;\n protected cancel: boolean;\n\n public onPress: (e: PIXI.interaction.InteractionEvent, isPressed: boolean) => void;\n public onDragStart: (e: PIXI.interaction.InteractionEvent) => void;\n public onDragMove: (e: PIXI.interaction.InteractionEvent, dragOffset: PIXI.Point) => void;\n public onDragEnd: (e: PIXI.interaction.InteractionEvent) => void;\n\n constructor(target: Widget)\n {\n super(target);\n\n this.isBound = false;\n this.isDragging = false;\n this.id = 0;\n this.dragStart = new PIXI.Point();\n this.dragOffset = new PIXI.Point();\n this.lastCursor = new PIXI.Point();\n this.movementX = 0;\n this.movementY = 0;\n this.cancel = false;\n\n this.target.interactive = true;\n\n this.onPress = (): void => null;\n this.onDragStart = (): void => null;\n this.onDragMove = (): void => null;\n this.onDragEnd = (): void => null;\n }\n\n startEvent(): void\n {\n if (this.isEnabled)\n {\n return;\n }\n\n const { target } = this;\n\n target.insetContainer.on('mousedown', this.onDragStartImpl);\n target.insetContainer.on('touchstart', this.onDragStartImpl);\n\n this.isEnabled = true;\n }\n\n stopEvent(): void\n {\n if (!this.isEnabled)\n {\n return;\n }\n\n const { target } = this;\n\n if (this.isBound)\n {\n target.stage.removeListener('mousemove', this.onDragMoveImpl);\n target.stage.removeListener('touchmove', this.onDragMoveImpl);\n target.stage.removeListener('mouseup', this.onDragEndImpl);\n target.stage.removeListener('mouseupoutside', this.onDragEndImpl);\n target.stage.removeListener('touchend', this.onDragEndImpl);\n target.stage.removeListener('touchendoutside', this.onDragEndImpl);\n\n this.isBound = false;\n }\n\n target.insetContainer.removeListener('mousedown', this.onDragStartImpl);\n target.insetContainer.removeListener('touchstart', this.onDragStartImpl);\n\n this.isEnabled = false;\n }\n\n protected onDragStartImpl = (e: PIXI.interaction.InteractionEvent): void =>\n {\n const { target } = this;\n\n this.id = e.data.identifier;\n this.onPress(e, true);\n\n if (!this.isBound)\n {\n this.dragStart.copyFrom(e.data.global);\n\n target.stage.on('mousemove', this.onDragMoveImpl);\n target.stage.on('touchmove', this.onDragMoveImpl);\n target.stage.on('mouseup', this.onDragEndImpl);\n target.stage.on('mouseupoutside', this.onDragEndImpl);\n target.stage.on('touchend', this.onDragEndImpl);\n target.stage.on('touchendoutside', this.onDragEndImpl);\n target.stage.on('touchcancel', this.onDragEndImpl);\n\n this.isBound = true;\n }\n\n e.data.originalEvent.preventDefault();\n };\n\n private onDragMoveImpl = (e: PIXI.interaction.InteractionEvent): void =>\n {\n if (e.data.identifier !== this.id)\n {\n return;\n }\n\n const {\n lastCursor,\n dragOffset,\n dragStart,\n target,\n } = this;\n\n this.lastCursor.copyFrom(e.data.global);\n this.dragOffset.set(lastCursor.x - dragStart.x, lastCursor.y - dragStart.y);\n\n if (!this.isDragging)\n {\n this.movementX = Math.abs(dragOffset.x);\n this.movementY = Math.abs(dragOffset.y);\n\n if ((this.movementX === 0 && this.movementY === 0)\n || Math.max(this.movementX, this.movementY) < target.dragThreshold)\n {\n return; // threshold\n }\n\n if (target.dragRestrictAxis !== null)\n {\n this.cancel = false;\n\n if (target.dragRestrictAxis === 'x' && this.movementY > this.movementX)\n {\n this.cancel = true;\n }\n else if (target.dragRestrictAxis === 'y' && this.movementY <= this.movementX)\n {\n this.cancel = true;\n }\n\n if (this.cancel)\n {\n this.onDragEndImpl(e);\n\n return;\n }\n }\n\n this.onDragStart(e);\n this.isDragging = true;\n }\n\n this.onDragMove(e, dragOffset);\n };\n\n private onDragEndImpl = (e: PIXI.interaction.InteractionEvent): void =>\n {\n if (e.data.identifier !== this.id)\n {\n return;\n }\n\n const { target } = this;\n\n if (this.isBound)\n {\n target.stage.removeListener('mousemove', this.onDragMoveImpl);\n target.stage.removeListener('touchmove', this.onDragMoveImpl);\n target.stage.removeListener('mouseup', this.onDragEndImpl);\n target.stage.removeListener('mouseupoutside', this.onDragEndImpl);\n target.stage.removeListener('touchend', this.onDragEndImpl);\n target.stage.removeListener('touchendoutside', this.onDragEndImpl);\n target.stage.removeListener('touchcancel', this.onDragEndImpl);\n\n this.isDragging = false;\n this.isBound = false;\n\n this.onDragEnd(e);\n this.onPress(e, false);\n }\n };\n}\n","import { ClickManager } from './ClickManager';\nimport { DragManager } from './DragManager';\nimport { EventManager } from './EventManager';\nimport { Widget } from '../Widget';\n\n/**\n * The event brokers allows you to access event managers without manually assigning\n * them to a widget. By default, the click (`PUXI.ClickManager`), dnd (`PUXI.DragManager`)\n * are defined. You can add event managers for all (new) widgets by adding an entry to\n * `EventBroker.MANAGER_MAP`.\n *\n * @memberof PUXI\n * @class\n */\nexport class EventBroker\n{\n [key: string]: EventManager | Widget;\n\n constructor(target: Widget)\n {\n this.target = target;\n\n for (const mgr of Object.keys(EventBroker.MANAGER_MAP))\n {\n Object.defineProperty(\n this,\n mgr,\n {\n get(): EventManager\n {\n if (!this[`_${mgr}`])\n {\n this[`_${mgr}`] = new EventBroker.MANAGER_MAP[mgr](this.target);\n }\n\n return this[`_${mgr}`];\n },\n },\n );\n }\n }\n\n static MANAGER_MAP = {\n click: ClickManager,\n dnd: DragManager,\n };\n}\n","import * as PIXI from 'pixi.js';\nimport { EventManager } from './EventManager';\nimport { Widget } from '../Widget';\n\n/**\n * Handles the `wheel` and `scroll` DOM events on widgets. It also registers\n * listeners for `mouseout` and `mouseover`.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.EventManager\n */\nexport class ScrollManager extends EventManager\n{\n private bound: boolean;\n private delta: PIXI.Point;\n private preventDefault: boolean;\n\n constructor(target: Widget, preventDefault = true)\n {\n super(target);\n\n this.bound = false;\n this.delta = new PIXI.Point();\n this.preventDefault = preventDefault;\n\n this.startEvent();\n }\n\n /**\n * @override\n */\n startEvent(): void\n {\n const { target, onHoverImpl, onMouseOutImpl } = this;\n\n target.contentContainer.on('mouseover', onHoverImpl);\n target.contentContainer.on('mouseout', onMouseOutImpl);\n }\n\n /**\n * @override\n */\n stopEvent(): void\n {\n const { target, onMouseScrollImpl, onHoverImpl, onMouseOutImpl } = this;\n\n if (this.bound)\n {\n document.removeEventListener('mousewheel', onMouseScrollImpl);\n document.removeEventListener('DOMMouseScroll', onMouseScrollImpl);\n\n this.bound = false;\n }\n\n target.contentContainer.removeListener('mouseover', onHoverImpl);\n target.contentContainer.removeListener('mouseout', onMouseOutImpl);\n }\n\n private onMouseScrollImpl = (e: WheelEvent): void =>\n {\n const { target, preventDefault, delta } = this;\n\n if (preventDefault)\n {\n event.preventDefault();\n }\n\n if (typeof e.deltaX !== 'undefined')\n {\n delta.set(e.deltaX, e.deltaY);\n }\n else // Firefox\n {\n delta.set(e.axis === 1 ? e.detail * 60 : 0,\n e.axis === 2 ? e.detail * 60 : 0);\n }\n\n this.onMouseScroll.call(target, event, delta);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private onHoverImpl = (e): void =>\n {\n const { onMouseScrollImpl } = this;\n\n if (!this.bound)\n {\n document.addEventListener('mousewheel', onMouseScrollImpl, false);\n document.addEventListener('DOMMouseScroll', onMouseScrollImpl, false);\n\n this.bound = true;\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private onMouseOutImpl = (e): void =>\n {\n const { onMouseScrollImpl } = this;\n\n if (this.bound)\n {\n document.removeEventListener('mousewheel', onMouseScrollImpl);\n document.removeEventListener('DOMMouseScroll', onMouseScrollImpl);\n\n this.bound = false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMouseScroll = function onMouseScroll(event, delta: PIXI.Point): void\n {\n // Default onMouseScroll.\n };\n}\n","import { DragManager } from './event/DragManager';\nimport { DragDropController } from './event/DragDropController';\nimport * as PIXI from 'pixi.js';\nimport { Insets } from './layout-options/Insets';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { MeasureMode, IMeasurable } from './IMeasurable';\nimport { Stage } from './Stage';\nimport { DropShadowFilter } from '@pixi/filter-drop-shadow';\nimport { EventBroker } from './event';\nimport { Style } from './Style';\nimport { Menu } from './Menu';\nimport { PopupMenu } from './PopupMenu';\n\nconst PADDING_PROPERTIES = ['paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom'];\n\nconst PADDING_AXIS_PROPERTIES = ['paddingHorizontal', 'paddingVertical'];\n\nexport const TEXT_STYLE_PROPERTIES = [\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'letterSpacing',\n];\n\n/**\n * A widget is a user interface control that renders content inside its prescribed\n * rectangle on the screen.\n *\n * @memberof PUXI\n * @class\n * @extends PIXI.utils.EventEmitter\n * @implements PUXI.IMeasurable\n */\nexport class Widget extends PIXI.utils.EventEmitter implements IMeasurable\n{\n /**\n * The minimum delay between two clicks to not consider them as a double-click.\n */\n public static CLICK_DELAY = 300;\n\n public readonly insetContainer: PIXI.Container;\n public readonly contentContainer: PIXI.Container;\n public readonly widgetChildren: Widget[];\n public readonly stage: Stage;\n\n initialized: boolean;\n protected dragInitialized: boolean;\n protected dropInitialized: boolean;\n protected isDragging: boolean;\n\n private draggable: boolean;\n private droppable: boolean;\n \n tint: number;\n dirty: boolean;\n _oldWidth: number;\n _oldHeight: number;\n pixelPerfect: boolean;\n\n parent: Widget;\n\n public layoutMeasure: Insets;\n public layoutOptions: LayoutOptions;\n\n protected blendMode: PIXI.BLEND_MODES;\n protected background: PIXI.Container;\n protected _measuredWidth: number;\n protected _measuredHeight: number;\n\n private _eventBroker: EventBroker;\n private _paddingLeft: number;\n private _paddingTop: number;\n private _paddingRight: number;\n private _paddingBottom: number;\n private _width: number;\n private _height: number;\n private _elevation: number;\n private _dropShadow: DropShadowFilter;\n private _layoutDirty: boolean;\n\n private singleClickTimeout: NodeJS.Timeout;\n private style: Style;\n private styleID: number;\n private contextMenu: Menu;\n private contextPopup: PopupMenu;\n\n constructor()\n {\n super();\n\n /**\n * This container owns the background + content of this widget.\n * @member {PIXI.Container}\n * @readonly\n */\n this.insetContainer = new PIXI.Container();\n\n /**\n * This container holds the content of this widget. Subclasses should add\n * renderable display-objects to this container.\n * @member {PIXI.Container}\n * @readonly\n */\n this.contentContainer = this.insetContainer.addChild(new PIXI.Container());\n\n /**\n * Children of this widget. Use `WidgetGroup` to position children.\n * @member {PUXI.Widget[]}\n * @readonly\n */\n this.widgetChildren = [];\n\n /**\n * Stage whose scene graph holds this widget. Once set, this cannot be changed.\n * @member {PUXI.Stage}\n * @readonly\n */\n this.stage = null;\n\n /**\n * Layout insets of this widget. In normal state, the widget should be in this\n * rectangle inside the parent reference frame.\n * @member {PUXI.Insets}\n * @readonly\n */\n this.layoutMeasure = new Insets();\n\n this.initialized = false;\n this.dragInitialized = false;\n this.dropInitialized = false;\n\n this.dirty = true;\n this._oldWidth = -1;\n this._oldHeight = -1;\n this.pixelPerfect = true;\n\n this._paddingLeft = 0;\n this._paddingTop = 0;\n this._paddingRight = 0;\n this._paddingBottom = 0;\n this._elevation = 0;\n\n this.tint = 0;\n this.blendMode = PIXI.BLEND_MODES.NORMAL;\n\n this.draggable = false;\n this.droppable = false;\n\n this.singleClickTimeout = null;\n this.style = null;\n this.styleID = -1;\n\n // Use a separate callback function to allow this.on* methods to be reassigned.\n this.insetContainer.on('pointerdown', (e: PIXI.InteractionEvent) => { this.onPointerPress(e); });\n this.insetContainer.on('pointermove', (e: PIXI.InteractionEvent) => { this.onPointerMove(e); });\n this.insetContainer.on('pointerup', (e: PIXI.InteractionEvent) => { this.onPointerRelease(e); });\n this.insetContainer.on('pointerover', (e: PIXI.InteractionEvent) => { this.onPointerEnter(e); });\n this.insetContainer.on('pointerout', (e: PIXI.InteractionEvent) => { this.onPointerExit(e); });\n this.insetContainer.on('rightclick', (e: PIXI.InteractionEvent) => { this.onRightClick(e); });\n }\n\n /**\n * Update method that is to be overriden. This is called before a `render()`\n * pass on widgets that are dirty.\n *\n * @private\n */\n update(): any\n {\n if (this._layoutDirty)\n {\n // console.log('here');\n setTimeout(() =>\n {\n if (this._layoutDirty)\n {\n this.stage.measureAndLayout();\n }\n }, 0);\n }\n\n if (this.style && this.styleID !== this.style.dirtyID)\n {\n this.onStyleChange(this.style);\n this.styleID = this.style.dirtyID;\n }\n }\n\n /**\n * The measured width that is used by the parent's layout manager to place this\n * widget.\n * @member {number}\n */\n get measuredWidth(): number\n {\n return this._measuredWidth;\n }\n\n /**\n * The measured height that is used by the parent's layout manager to place this\n * widget.\n * @member {number}\n */\n get measuredHeight(): number\n {\n return this._measuredHeight;\n }\n\n /**\n * Alias for `Widget.measuredWidth`.\n *\n * @returns {number} the measured width\n */\n getMeasuredWidth(): number\n {\n return this._measuredWidth;\n }\n\n /**\n * Alias for `Widget.measuredHeight`.\n *\n * @returns {number} the measured height\n */\n getMeasuredHeight(): number\n {\n return this._measuredHeight;\n }\n\n /**\n * Override this method to measure the dimensions for your widget. By default, it\n * will use the natural width/height of this widget's content (`contentContainer`)\n * plus any padding.\n *\n * @param {number} width - width of region provided by parent\n * @param {number} height - height of region provided by parent\n * @param {PUXI.MeasureMode} widthMode - mode in which provided width is to be used\n * @param {PUXI.MeasureMode} heightMode - mode in which provided height is to be used\n */\n onMeasure(width: number, height: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n const naturalWidth = this.contentContainer.width + this.paddingHorizontal;\n const naturalHeight = this.contentContainer.height + this.paddingVertical;\n\n switch (widthMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredWidth = width;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredWidth = naturalWidth;\n break;\n case MeasureMode.AT_MOST:\n this._measuredWidth = Math.min(width, naturalWidth);\n break;\n }\n\n switch (heightMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredHeight = height;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredHeight = naturalHeight;\n break;\n case MeasureMode.AT_MOST:\n this._measuredHeight = Math.min(height, naturalHeight);\n break;\n }\n }\n\n /**\n * This method calls `Widget.onMeasure` and should not be overriden. It does internal\n * bookkeeping.\n *\n * @param {number} width\n * @param {number} height\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n */\n measure(width: number, height: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n this.onMeasure(width, height, widthMode, heightMode);\n }\n\n /**\n * This method should set the frame in which rendering will occur and lay out\n * child widgets in that frame.\n *\n * @param l\n * @param t\n * @param r\n * @param b\n * @param dirty\n * @protected\n */\n onLayout(l: number, t: number = l, r: number = l, b: number = t, dirty = true): void\n {\n this.layoutMeasure.left = l;\n this.layoutMeasure.top = t;\n this.layoutMeasure.right = r;\n this.layoutMeasure.bottom = b;\n\n this._width = r - l;\n this._height = b - t;\n\n if (this.background)\n {\n this.background.x = 0;\n this.background.y = 0;\n this.background.width = r - l;\n this.background.height = b - t;\n }\n\n // Update parallel PIXI node too!\n this.insetContainer.x = l;\n this.insetContainer.y = t;\n this.contentContainer.x = this._paddingLeft;\n this.contentContainer.y = this._paddingTop;\n\n // Don't set width/height on inset, content because that would scale\n // the contents (we don't want that).\n\n this._layoutDirty = false;\n }\n\n layout(l: number, t: number = l, r: number = l, b: number = t, dirty = true): void\n {\n this.onLayout(l, t, r, b, dirty);\n }\n\n /**\n * Use this to specify how you want to layout this widget w.r.t its parent.\n * The specific layout options class depends on which layout you are\n * using in the parent widget.\n *\n * @param {PUXI.LayoutOptions} lopt\n * @returns {Widget} this\n */\n setLayoutOptions(lopt: LayoutOptions): Widget\n {\n this.layoutOptions = lopt;\n\n return this;\n }\n\n /**\n * This is invoked when a style is applied on the widget. If you override it, you must pass through the superclass\n * implementation.\n *\n * @param style\n */\n protected onStyleChange(style: Style): void\n {\n const styleData = style.getProperties(\n 'backgroundColor',\n 'background',\n 'elevation',\n 'padding',\n 'paddingHorizontal',\n 'paddingVertical',\n 'paddingLeft',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n );\n\n // Set background of widget\n if (styleData.background)\n {\n this.setBackground(styleData.background);\n }\n else if (typeof styleData.backgroundColor !== 'undefined')\n {\n this.setBackground(styleData.backgroundColor);\n }\n\n // Set elevation\n if (typeof styleData.elevation !== 'undefined')\n {\n this.setElevation(styleData.elevation);\n }\n\n // Set _paddingLeft, _paddingTop, _paddingRight, _paddingBottom\n PADDING_PROPERTIES.forEach((propName, i) =>\n {\n if (typeof styleData[propName] === 'number')\n {\n this[`_${propName}`] = styleData[propName];\n }\n else if (typeof styleData[PADDING_AXIS_PROPERTIES[i % 2]] === 'number')\n {\n this[`_${propName}`] = styleData[PADDING_AXIS_PROPERTIES[i % 2]];\n }\n else if (typeof styleData.padding === 'number')\n {\n this[`_${propName}`] = styleData.padding;\n }\n });\n\n this.dirty = true;\n }\n\n /**\n * Handles the pointer-entered event.\n *\n * If you override this method, you must call through to the superclass implementation.\n *\n * @param e - the triggering interaction event\n */\n onPointerEnter(e: PIXI.InteractionEvent): void\n {\n this.onHoverChange(e, true);\n }\n\n /**\n * Handles the pointer-exited event.\n *\n * If you override this method, you must call through to the superclass implementation.\n *\n * @param e\n */\n onPointerExit(e: PIXI.InteractionEvent): void\n {\n this.onHoverChange(e, false);\n }\n\n /**\n * Handles the pointer-down event. If you override this method, you must call through to the superclass\n * implementation.\n */\n onPointerPress(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n /**\n * Handles the pointer-move event. If you override this method, you must call through to the superclass\n * implementation.\n */\n onPointerMove(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n onPointerRelease(e: PIXI.InteractionEvent): void\n {\n if (!this.singleClickTimeout)\n {\n // Invoke onClick after ~300ms only if it isn't a double-click.\n this.singleClickTimeout = setTimeout(() =>\n {\n this.singleClickTimeout = null;\n }, Widget.CLICK_DELAY);\n\n this.onClick(e);\n }\n else\n {\n clearTimeout(this.singleClickTimeout);\n\n this.singleClickTimeout = null;\n\n // Invoke onDoubleClick after the onPointerPress handler.\n setTimeout(() => { this.onDoubleClick(e); }, 0);\n }\n\n return;\n }\n\n /**\n * Event handler for change in the hover state.\n *\n * @param e\n * @param hover\n */\n onHoverChange(e: PIXI.InteractionEvent, hover: boolean): void\n {\n return;\n }\n\n onClick(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n onDoubleClick(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n onRightClick(e: PIXI.InteractionEvent): void\n {\n console.log('RIGHT_CLICK');\n e.data.originalEvent.preventDefault();\n\n if (this.contextMenu)\n {\n if (!this.contextPopup)\n {\n // this.contextPopup = new PopupMenu(this.contextMenu);\n }\n\n const location = e.data.getLocalPosition(this.stage);\n\n // this.openPopupMenu(location.x, location.y);\n }\n\n return;\n }\n\n /**\n * The event broker for this widget that holds all the event managers. This can\n * be used to start/stop clicks, drags, scrolls and configure how those events\n * are handled/interpreted.\n * @member PUXI.EventBroker\n */\n get eventBroker(): EventBroker\n {\n if (!this._eventBroker)\n {\n this._eventBroker = new EventBroker(this);\n }\n\n return this._eventBroker;\n }\n\n /**\n * Padding on left side.\n * @member {number}\n */\n get paddingLeft(): number\n {\n return this._paddingLeft;\n }\n set paddingLeft(val: number)\n {\n this._paddingLeft = val;\n this.dirty = true;\n }\n\n /**\n * Padding on top side.\n * @member {number}\n */\n get paddingTop(): number\n {\n return this._paddingTop;\n }\n set paddingTop(val: number)\n {\n this._paddingTop = val;\n this.dirty = true;\n }\n\n /**\n * Padding on right side.\n * @member {number}\n */\n get paddingRight(): number\n {\n return this._paddingRight;\n }\n set paddingRight(val: number)\n {\n this._paddingRight = val;\n this.dirty = true;\n }\n\n /**\n * Padding on bottom side.\n * @member {number}\n */\n get paddingBottom(): number\n {\n return this._paddingBottom;\n }\n set paddingBottom(val: number)\n {\n this._paddingBottom = val;\n this.dirty = true;\n }\n\n /**\n * Sum of left & right padding.\n * @member {number}\n * @readonly\n */\n get paddingHorizontal(): number\n {\n return this._paddingLeft + this._paddingRight;\n }\n\n /**\n * Sum of top & bottom padding.\n * @member {number}\n * @readonly\n */\n get paddingVertical(): number\n {\n return this._paddingTop + this._paddingBottom;\n }\n\n /**\n * Whether this widget is interactive in the PixiJS scene graph.\n * @member {boolean}\n */\n get interactive(): boolean\n {\n return this.insetContainer.interactive;\n }\n set interactive(val: boolean)\n {\n this.insetContainer.interactive = true;\n this.contentContainer.interactive = true;\n }\n\n /**\n * Layout width of this widget.\n * @member {number}\n * @readonly\n */\n get width(): number\n {\n return this._width;\n }\n\n /**\n * Layout height of this widget.\n * @member {number}\n * @readonly\n */\n get height(): number\n {\n return this._height;\n }\n\n /**\n * Layout width of this widget's content, which is the width minus horizontal padding.\n * @member {number}\n * @readonly\n */\n get contentWidth(): number\n {\n return this._width - this.paddingHorizontal;\n }\n\n /**\n * Layout height of this widget's content, which is the height minus vertical padding.\n * @member {number}\n * @readonly\n */\n get contentHeight(): number\n {\n return this._height - this.paddingVertical;\n }\n\n /**\n * Alpha of this widget & its contents.\n * @member {number}\n */\n get alpha(): number\n {\n return this.insetContainer.alpha;\n }\n set alpha(val: number)\n {\n this.insetContainer.alpha = val;\n }\n\n /**\n * Sets the padding values.\n *\n * To set all paddings to one value:\n * ```\n * widget.setPadding(8);\n * ```\n *\n * To set horizontal & vertical padding separately:\n * ```\n * widget.setPadding(4, 12);\n * ```\n *\n * @param {number}[l=0] - left padding\n * @param {number}[t=l] - top padding (default is equal to left padding)\n * @param {number}[r=l] - right padding (default is equal to right padding)\n * @param {number}[b=t] - bottom padding (default is equal to top padding)\n */\n setPadding(l: number, t: number = l, r: number = l, b: number = t): Widget\n {\n this._paddingLeft = l;\n this._paddingTop = t;\n this._paddingRight = r;\n this._paddingBottom = b;\n this.dirty = true;\n\n return this;\n }\n\n /**\n * @returns {PIXI.Container} - the background display-object\n */\n getBackground(): PIXI.Container\n {\n return this.background;\n }\n\n /**\n * The background of a widget is a `PIXI.DisplayObject` that is rendered before\n * all of its children.\n *\n * @param {PIXI.Container | number | string} bg - the background display-object or\n * a color that will be used to generate a `PIXI.Graphics` as the background.\n */\n setBackground(bg: PIXI.Container | number | string): Widget\n {\n if (this.background)\n {\n this.insetContainer.removeChild(this.background);\n }\n\n if (typeof bg === 'string')\n {\n bg = PIXI.utils.string2hex(bg);\n }\n if (typeof bg === 'number')\n {\n bg = new PIXI.Graphics()\n .beginFill(bg)\n .drawRect(0, 0, 1, 1)\n .endFill();\n }\n\n this.background = bg;\n\n if (bg)\n {\n bg.width = this.width;\n bg.height = this.height;\n this.insetContainer.addChildAt(bg, 0);\n }\n\n if (bg && this._elevation && this._dropShadow)\n {\n if (!this.background.filters)\n {\n this.background.filters = [];\n }\n\n this.background.filters.push(this._dropShadow);\n }\n\n return this;\n }\n\n /**\n * @returns {number} the alpha on the background display-object.\n */\n getBackgroundAlpha(): number\n {\n return this.background ? this.background.alpha : 1;\n }\n\n /**\n * This can be used to set the alpha on the _background_ of this widget. This\n * does not affect the widget's contents nor individual components of the\n * background display-object.\n *\n * @param {number} val - background alpha\n */\n setBackgroundAlpha(val: number): Widget\n {\n if (!this.background)\n {\n this.setBackground(0xffffff);\n }\n\n this.background.alpha = val;\n\n return this;\n }\n\n /**\n * Set the context-menu to be shown on right-clicks.\n *\n * This feature is not released yet, i.e. does not work!\n *\n * @param menu\n * @alpha\n */\n setContextMenu(menu: Menu): void\n {\n this.contextMenu = menu;\n }\n\n /**\n * @return {number} the elevation set on this widget\n */\n getElevation(): number\n {\n return this._elevation;\n }\n\n /**\n * This can be used add a drop-shadow that will appear to raise this widget by\n * the given elevation against its parent.\n *\n * @param {number} val - elevation to use. 2px is good for most widgets.\n */\n setElevation(val: number): Widget\n {\n this._elevation = val;\n\n if (val === 0 && this._dropShadow)\n {\n if (!this.background)\n {\n return this;\n }\n\n const i = this.background.filters.indexOf(this._dropShadow);\n\n if (i > 0)\n {\n this.background.filters.splice(i, 1);\n }\n }\n else if (val > 0)\n {\n if (!this._dropShadow)\n {\n if (this.background && !this.background.filters)\n {\n this.background.filters = [];\n }\n\n this._dropShadow = new DropShadowFilter({ distance: val });\n\n if (this.background)\n {\n this.background.filters.push(this._dropShadow);\n }\n }\n\n this._dropShadow.distance = val;\n }\n\n return this;\n }\n\n /**\n * Set the style applied on this widget. To unset a style, simply pass {@code null}.\n *\n * @param style\n */\n setStyle(style?: Style): this\n {\n this.style = style;\n this.styleID = -1;\n\n return this;\n }\n\n /**\n * Will trigger a full layout pass next animation frame.\n */\n requestLayout(): void\n {\n this._layoutDirty = true;\n }\n\n /**\n * Adds the widgets as children of this one.\n *\n * @param {PUXI.Widget[]} widgets\n * @returns {Widget} - this widget\n */\n addChild(...widgets: Widget[]): Widget\n {\n for (let i = 0; i < widgets.length; i++)\n {\n const widget = widgets[i];\n\n if (widget.parent)\n {\n widget.parent.removeChild(widget);\n }\n\n widget.parent = this;\n this.contentContainer.addChild(widget.insetContainer);\n this.widgetChildren.push(widget);\n }\n\n return this;\n }\n\n /**\n * Orphans the widgets that are children of this one.\n *\n * @param {PUXI.Widget[]} widgets\n * @returns {Widget} - this widget\n */\n removeChild(...widgets: Widget[]): Widget\n {\n for (let i = 0; i < widgets.length; i++)\n {\n const widget = widgets[i];\n const index = this.widgetChildren.indexOf(widget);\n\n if (index !== -1)\n {\n widget.insetContainer.parent.removeChild(widget.insetContainer);\n this.widgetChildren.splice(index, 1);\n widget.parent = null;\n }\n }\n\n return this;\n }\n\n private openPopupMenu(x: number, y: number): void\n {\n const stage = this.stage;\n const lopt = this.contextPopup.layoutOptions as FastLayoutOptions;\n\n lopt.x = x;\n lopt.y = y;\n\n this.stage.addChild(this.contextPopup);\n }\n\n private closePopupMenu(): void\n {\n this.stage.removeChild(this.contextPopup);\n }\n\n /**\n * Makes this widget `draggable`.\n */\n makeDraggable(): Widget\n {\n this.draggable = true;\n\n if (this.initialized)\n {\n this.initDraggable();\n }\n\n return this;\n }\n\n /**\n * Makes this widget not `draggable`.\n */\n clearDraggable(): void\n {\n if (this.dragInitialized)\n {\n this.dragInitialized = false;\n (this.eventBroker.dnd as DragManager).stopEvent();\n }\n }\n\n /**\n * Widget initialization related to the stage. This method should always call\n * `super.initialize()`.\n *\n * This method expects `stage` to be set before calling it. This is handled\n * by the `Stage` itself.\n *\n * This will set `initialized` to true. If it was already set to true, it _should\n * do nothing_.\n *\n * @protected\n */\n initialize(): void\n {\n if (this.initialized)\n {\n return;\n }\n\n if (this.draggable)\n {\n this.initDraggable();\n }\n if (this.droppable)\n {\n this.initDroppable();\n }\n\n this.initialized = true;\n }\n\n private initDraggable(): void\n {\n if (this.dragInitialized)\n {\n return;\n }\n\n this.dragInitialized = true;\n\n const realPosition = new PIXI.Point();\n const dragPosition = new PIXI.Point();\n\n const dnd: DragManager = this.eventBroker.dnd as DragManager;\n const { insetContainer } = this;\n\n dnd.onDragStart = (e: PIXI.InteractionEvent): void =>\n {\n const added = DragDropController.add(this, e);\n\n if (!this.isDragging && added)\n {\n this.isDragging = true;\n insetContainer.interactive = false;\n realPosition.copyFrom(insetContainer.position);\n\n this.emit('draggablestart', e);\n }\n };\n\n dnd.onDragMove = (e: PIXI.InteractionEvent, offset: PIXI.Point): void =>\n {\n if (this.isDragging)\n {\n dragPosition.set(realPosition.x + offset.x, realPosition.y + offset.y);\n\n insetContainer.x = dragPosition.x;\n insetContainer.y = dragPosition.y;\n\n this.emit('draggablemove', e);\n }\n };\n\n dnd.onDragEnd = (e: PIXI.InteractionEvent): void =>\n {\n if (this.isDragging)\n {\n this.isDragging = false;\n DragDropController.getItem(this);\n\n // Return to container after 0ms if not picked up by a droppable\n setTimeout((): void =>\n {\n this.insetContainer.interactive = true;\n this.insetContainer.position.copyFrom(realPosition);\n\n this.emit('draggableend', e);\n }, 0);\n }\n };\n\n dnd.startEvent()\n }\n\n /**\n * Makes this widget `droppable`.\n */\n makeDroppable(): Widget\n {\n this.droppable = true;\n\n if (this.initialized)\n {\n this.initDroppable();\n }\n\n return this;\n }\n\n protected onDrop: (e: PIXI.interaction.InteractionEvent) => void;\n\n /**\n * Makes this widget not `droppable`.\n */\n clearDroppable(): void\n {\n if (this.dropInitialized)\n {\n this.dropInitialized = false;\n this.contentContainer.removeListener('mouseup', this.onDrop);\n this.contentContainer.removeListener('touchend', this.onDrop);\n }\n }\n\n private initDroppable(): void\n {\n if (!this.dropInitialized)\n {\n this.dropInitialized = true;\n const container = this.contentContainer;\n\n this.contentContainer.interactive = true;\n\n this.onDrop = (event): void =>\n {\n const item = DragDropController.getEventItem(event, this.dropGroup);\n\n if (item && item.isDragging)\n {\n item.isDragging = false;\n item.insetContainer.interactive = true;\n const parent = this.droppableReparent !== null ? this.droppableReparent : self;\n\n parent.container.toLocal(item.container.position, item.container.parent, item);\n if (parent.container != item.container.parent) { parent.addChild(item); }\n }\n };\n\n container.on('mouseup', this.onDrop);\n container.on('touchend', this.onDrop);\n }\n }\n\n /**\n * Creates a widget that holds the display-object as its content. If `content` is\n * a `PUXI.Widget`, then it will be returned.\n * @param {PIXI.Container | Widget} content\n * @static\n */\n static fromContent(content: PIXI.Container | Widget): Widget\n {\n if (content instanceof Widget)\n {\n return content;\n }\n\n const widget = new Widget();\n\n widget.contentContainer.addChild(content);\n\n return widget;\n }\n\n /**\n * Easy utility to resolve measured dimension.\n * @param {number} natural - your widget's natural dimension\n * @param {number} limit - width/height limit passed by parent\n * @param {PUXI.MeasureMode} mode - measurement mode passed by parent\n */\n static resolveMeasuredDimen(natural: number, limit: number, mode: MeasureMode): number\n {\n if (mode === MeasureMode.EXACTLY)\n {\n return limit;\n }\n else if (mode === MeasureMode.AT_MOST)\n {\n return Math.min(limit, natural);\n }\n\n return natural;\n }\n}\n","/**\n * Alignments supported by layout managers in PuxiJS core.\n *\n * @memberof PUXI\n * @enum\n */\nexport enum ALIGN\n{\n LEFT = 0,\n TOP = 0,\n MIDDLE = 0xff1,\n CENTER = 0xff1,\n RIGHT = 0xffff1,\n BOTTOM = 0xffff1,\n NONE = 0xffffffff\n}\n","/**\n * This are the base constraints that you can apply on a `PUXI.Widget` under any\n * layout manager. It specifies the dimensions of a widget, while the position\n * of the widget is left to the parent to decide. If a dimension (width or height)\n * is set to a value between -1 and 1, then it is interpreted as a percentage\n * of the parent's dimension.\n *\n * The following example will render a widget at 50% of the parent's width and 10px height:\n *\n * ```js\n * const widget = new PUXI.Widget();\n * const parent = new PUXI.Widget();\n *\n * widget.layoutOptions = new PUXI.LayoutOptions(\n * .5,\n * 10\n * );\n * parent.addChild(widget);\n * ```\n *\n * @memberof PUXI\n * @class\n */\nexport class LayoutOptions\n{\n public static FILL_PARENT = 0xfffffff1;\n public static WRAP_CONTENT = 0xfffffff2;\n public static MAX_DIMEN = 0xfffffff0;\n\n public static DEFAULT = new LayoutOptions();\n\n public width: number;\n public height: number;\n public cache: any;\n\n private _marginLeft: number;\n private _marginTop: number;\n private _marginRight: number;\n private _marginBottom: number;\n\n /**\n * @param {number}[width = LayoutOptions.WRAP_CONTENT]\n * @param {number}[height = LayoutOptions.WRAP_CONTENT]\n */\n constructor(width: number | string = LayoutOptions.WRAP_CONTENT, height: number | string = LayoutOptions.WRAP_CONTENT)\n {\n this.setWidth(width);\n this.setHeight(height);\n\n /**\n * Used by the layout manager to cache calculations.\n * @member {object}\n */\n this.cache = {};\n }\n\n /**\n * Utility method to store width that converts strings to their number format.\n *\n * @param {number | string} val\n * @example\n * ```\n * lopt.setWidth('68.7%');// 68.7% of parent's width\n * lopt.setWidth('96px');// 96px\n * lopt.setWidth(34);// 34px\n * lopt.setWidth(.45);// 45% of parent's width\n * ```\n */\n setWidth(val: number | string): void\n {\n /**\n * Preferred height of the widget in pixels. If its value is between -1 and 1, it\n * is interpreted as a percentage of the parent's height.\n * @member {number}\n * @default {PUXI.LayoutOptions.WRAP_CONTENT}\n */\n this.width = LayoutOptions.parseDimen(val);\n }\n\n /**\n * Utility method to store height that converts strings to their number format.\n *\n * @param {number | string} val\n * @example\n * ```\n * lopt.setHeight('68.7%');// 68.7% of parent's height\n * lopt.setHeight('96px');// 96px\n * lopt.setHeight(34);// 34px\n * lopt.setHeight(.45);// 45% of parent's height\n * ```\n */\n setHeight(val: number | string): void\n {\n /**\n * Preferred width of the widget in pixels. If its value is between -1 and 1, it\n * is interpreted as a percentage of the parent's width.\n * @member {number}\n * @default {PUXI.LayoutOptions.WRAP_CONTENT}\n */\n this.height = LayoutOptions.parseDimen(val);\n }\n\n /**\n * @member {boolean} - whether the specified width is a constant\n * (not a percentage, `WRAP_CONTENT`, or `FILL_PARENT`)\n */\n get isWidthPredefined(): boolean\n {\n return this.width > 1 && this.width <= LayoutOptions.MAX_DIMEN;\n }\n\n /**\n * @member {boolean} - whether the specified height is a constant\n * (not a percentage, `WRAP_CONTENT`, or `FILL_PARENT`)\n */\n get isHeightPredefined(): boolean\n {\n return this.height > 1 && this.height <= LayoutOptions.MAX_DIMEN;\n }\n\n /**\n * The left margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginLeft(): number\n {\n return this._marginLeft || 0;\n }\n set marginLeft(val: number)\n {\n this._marginLeft = val;\n }\n\n /**\n * This top margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginTop(): number\n {\n return this._marginTop || 0;\n }\n set marginTop(val: number)\n {\n this._marginTop = val;\n }\n\n /**\n * The right margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginRight(): number\n {\n return this._marginRight || 0;\n }\n set marginRight(val: number)\n {\n this._marginRight = val;\n }\n\n /**\n * The bottom margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginBottom(): number\n {\n return this._marginBottom || 0;\n }\n set marginBottom(val: number)\n {\n this._marginBottom = val;\n }\n\n /**\n * @param left\n * @param top\n * @param right\n * @param bottom\n */\n setMargin(left: number, top: number, right: number, bottom: number): void\n {\n this._marginLeft = left;\n this._marginTop = top;\n this._marginRight = right;\n this._marginBottom = bottom;\n }\n\n static parseDimen(val: number | string): number\n {\n if (typeof val === 'string')\n {\n if (val.endsWith('%'))\n {\n val = parseFloat(val.replace('%', '')) / 100;\n }\n else if (val.endsWith('px'))\n {\n val = parseFloat(val.replace('px', ''));\n }\n\n if (typeof val === 'string' || isNaN(val))\n {\n throw new Error('Width could not be parsed!');\n }\n }\n\n return val;\n }\n}\n","import { ALIGN } from './Align';\nimport { LayoutOptions } from './LayoutOptions';\n\ninterface IAnchorLayoutParams\n{\n anchorLeft?: number;\n anchorTop?: number;\n anchorRight?: number;\n anchorBottom?: number;\n horizontalAlign?: ALIGN;\n verticalAlign?: ALIGN;\n width: number | string;\n height: number | string;\n}\n\n/**\n * @memberof PUXI\n * @interface IAnchorLayoutParams\n * @property {number} anchorLeft - distance from parent's left inset to child's left edge\n * @property {number} anchorTop - distance from parent's top inset to child's top edge\n * @property {number} anchorRight - distance from parent's right inset to child's right edge\n * @property {number} anchorBottom - distance from parent's bottom insets to child's bottom edge\n * @property {PUXI.ALIGN} horizontalAlign - horizontal alignment of child in anchor region\n * @property {PUXI.ALIGN} verticalAlign - vertical alignment of child in anchor region\n * @property {number | string} width - requested width of widget (default is `WRAP_CONTENT`)\n * @property {number | string} height - requested height of widget (default is `WRAP_CONTENT`)\n */\n\n/**\n * Anchors the edge of a widget to defined offsets from the parent's insets.\n *\n * The following example will render a widget at (10px, 15%) with a width extending\n * to the parent's center and a height extending till 40px above the parent's bottom\n * inset.\n * ```js\n * new PUXI.AnchoredLayoutOptions({\n * anchorLeft: 10,\n * anchorTop: .15,\n * anchorRight: .5,\n * anchorBottom: 40\n * });\n * ```\n *\n * ### Intra-anchor region alignment\n *\n * You can specify how the widget should be aligned in the intra-anchor region using the\n * `horizontalAlign` and `verticalAlign` properties.\n *\n * ### Support for FILL_PARENT and percentage-of-parent dimensions\n *\n * Anchor layout does not support a width/height that is `LayoutOptions.FILL_PARENT`\n * or a percentage of the parent's width/height. Instead, you can define anchors that\n * result in the equivalent behaviour.\n *\n * @memberof PUXI\n * @extends PUXI.LayoutOptions\n * @class\n */\nexport class AnchorLayoutOptions extends LayoutOptions\n{\n public anchorLeft: number;\n public anchorTop: number;\n public anchorRight: number;\n public anchorBottom: number;\n\n public horizontalAlign: ALIGN;\n public verticalAlign: ALIGN;\n\n constructor(options: IAnchorLayoutParams)\n {\n super(options.width, options.height);\n\n this.anchorLeft = options.anchorLeft || 0;\n this.anchorTop = options.anchorTop || 0;\n this.anchorBottom = options.anchorBottom || 0;\n this.anchorRight = options.anchorRight || 0;\n\n this.horizontalAlign = options.horizontalAlign || ALIGN.LEFT;\n this.verticalAlign = options.verticalAlign || ALIGN.CENTER;\n }\n}\n","import { LayoutOptions } from './LayoutOptions';\nimport * as PIXI from 'pixi.js';\n\nexport interface IFastLayoutParams\n{\n width?: number | string;\n height?: number | string;\n x?: number;\n y?: number;\n anchor?: PIXI.Point;\n}\n\n/**\n * @memberof PUXI\n * @interface\n * @property {number} width\n * @property {number} height\n * @property {number} x\n * @property {number} y\n * @property {PIXI.Point} anchor\n */\n\n/**\n * `PUXI.FastLayoutOptions` is an extension to `PUXI.LayoutOptions` that also\n * defines the x & y coordinates. It is accepted by the stage and `PUXI.FastLayout`.\n *\n * If x or y is between -1 and 1, then that dimension will be interpreted as a\n * percentage of the parent's width or height.\n *\n * @memberof PUXI\n * @extends PUXI.LayoutOptions\n * @class\n */\nexport class FastLayoutOptions extends LayoutOptions\n{\n static DEFAULT_ANCHOR = new PIXI.Point(0, 0);\n static CENTER_ANCHOR = new PIXI.Point(0.5, 0.5);// fragile, shouldn't be modified\n\n x: number;\n y: number;\n anchor: PIXI.Point;\n\n constructor(options: IFastLayoutParams)\n {\n super(options.width, options.height);\n\n /**\n * X-coordinate of the widget in its parent's reference frame. If it is\n * absolutely less than 1, then it will be interpreted as a percent of\n * the parent's width.\n * @member {number}\n * @default 0\n */\n this.x = options.x || 0;\n\n /**\n * Y-coordinate of the widget in its parent's reference frame. If it is\n * absolutely less than 1, then it will be interpreted as a percent of\n * the parent's height.\n * @member {number}\n * @default 0\n */\n this.y = options.y || 0;\n\n /**\n * The anchor is a normalized point telling where the (x,y) position of the\n * widget lies inside of it. By default, it is (0, 0), which means that the\n * top-left corner of the widget will be at (x,y); however, setting it to\n * (.5,.5) will make the _center of the widget_ be at (x,y) in the parent's\n * reference frame.\n * @member {PIXI.Point}\n * @default PUXI.FastLayoutOptions.DEFAULT_ANCHOR\n */\n this.anchor = options.anchor || FastLayoutOptions.DEFAULT_ANCHOR.clone();\n }\n}\n","import { LayoutOptions } from './LayoutOptions';\nimport { ALIGN } from './Align';\n\nexport interface IBorderLayoutParams\n{\n width?: number;\n height?: number;\n region?: number;\n horizontalAlign?: ALIGN;\n verticalAlign?: ALIGN;\n}\n\n/**\n * @memberof PUXI\n * @interface IBorderLayoutParams\n * @property {number} width\n * @property {number} height\n * @property {number} region\n * @property {number} horizontalAlign\n * @property {number} verticalAlign\n */\n\n/**\n * `PUXI.BorderLayoutOptions` defines a simple layout with five regions - the center and\n * four regions along each border. The top and bottom regions span the full width of\n * the parent widget-group. The left and right regions span the height of the layout\n * minus the top and bottom region heights.\n *\n * ```\n * ------------------------------------------------\n * | TOP REGION |\n * ------------------------------------------------\n * | | | |\n * | LEFT | CENTER | RIGHT |\n * | REGION | REGION | REGION |\n * | | | |\n * ------------------------------------------------\n * | BOTTOM REGION |\n * ------------------------------------------------\n * ```\n *\n * The height of the layout is measured as the sum of the heights of the top, center, and bottom\n * regions. Similarly, the width of the layout is measured as the width of the left, center, and\n * right regions.\n *\n * As of now, border layout doesn't support percent widths and heights.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.LayoutOptions\n */\nexport class BorderLayoutOptions extends LayoutOptions\n{\n /**\n * Positions a widget inside the left border of the layout.\n * @static\n * @member {number}\n */\n static REGION_LEFT = 0xeff1;\n\n /**\n * Positions a widget below the top border of the layout.\n * @static\n * @member {number}\n */\n static REGION_TOP = 0xeff2;\n\n /**\n * Positions a widget below the right border of the layout.\n * @static\n * @member {number}\n */\n static REGION_RIGHT = 0xeff3;\n\n /**\n * Positions a widget below the top border of the layout.\n * @static\n * @member {number}\n */\n static REGION_BOTTOM = 0xeff4;\n\n /**\n * Positions a widget in the center of the layout. The main content of the layout\n * should be in the center.\n * @static\n * @member {number}\n */\n static REGION_CENTER = 0xeff5;\n\n region: number;\n horizontalAlign: number;\n verticalAlign: number;\n\n constructor(options: IBorderLayoutParams)\n {\n super(options.width, options.height);\n\n /**\n * The border along which the widget is to be placed. This can be one of `POS_LEFT`,\n * `POS_TOP`, `POS_RIGHT`, `POS_BOTTOM`.\n * @member {number}\n * @default {PUXI.BorderLayoutOptions#REGION_CENTER}\n */\n this.region = options.region || BorderLayoutOptions.REGION_CENTER;\n\n /**\n * Alignment of the widget horizontally in its region.\n * @member {PUXI.ALIGN}\n * @default {PUXI.ALIGN.LEFT}\n */\n this.horizontalAlign = options.horizontalAlign || ALIGN.LEFT;\n\n /**\n * Alignment of the widget vertically in its region.\n * @member {PUXI.ALIGN}\n * @default {PUXI.ALIGN.TOP}\n */\n this.verticalAlign = options.verticalAlign || ALIGN.TOP;\n }\n}\n","import { MeasureMode } from '../IMeasurable';\nimport { ILayoutManager } from './ILayoutManager';\nimport { LayoutOptions, FastLayoutOptions } from '../layout-options';\nimport { WidgetGroup } from '../WidgetGroup';\n\n/**\n * `PUXI.FastLayout` is used in conjunction with `PUXI.FastLayoutOptions`. It is the\n * default layout for most widget groups.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.ILayoutManager\n * @example\n * ```\n * parent.useLayout(new PUXI.FastLayout())\n * ```\n */\nexport class FastLayout implements ILayoutManager\n{\n private host: WidgetGroup;\n private _measuredWidth: number;\n private _measuredHeight: number;\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n }\n\n onLayout(): void\n {\n const parent = this.host;\n const { contentWidth: width, contentHeight: height, widgetChildren: children } = parent;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n\n let x = lopt.x ? lopt.x : 0;\n let y = lopt.y ? lopt.y : 0;\n\n if (Math.abs(x) < 1)\n {\n x *= width;\n }\n if (Math.abs(y) < 1)\n {\n y *= height;\n }\n\n const anchor = lopt.anchor || FastLayoutOptions.DEFAULT_ANCHOR;\n\n const l = x - (anchor.x * widget.getMeasuredWidth());\n const t = y - (anchor.y * widget.getMeasuredHeight());\n\n widget.layout(l, t,\n l + widget.getMeasuredWidth(),\n t + widget.getMeasuredHeight());\n }\n }\n\n onMeasure(maxWidth: number, maxHeight: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n // TODO: Passthrough optimization pass, if there is only one child with FILL_PARENT width or height\n // then don't measure twice.\n\n this._measuredWidth = maxWidth;\n this._measuredHeight = maxHeight;\n\n const children = this.host.widgetChildren;\n\n // Measure children\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n\n const loptWidth = (Math.abs(lopt.width) < 1) ? lopt.width * maxWidth : lopt.width;\n const loptHeight = (Math.abs(lopt.height) < 1) ? lopt.height * maxHeight : lopt.height;\n const widthMeasureMode = this.getChildMeasureMode(lopt.width, widthMode);\n const heightMeasureMode = this.getChildMeasureMode(lopt.height, heightMode);\n\n widget.measure(loptWidth, loptHeight, widthMeasureMode, heightMeasureMode);\n }\n\n this._measuredWidth = this.measureWidthReach(maxWidth, widthMode);\n this._measuredHeight = this.measureHeightReach(maxHeight, heightMode);\n\n this.measureChildFillers();\n }\n\n private getChildMeasureMode(dimen: number, parentMeasureMode: MeasureMode): MeasureMode\n {\n if (dimen === LayoutOptions.WRAP_CONTENT)\n {\n // No MeasureMode.EXACTLY!\n return parentMeasureMode === MeasureMode.UNBOUNDED ? MeasureMode.UNBOUNDED : MeasureMode.AT_MOST;\n }\n\n return parentMeasureMode;\n }\n\n private measureWidthReach(parentWidthLimit: number, widthMode: MeasureMode): number\n {\n if (widthMode === MeasureMode.EXACTLY)\n {\n return parentWidthLimit;\n }\n\n const children = this.host.widgetChildren;\n let measuredWidth = 0;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const childWidth = widget.getMeasuredWidth();\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n const x = lopt.x ? lopt.x : 0;\n const anchor = lopt.anchor ? lopt.anchor : FastLayoutOptions.DEFAULT_ANCHOR;\n\n // If lopt.x is %, then (1 - lopt.x)% of parent width should be as large\n // as (1 - anchor.x)% child's width.\n const minr = (Math.abs(x) < 1 ? (1 - anchor.x) * childWidth / (1 - x) : x + childWidth);\n\n measuredWidth = Math.max(measuredWidth, minr);\n }\n\n if (widthMode === MeasureMode.AT_MOST)\n {\n measuredWidth = Math.min(parentWidthLimit, measuredWidth);\n }\n\n return measuredWidth;\n }\n\n private measureHeightReach(parentHeightLimit: number, heightMode: MeasureMode): number\n {\n if (heightMode === MeasureMode.EXACTLY)\n {\n return parentHeightLimit;\n }\n\n const children = this.host.widgetChildren;\n let measuredHeight = 0;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const childHeight = widget.getMeasuredHeight();\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n const y = lopt.y ? lopt.y : 0;\n const anchor = lopt.anchor ? lopt.anchor : FastLayoutOptions.DEFAULT_ANCHOR;\n\n const minb = (Math.abs(y) < 1 ? (1 - anchor.y) * childHeight / (1 - y) : y + childHeight);\n\n measuredHeight = Math.max(measuredHeight, minb);\n }\n\n if (heightMode === MeasureMode.AT_MOST)\n {\n measuredHeight = Math.min(parentHeightLimit, measuredHeight);\n }\n\n return measuredHeight;\n }\n\n private measureChildFillers(): void\n {\n const children = this.host.widgetChildren;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n let loptWidth = (Math.abs(lopt.width) < 1) ? lopt.width * this._measuredWidth : lopt.width;\n let loptHeight = (Math.abs(lopt.height) < 1) ? lopt.height * this._measuredHeight : lopt.height;\n\n if (loptWidth === LayoutOptions.WRAP_CONTENT)\n {\n loptWidth = widget.getMeasuredWidth();\n }\n if (loptHeight === LayoutOptions.WRAP_CONTENT)\n {\n loptHeight = widget.getMeasuredHeight();\n }\n\n if (lopt.width === LayoutOptions.FILL_PARENT || lopt.height === LayoutOptions.FILL_PARENT)\n {\n widget.measure(\n lopt.width === LayoutOptions.FILL_PARENT ? this._measuredWidth : loptWidth,\n lopt.height === LayoutOptions.FILL_PARENT ? this._measuredHeight : loptHeight,\n MeasureMode.EXACTLY,\n MeasureMode.EXACTLY,\n );\n }\n }\n }\n\n getMeasuredWidth(): number\n {\n return this._measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this._measuredHeight;\n }\n}\n","import { Widget } from './Widget';\nimport { ILayoutManager } from './layout-manager/ILayoutManager';\nimport { MeasureMode } from './IMeasurable';\nimport { FastLayout } from './layout-manager/FastLayout';\n\n/**\n * A widget group is a layout owner that can position its children according\n * to the layout given to it.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n * @example\n * ```\n * const group = new PUXI.InteractiveGroup();\n *\n * group.useLayout(new PUXI.AnchorLayout());\n *\n * group.addChild(new PUXI.Button({ text: \"Hey\" })\n * .setLayoutOptions(\n * new PUXI.AnchorLayoutOptions({\n * anchorLeft: 100,\n * anchorTop: 300,\n * anchorRight: .4,\n * anchorBottom: 500,\n * horizontalAlign: PUXI.ALIGN.CENTER\n * })\n * )\n * )\n * ```\n */\nexport class WidgetGroup extends Widget\n{\n public layoutMgr: ILayoutManager;// lazily initialized (via useLayout(), useDefaultLayout())\n\n /**\n * Will set the given layout-manager to be used for positioning child widgets.\n *\n * @param {PUXI.ILayoutManager} layoutMgr\n */\n useLayout(layoutMgr: ILayoutManager): WidgetGroup\n {\n if (this.layoutMgr)\n {\n this.layoutMgr.onDetach();\n }\n\n this.layoutMgr = layoutMgr;\n\n if (layoutMgr)\n {\n this.layoutMgr.onAttach(this);\n }\n\n return this;\n }\n\n /**\n * Sets the widget-recommended layout manager. By default (if not overriden by widget\n * group class), this is a fast-layout.\n */\n useDefaultLayout(): void\n {\n this.useLayout(new FastLayout());\n }\n\n onMeasure(width: number, height: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n super.onMeasure(width, height, widthMode, heightMode);\n\n if (this.widgetChildren.length === 0)\n {\n return;\n }\n if (!this.layoutMgr)\n {\n this.useDefaultLayout();\n }\n\n this.layoutMgr.onMeasure(width - this.paddingHorizontal, height - this.paddingVertical, widthMode, heightMode);\n\n this._measuredWidth = Math.max(this.measuredWidth, this.layoutMgr.getMeasuredWidth());\n this._measuredHeight = Math.max(this.measuredHeight, this.layoutMgr.getMeasuredHeight());\n }\n\n onLayout(l: number, t: number, r: number, b: number, dirty = true): void\n {\n super.onLayout(l, t, r, b, dirty);\n\n if (this.widgetChildren.length === 0)\n {\n return;\n }\n if (!this.layoutMgr)\n {\n this.useDefaultLayout();\n }\n\n this.layoutMgr.onLayout();// layoutMgr is attached to this\n }\n}\n","import { WidgetGroup } from './WidgetGroup';\nimport * as PIXI from 'pixi.js';\n\n/**\n * An interactive container.\n *\n * @class\n * @extends PUXI.WidgetGroup\n * @memberof PUXI\n */\nexport class InteractiveGroup extends WidgetGroup\n{\n private hitArea: PIXI.Rectangle;\n\n constructor()\n {\n super();\n this.hitArea = new PIXI.Rectangle();\n this.insetContainer.hitArea = this.hitArea;\n }\n\n update(): void\n {\n super.update();\n }\n\n layout(l: number, t: number, r: number, b: number, dirty: boolean): void\n {\n super.layout(l, t, r, b, dirty);\n\n this.hitArea.width = this.width;\n this.hitArea.height = this.height;\n }\n}\n\n","import * as PIXI from 'pixi.js';\nimport { TabGroup, FocusController } from './ctl/FocusController';\nimport { InteractiveGroup } from './InteractiveGroup';\nimport { IFocusable } from './IFocusable';\n\n/**\n * @namespace PUXI\n * @interface\n * @property {PIXI.Container}[background]\n * @property {number}[tabIndex]\n * @property {PUXI.TabGroup}[tabGroup]\n */\nexport interface IFocusableOptions\n{\n background?: PIXI.Container;\n tabIndex?: number;\n tabGroup?: any;\n focusController?: FocusController;\n}\n\n/**\n * Represents a view that can gain or loose focus. It is primarily subclassed by\n * input/form widgets.\n *\n * Generally, it is a good idea not use layouts on these types of widgets.\n *\n * @class\n * @extends PUXI.Widget\n * @memberof PUXI\n */\nexport abstract class FocusableWidget extends InteractiveGroup implements IFocusable\n{\n _isFocused: boolean;\n _isMousePressed: boolean;\n _focusController: FocusController;\n\n tabIndex: number;\n tabGroup: TabGroup;\n\n\n /**\n * @param {PUXI.IInputBaseOptions} options\n * @param {PIXI.Container}[options.background]\n * @param {number}[options.tabIndex]\n * @param {any}[options.tabGroup]\n */\n constructor(options: IFocusableOptions = {})\n {\n super();\n\n if (options.background)\n {\n super.setBackground(options.background);\n }\n\n // for detached context (from stage)\n if (options.focusController)\n {\n this._focusController = options.focusController\n }\n\n // Prevents double focusing/blurring.\n this._isFocused = false;\n\n // Used to lose focus when mouse-down outside widget.\n this._isMousePressed = false;\n\n this.interactive = true;\n\n /**\n * @member {number}\n * @readonly\n */\n this.tabIndex = options.tabIndex;\n\n /**\n * The name of the tab group in which this widget's focus will move on\n * pressing tab.\n * @member {PUXI.TabGroup}\n * @readonly\n */\n this.tabGroup = options.tabGroup;\n\n this.insetContainer.on('pointerdown', (ev: PIXI.interaction.InteractionEvent) =>\n {\n this.focus(ev);\n this._isMousePressed = true;\n });\n\n this.insetContainer.on('pointerup', () => { this._isMousePressed = false; });\n this.insetContainer.on('pointerupoutside', () => { this._isMousePressed = false; });\n }\n\n /**\n * Brings this widget into focus.\n */\n focus(ev?: PIXI.interaction.InteractionEvent): void\n {\n if (this.isFocused)\n {\n return;\n }\n\n this.focusController.notifyFocus(this);\n\n this._isFocused = true;\n this.bindEvents();\n\n this.emit('focusChanged', true);\n this.emit('focus');\n }\n\n /**\n * Brings this widget out of focus.\n */\n blur(): void\n {\n if (!this._isFocused)\n {\n return;\n }\n\n this.focusController.notifyBlur();\n\n this._isFocused = false;\n this.clearEvents();\n\n this.emit('focusChanged', false);\n this.emit('blur');\n }\n\n /**\n * Whether this widget is in focus.\n * @member {boolean}\n * @readonly\n */\n get isFocused(): boolean\n {\n return this._isFocused;\n }\n\n private bindEvents = (): void =>\n {\n this.stage.on('pointerdown', this.onDocumentPointerDownImpl);\n document.addEventListener('keydown', this.onKeyDownImpl);\n };\n\n private clearEvents = (): void =>\n {\n this.stage.off('pointerdown', this.onDocumentPointerDownImpl);\n document.removeEventListener('keydown', this.onKeyDownImpl);\n };\n\n protected onKeyDownImpl = (e: any): void =>\n {\n const focusCtl = this.stage.focusController;\n\n if (e.which === 9 && focusCtl.useTab)\n {\n focusCtl.onTab();\n e.preventDefault();\n }\n else if (e.which === 38 && focusCtl.useBack)\n {\n focusCtl.onBack();\n e.preventDefault();\n }\n else if (e.which === 40 && focusCtl.useForward)\n {\n focusCtl.onForward();\n e.preventDefault();\n }\n\n this.emit('keydown');\n };\n\n private onDocumentPointerDownImpl = (): void =>\n {\n if (!this._isMousePressed)\n {\n this.blur();\n }\n };\n\n initialize(): void\n {\n super.initialize();\n this.focusController.in(this, this.tabIndex, this.tabGroup);\n }\n\n /**\n * Fired when the widget comes into focus.\n * @event focus\n */\n\n /**\n * Fired when the widget goes out of focus.\n * @event blur\n */\n\n /**\n * Fired when the widgets comes into or goes out of focus.\n * @event focusChanged\n * @param {boolean} isFocused - whether the widget is in focus.\n */\n\n protected get focusController() {\n return this._focusController || this.stage.focusController\n }\n}\n","import { Widget, TEXT_STYLE_PROPERTIES } from './Widget';\nimport * as PIXI from 'pixi.js';\nimport { Style } from './Style';\n\n/**\n * A static text widget. It cannot retain children.\n *\n * @memberof PUXI\n * @public\n */\nexport class TextWidget extends Widget\n{\n public textDisplay: PIXI.Text;\n\n /**\n * @param {string} text - text content\n * @param {PIXI.TextStyle} textStyle - styled used for text\n */\n constructor(text: string, textStyle?: PIXI.TextStyle)\n {\n super();\n\n this.textDisplay = new PIXI.Text(text, textStyle);\n this.contentContainer.addChild(this.textDisplay);\n }\n\n update(): void\n {\n super.update();\n\n const fill = this.textDisplay.style.fill\n if (!this.tint && typeof(fill) == \"string\" && fill.startsWith(\"#\")) {\n this.tint = parseInt(fill.slice(1), 16)\n }\n\n if (this.tint !== null)\n {\n this.textDisplay.tint = this.tint;\n this.textDisplay.style.fill = this.tint;\n }\n\n if (this.blendMode !== null)\n {\n this.textDisplay.blendMode = this.blendMode;\n }\n }\n\n /**\n * @deprecated\n */\n get value(): string\n {\n return this.textDisplay.text;\n }\n set value(val: string)\n {\n this.textDisplay.text = val;\n }\n\n get text(): string\n {\n return this.value;\n }\n set text(val: string)\n {\n this.value = val;\n }\n\n /**\n * Get the text style. You can set properties directly on the style.\n */\n getTextStyle(): PIXI.TextStyle\n {\n return this.textDisplay.style;\n }\n\n /**\n * Set the text style directly\n *\n * @param textStyle\n * @example\n * textWidget.setTextStyle({\n * fontFamily: 'Roboto',\n * fontSize: 14\n * })\n */\n setTextStyle(textStyle: PIXI.TextStyle): this\n {\n this.textDisplay.style = textStyle;\n\n return this;\n }\n\n protected onStyleChange(style: Style): void\n {\n super.onStyleChange(style);\n\n const styleData = style.getProperties(...TEXT_STYLE_PROPERTIES);\n const textStyle = this.textDisplay.style;\n\n TEXT_STYLE_PROPERTIES.forEach((propName: string) =>\n {\n if (styleData[propName] !== undefined)\n {\n textStyle[propName] = styleData[propName];\n }\n });\n }\n}\n","import { ClickManager } from './event/ClickManager';\nimport { FocusableWidget, IFocusableOptions } from './FocusableWidget';\nimport { TextWidget } from './TextWidget';\nimport * as PIXI from 'pixi.js';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { Style } from './Style';\n\n/**\n * @memberof PUXI\n * @interface\n * @extends PUXI.IFocusableOptions\n * @property {PUXI.TextWidget | string} text\n */\nexport interface IButtonOptions extends IFocusableOptions\n{\n background?: PIXI.Container;\n text?: TextWidget | string;\n tabIndex?: number;\n tabGroup?: any;\n}\n\n/**\n * Button that can be clicked.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.FocusableWidget\n */\nexport class Button extends FocusableWidget\n{\n isHover: boolean;\n\n protected textWidget: TextWidget;\n\n click: () => void;\n /**\n * @param [options.background}] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for Button\n * @param [options.text=null] {PIXI.UI.Text} optional text\n * @param [options.tabIndex=0] {Number} input tab index\n * @param [options.tabGroup=0] {Number|String} input tab group\n * @param [options.width=options.background.width] {Number|String} width\n * @param [options.height=options.background.height] {Number|String} height\n */\n constructor(options: IButtonOptions)\n {\n super(options);\n\n this.isHover = false;\n\n if (typeof options.text === 'string')\n {\n options.text = new TextWidget(options.text, new PIXI.TextStyle());\n }\n\n this.textWidget = options.text.setLayoutOptions(\n new FastLayoutOptions({\n width: LayoutOptions.WRAP_CONTENT,\n height: LayoutOptions.WRAP_CONTENT,\n x: 0.5,\n y: 0.5,\n anchor: FastLayoutOptions.CENTER_ANCHOR,\n }),\n ) as TextWidget;\n\n if (this.textWidget)\n {\n this.addChild(this.textWidget);\n }\n\n this.contentContainer.buttonMode = true;\n }\n\n onClick(e: PIXI.InteractionEvent): void\n {\n super.onClick(e);\n\n this.emit('click', e);\n }\n\n onDoubleClick(e: PIXI.InteractionEvent): void\n {\n super.onDoubleClick(e);\n\n this.emit('doubleclick', e);\n }\n\n update(): void\n {\n super.update();\n // No update needed\n }\n\n initialize(): void\n {\n super.initialize();\n\n this.insetContainer.interactiveChildren = false;\n // lazy to make sure all children is initialized (trying to get the bedst hitArea possible)\n }\n\n /**\n * Label for this button.\n * @member {string}\n */\n get value(): string\n {\n if (this.textWidget)\n {\n return this.textWidget.text;\n }\n\n return '';\n }\n set value(val: string)\n {\n if (this.textWidget)\n {\n this.textWidget.text = val;\n }\n }\n\n get text(): any\n {\n return this.textWidget;\n }\n set text(val: any)\n {\n this.value = val;\n }\n\n onStyleChange(style: Style): void\n {\n // eslint-disable-next-line\n // @ts-ignore\n this.textWidget.onStyleChange(style);\n }\n}\n\n/*\n * Features:\n * Button, radio button (checkgroups)\n *\n * Methods:\n * blur()\n * focus()\n *\n * Properties:\n * checked: get/set Button checked\n * value: get/set Button value\n *\n * Events:\n * \"hover\" param: [bool]isHover (hover/leave)\n * \"press\" param: [bool]isPressed (pointerdown/pointerup)\n * \"click\"\n * \"blur\"\n * \"focus\"\n * \"focusChanged\" param: [bool]isFocussed\n *\n */\n","import { FocusableWidget, IFocusableOptions } from './FocusableWidget';\nimport { ClickManager } from './event/ClickManager';\nimport { InteractiveGroup } from './InteractiveGroup';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { CheckGroup } from './ctl';\nimport { TextWidget } from './TextWidget';\n\ninterface ICheckBoxOptions extends IFocusableOptions\n{\n checked?: boolean;\n background: PIXI.Container;\n checkmark?: PIXI.Container;\n checkGroup?: CheckGroup;\n value?: string;\n tabIndex?: number;\n tabGroup?: number;\n}\n\n/**\n * @memberof PUXI\n * @extends PUXI.IFocusableOptions\n * @member {boolean} checked\n * @member {PIXI.Container}[checkmark]\n * @member {PUXI.CheckGroup}[checkGroup]\n * @member {string}[value]\n */\n\n/**\n * A checkbox is a button can be selected (checked). It has a on/off state that\n * can be controlled by the user.\n *\n * When used in a checkbox group, the group will control whether the checkbox can\n * be selected or not.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.FocusableWidget\n */\nexport class CheckBox extends FocusableWidget\n{\n private _checked: boolean;\n private _value: string;\n\n private label: TextWidget;\n private checkmark: InteractiveGroup;\n\n checkGroup: CheckGroup;\n\n /**\n * @param {PUXI.ICheckBoxOptions} options\n * @param [options.checked=false] {bool} is checked\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for CheckBox\n * @param options.checkmark {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as checkmark for CheckBox\n * @param {PUXI.CheckGroup}[options.checkGroup=null] CheckGroup name\n * @param options.value {String} mostly used along with checkgroup\n * @param [options.tabIndex=0] {Number} input tab index\n * @param [options.tabGroup=0] {Number|String} input tab group\n */\n constructor(options: ICheckBoxOptions)\n {\n super(options);\n this._checked = options.checked !== undefined ? options.checked : false;\n this._value = options.value || '';\n this.checkGroup = options.checkGroup || null;\n\n this.checkmark = new InteractiveGroup();\n this.checkmark.contentContainer.addChild(options.checkmark);\n this.checkmark.setLayoutOptions(\n new FastLayoutOptions({\n width: LayoutOptions.WRAP_CONTENT,\n height: LayoutOptions.WRAP_CONTENT,\n x: 0.5,\n y: 0.5,\n anchor: FastLayoutOptions.CENTER_ANCHOR,\n }),\n );\n this.checkmark.alpha = this._checked ? 1 : 0;\n this.addChild(this.checkmark);\n\n this.contentContainer.buttonMode = true;\n }\n\n update(): void\n {\n // No need for updating\n }\n\n get checked(): boolean\n {\n return this._checked;\n }\n set checked(val: boolean)\n {\n if (val !== this._checked)\n {\n if (this.checkGroup !== null && val)\n {\n this.stage.checkBoxGroupController.notifyCheck(this);\n }\n\n this._checked = val;\n this.change(val);\n }\n }\n\n get value(): string\n {\n return this._value;\n }\n set value(val: string)\n {\n this._value = val;\n\n if (this.checked)\n {\n this.stage.checkBoxGroupController.notifyCheck(this);\n }\n }\n\n get selectedValue(): string\n {\n return this.stage\n ?.checkBoxGroupController\n .getSelected(this.checkGroup)\n .value;\n }\n\n initialize(): void\n {\n super.initialize();\n\n const clickMgr = (this.eventBroker.click as ClickManager);\n\n clickMgr.onHover = (_, over): void =>\n {\n this.emit('hover', over);\n };\n\n clickMgr.onPress = (e, isPressed): void =>\n {\n if (isPressed)\n {\n this.focus();\n e.data.originalEvent.preventDefault();\n }\n\n this.emit('press', isPressed);\n };\n\n clickMgr.onClick = (): void =>\n {\n this.click();\n };\n\n if (this.checkGroup !== null)\n {\n this.stage.checkBoxGroupController.in(this, this.checkGroup);\n }\n }\n\n protected change = (val: boolean): void =>\n {\n if (this.checkmark)\n {\n this.checkmark.alpha = val ? 1 : 0;\n }\n };\n\n protected click = (): void =>\n {\n this.emit('click');\n\n if (this.checkGroup !== null && this.checked)\n {\n return;\n }\n\n this.checked = !this.checked;\n this.emit('changed', this.checked);\n };\n\n /**\n * This event is fired when the user's cursor hovers over this checkbox.\n * @event hover\n */\n\n /**\n * This event is fired when the user clicks on the checkbox, regardless of whether\n * the checkbox was selected or deselected.\n * @event click\n */\n\n /**\n * This event is fired when the user selects/deselects the checkbox, i.e. the \"value\"\n * of the checkbox changes. This is also fired when setting the `checked` property\n * directly.\n * @event changed\n * @param {boolean} checked - whether the checkbox is checked\n */\n}\n\n/*\n * Features:\n * checkbox, radio button (checkgroups)\n *\n * Methods:\n * blur()\n * focus()\n * change(checked) //only exposed to overwrite (if you dont want to hard toggle alpha of checkmark)\n *\n * Properties:\n * checked: get/set checkbox checked\n * value: get/set checkbox value\n * selectedValue: get/set selected value for checkgroup\n *\n * Events:\n * \"hover\" param: [bool]isHover (hover/leave)\n * \"press\" param: [bool]isPressed (pointerdown/pointerup)\n * \"click\"\n * \"blur\"\n * \"focus\"\n * \"focusChanged\" param: [bool]isFocussed\n * \"change\" param: [bool]isChecked\n *\n */\n","class EaseBase\n{\n getPosition(p)\n {\n return p;\n }\n}\n\nexport { EaseBase };\n","import { EaseBase } from './EaseBase';\n\nfunction ExponentialEase(power, easeIn, easeOut)\n{\n const pow = power;\n const t = easeIn && easeOut ? 3 : easeOut ? 1 : 2;\n\n this.getPosition = function (p)\n {\n let r = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\n if (pow === 1)\n {\n r *= r;\n }\n else if (pow === 2)\n {\n r *= r * r;\n }\n else if (pow === 3)\n {\n r *= r * r * r;\n }\n else if (pow === 4)\n {\n r *= r * r * r * r;\n }\n\n return (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n };\n}\n\nExponentialEase.prototype = Object.create(EaseBase.prototype);\nExponentialEase.prototype.constructor = ExponentialEase;\n\nexport { ExponentialEase };\n\n","import { EaseBase } from './EaseBase';\nimport { ExponentialEase } from './ExponentialEase';\n\nconst Ease = {};\n\nconst HALF_PI = Math.PI * 0.5;\n\nexport function create(fn)\n{\n const e = Object.create(EaseBase.prototype);\n\n e.getPosition = fn;\n\n return e;\n}\n\nconst Linear = new EaseBase();\n\n// Liear\nEase.Linear = Linear;\n\n// Exponetial Eases\nexport function wrapEase(easeInFunction, easeOutFunction, easeInOutFunction)\n{\n return {\n easeIn: easeInFunction,\n easeOut: easeOutFunction,\n easeInOut: easeInOutFunction,\n };\n}\n\nEase.Power0 = {\n easeNone: Linear,\n};\n\nEase.Power1 = Ease.Quad = wrapEase(\n new ExponentialEase(1, 1, 0),\n new ExponentialEase(1, 0, 1),\n new ExponentialEase(1, 1, 1));\n\nEase.Power2 = Ease.Cubic = wrapEase(\n new ExponentialEase(2, 1, 0),\n new ExponentialEase(2, 0, 1),\n new ExponentialEase(2, 1, 1));\n\nEase.Power3 = Ease.Quart = wrapEase(\n new ExponentialEase(3, 1, 0),\n new ExponentialEase(3, 0, 1),\n new ExponentialEase(3, 1, 1));\n\nEase.Power4 = Ease.Quint = wrapEase(\n new ExponentialEase(4, 1, 0),\n new ExponentialEase(4, 0, 1),\n new ExponentialEase(4, 1, 1));\n\n// Bounce\nEase.Bounce = {\n BounceIn: create(function (p)\n {\n if ((p = 1 - p) < 1 / 2.75)\n {\n return 1 - (7.5625 * p * p);\n }\n else if (p < 2 / 2.75)\n {\n return 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\n }\n else if (p < 2.5 / 2.75)\n {\n return 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\n }\n\n return 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\n }),\n BounceOut: create(function (p)\n {\n if (p < 1 / 2.75)\n {\n return 7.5625 * p * p;\n }\n else if (p < 2 / 2.75)\n {\n return 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n }\n else if (p < 2.5 / 2.75)\n {\n return 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n }\n\n return 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n }),\n BounceInOut: create(function (p)\n {\n const invert = (p < 0.5);\n\n if (invert)\n {\n p = 1 - (p * 2);\n }\n else\n {\n p = (p * 2) - 1;\n }\n if (p < 1 / 2.75)\n {\n p = 7.5625 * p * p;\n }\n else if (p < 2 / 2.75)\n {\n p = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n }\n else if (p < 2.5 / 2.75)\n {\n p = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n }\n else\n {\n p = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n }\n\n return invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\n }),\n};\n\n// Circ\nEase.Circ = {\n CircIn: create(function (p)\n {\n return -(Math.sqrt(1 - (p * p)) - 1);\n }),\n CircOut: create(function (p)\n {\n return Math.sqrt(1 - (p = p - 1) * p);\n }),\n CircInOut: create(function (p)\n {\n return ((p *= 2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\n }),\n};\n\n// Expo\nEase.Expo = {\n ExpoIn: create(function (p)\n {\n return Math.pow(2, 10 * (p - 1)) - 0.001;\n }),\n ExpoOut: create(function (p)\n {\n return 1 - Math.pow(2, -10 * p);\n }),\n ExpoInOut: create(function (p)\n {\n return ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n }),\n};\n\n// Sine\nEase.Sine = {\n SineIn: create(function (p)\n {\n return -Math.cos(p * HALF_PI) + 1;\n }),\n SineOut: create(function (p)\n {\n return Math.sin(p * HALF_PI);\n }),\n SineInOut: create(function (p)\n {\n return -0.5 * (Math.cos(Math.PI * p) - 1);\n }),\n};\n\nexport { Ease };\n","export const Helpers = {\n Lerp(start: number, stop: number, amt: number): number\n {\n if (amt > 1) amt = 1;\n else if (amt < 0) amt = 0;\n\n return start + (stop - start) * amt;\n },\n Round(number: number, decimals: number): number\n {\n const pow = Math.pow(10, decimals);\n\n return Math.round(number * pow) / pow;\n },\n componentToHex(c: any): string\n {\n const hex = c.toString(16);\n\n return hex.length == 1 ? `0${hex}` : hex;\n },\n rgbToHex(r: number, g: number, b: number): string\n {\n return `#${this.componentToHex(r)}${this.componentToHex(g)}${this.componentToHex(b)}`;\n },\n rgbToNumber(r: number, g: number, b: number): number\n {\n return r * 65536 + g * 256 + b;\n },\n numberToRgb(c: number): any\n {\n return {\n r: Math.floor(c / (256 * 256)),\n g: Math.floor(c / 256) % 256,\n b: c % 256,\n };\n },\n hexToRgb(hex: any): any\n {\n if (hex === null)\n {\n hex = 0xffffff;\n }\n if (!isNaN(hex))\n {\n return this.numberToRgb(hex);\n }\n\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n\n hex = hex.replace(shorthandRegex, function (m, r, g, b)\n {\n return r + r + g + g + b + b;\n });\n\n const result = (/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i).exec(hex);\n\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n } : null;\n },\n};\n","import { Widget } from './Widget';\nimport * as PIXI from 'pixi.js';\n\n/**\n * An UI sprite object\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n */\nexport class Sprite extends Widget\n{\n private spriteDisplay: PIXI.Sprite;\n\n constructor(texture: PIXI.Texture)\n {\n super();\n\n this.spriteDisplay = new PIXI.Sprite(texture);\n this.contentContainer.addChild(this.spriteDisplay);\n }\n\n update(): void\n {\n if (this.tint !== null)\n {\n this.spriteDisplay.tint = this.tint;\n }\n\n if (this.blendMode !== null)\n {\n this.spriteDisplay.blendMode = this.blendMode;\n }\n }\n\n static fromImage(imageUrl): Sprite\n {\n return new Sprite(new PIXI.Texture(new PIXI.BaseTexture(imageUrl)));\n }\n}\n\nexport type ImageWidget = Sprite;\nexport const ImageWidget = Sprite;\n","import { ILayoutManager } from './ILayoutManager';\nimport { Widget } from '../Widget';\nimport { AnchorLayoutOptions, ALIGN, LayoutOptions } from '../layout-options';\nimport { MeasureMode } from '../IMeasurable';\nimport { WidgetGroup } from '../WidgetGroup';\n\ninterface IAnchorCache {\n remeasure: boolean;\n}\n\n/**\n * `AnchorLayout` is used in conjunction with `AnchorLayoutOptions`.\n *\n * @memberof PUXI\n * @class\n * @example\n * ```\n * parent.useLayout(new PUXI.AnchorLayout());\n * ```\n */\nexport class AnchorLayout implements ILayoutManager\n{\n private measuredWidth: number;\n private measuredHeight: number;\n\n private host: WidgetGroup;\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n }\n\n onLayout(): void\n {\n const parent = this.host;\n const { widgetChildren } = parent;\n\n const parentWidth = parent.contentWidth;\n const parentHeight = parent.contentHeight;\n\n for (let i = 0; i < widgetChildren.length; i++)\n {\n const child = widgetChildren[i];\n const layoutOptions = (child.layoutOptions || {}) as AnchorLayoutOptions;\n\n const childWidth = child.getMeasuredWidth();\n const childHeight = child.getMeasuredHeight();\n const anchorLeft = this.calculateAnchor(layoutOptions.anchorLeft || 0, parentWidth, false);\n const anchorTop = this.calculateAnchor(layoutOptions.anchorTop || 0, parentHeight, false);\n const anchorRight = this.calculateAnchor(layoutOptions.anchorRight || 0, parentWidth, true);\n const anchorBottom = this.calculateAnchor(layoutOptions.anchorBottom || 0, parentHeight, true);\n\n let x = anchorLeft;\n let y = anchorTop;\n\n switch (layoutOptions.horizontalAlign)\n {\n case ALIGN.MIDDLE:\n x = (anchorRight + anchorLeft - childWidth) / 2;\n break;\n case ALIGN.RIGHT:\n x = anchorRight - childWidth;\n break;\n }\n\n switch (layoutOptions.verticalAlign)\n {\n case ALIGN.MIDDLE:\n y = (anchorBottom + anchorTop - childHeight) / 2;\n break;\n case ALIGN.BOTTOM:\n y = anchorBottom - childHeight;\n break;\n }\n\n child.layout(x, y, x + childWidth, y + childHeight);\n }\n }\n\n onMeasure(widthLimit: number, heightLimit: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n const children = this.host.widgetChildren;\n\n let naturalWidth = 0;\n let naturalHeight = 0;\n\n const baseWidthMode = widthMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n const baseHeightMode = heightMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : heightMode;\n\n let hasFillers = false;\n\n // First pass: measure children and find our natural width/height. If we have a upper\n // limit, then pass that on.\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as AnchorLayoutOptions;\n\n if (lopt.width === LayoutOptions.FILL_PARENT)\n {\n throw new Error('AnchorLayout does not support width = FILL_PARENT. Use anchorLeft = 0 & anchorRight = 0');\n }\n if (lopt.height === LayoutOptions.FILL_PARENT)\n {\n throw new Error('AnchorLayout does not support height = FILL_PARENT. Use anchorTop = 0 & anchorBottom = 0');\n }\n\n const anchorLeft = this.calculateAnchor(lopt.anchorLeft || 0, widthLimit, false);\n const anchorTop = this.calculateAnchor(lopt.anchorTop || 0, heightLimit, false);\n const anchorRight = this.calculateAnchor(lopt.anchorRight || 0, widthLimit, true);\n const anchorBottom = this.calculateAnchor(lopt.anchorBottom || 0, heightLimit, true);\n\n // Does child have a pre-determined width or height?\n const widthConst = lopt.isWidthPredefined;\n const heightConst = lopt.isHeightPredefined;\n const widgetWidthLimit = widthConst ? lopt.width : anchorRight - anchorLeft;\n const widgetHeightLimit = heightConst ? lopt.height : anchorBottom - anchorTop;\n\n const widgetWidthMode = widthConst ? MeasureMode.EXACTLY : baseWidthMode;\n const widgetHeightMode = heightConst ? MeasureMode.EXACTLY : baseHeightMode;\n\n // Fillers need to be remeasured using EXACTLY.\n hasFillers = hasFillers || lopt.width === 0 || lopt.height === 0;\n\n widget.measure(widgetWidthLimit, widgetHeightLimit, widgetWidthMode, widgetHeightMode);\n\n const horizontalReach = this.calculateReach(\n lopt.anchorLeft || 0, lopt.anchorRight || 0, widget.getMeasuredWidth());\n const verticalReach = this.calculateReach(\n lopt.anchorTop || 0, lopt.anchorBottom || 0, widget.getMeasuredHeight());\n\n naturalWidth = Math.max(naturalWidth, horizontalReach);\n naturalHeight = Math.max(naturalHeight, verticalReach);\n }\n\n this.measuredWidth = Widget.resolveMeasuredDimen(naturalWidth, widthLimit, widthMode);\n this.measuredHeight = Widget.resolveMeasuredDimen(naturalHeight, heightLimit, heightMode);\n\n if (!hasFillers)\n {\n return;\n }\n\n // Handle fillers.\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as AnchorLayoutOptions;\n\n if (lopt.width === 0 || lopt.height === 0)\n {\n const anchorLeft = this.calculateAnchor(lopt.anchorLeft || 0, this.measuredWidth, false);\n const anchorTop = this.calculateAnchor(lopt.anchorTop || 0, this.measuredHeight, false);\n const anchorRight = this.calculateAnchor(lopt.anchorRight || 0, this.measuredWidth, true);\n const anchorBottom = this.calculateAnchor(lopt.anchorBottom || 0, this.measuredHeight, true);\n\n widget.measure(\n lopt.isWidthPredefined ? lopt.width : anchorRight - anchorLeft,\n lopt.isHeightPredefined ? lopt.height : anchorBottom - anchorTop,\n lopt.width === 0 || lopt.isWidthPredefined ? MeasureMode.EXACTLY : MeasureMode.AT_MOST,\n lopt.height === 0 || lopt.isHeightPredefined ? MeasureMode.EXACTLY : MeasureMode.AT_MOST,\n );\n }\n }\n }\n\n getMeasuredWidth(): number\n {\n return this.measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this.measuredHeight;\n }\n\n /**\n * Calculates the actual value of the anchor, given the parent's dimension.\n *\n * @param {number} anchor - anchor as given in layout options\n * @param {number} limit - parent's dimension\n * @param {boolean} limitSubtract - true for right/bottom anchors, false for left/top\n */\n protected calculateAnchor(anchor: number, limit: number, limitSubtract: boolean): number\n {\n const offset = Math.abs(anchor) < 1 ? anchor * limit : anchor;\n\n return limitSubtract ? limit - offset : offset;\n }\n\n /**\n * Calculates the \"reach\" of a child widget, which is the minimum dimension of\n * the parent required to fully fit the child.\n *\n * @param {number} startAnchor - left or top anchor as given in layout options\n * @param {number} endAnchor - right or bottom anchor as given in layout options\n * @param {number} dimen - measured dimension of the widget (width or height)\n */\n protected calculateReach(startAnchor: number, endAnchor: number, dimen: number): number\n {\n if (Math.abs(startAnchor) < 1 && Math.abs(endAnchor) < 1)\n {\n return dimen / (1 - endAnchor - startAnchor);\n }\n else if (Math.abs(startAnchor) < 1)\n {\n return (endAnchor + dimen) / (1 - startAnchor);\n }\n else if (Math.abs(endAnchor) < 1)\n {\n return (startAnchor + dimen) / (1 - endAnchor);\n }\n\n return startAnchor + dimen + endAnchor;\n }\n}\n","import { ILayoutManager } from './ILayoutManager';\nimport { WidgetGroup } from '../WidgetGroup';\nimport { Widget } from '../Widget';\nimport { LayoutOptions, ALIGN } from '../layout-options';\nimport { BorderLayoutOptions } from '../layout-options/BorderLayoutOptions';\nimport { MeasureMode } from '../IMeasurable';\n\nconst {\n REGION_LEFT,\n REGION_TOP,\n REGION_RIGHT,\n REGION_BOTTOM,\n REGION_CENTER,\n} = BorderLayoutOptions;\n\nconst {\n FILL_PARENT,\n} = LayoutOptions;\n\nconst {\n EXACTLY,\n AT_MOST,\n} = MeasureMode;\n\n/**\n * `PUXI.BorderLayout` is used in conjunction with `PUXI.BorderLayoutOptions`.\n *\n * This layout guarantees that the \"center\" region will always be in the center of\n * the widget-group.\n *\n * WARNING: This layout may have some bugs in edge cases that haven't been reported.\n *\n * @memberof PUXI\n * @class\n * @implements PUXI.ILayoutManager\n */\nexport class BorderLayout implements ILayoutManager\n{\n protected host: WidgetGroup;\n\n protected leftWidgets: Widget[];\n protected topWidgets: Widget[];\n protected rightWidgets: Widget[];\n protected bottomWidgets: Widget[];\n protected centerWidgets: Widget[];\n\n protected measuredLeftWidth: number;\n protected measuredRightWidth: number;\n protected measuredCenterWidth: number;\n protected measuredWidth: number;\n\n protected measuredTopHeight: number;\n protected measuredBottomHeight: number;\n protected measuredCenterHeight: number;\n protected measuredHeight: number;\n\n constructor()\n {\n this.leftWidgets = [];\n this.topWidgets = [];\n this.rightWidgets = [];\n this.bottomWidgets = [];\n this.centerWidgets = [];\n }\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n this.clearMeasureCache();\n this.clearRegions();\n }\n\n onLayout(): void\n {\n this.layoutChildren(\n this.leftWidgets,\n 0,\n this.measuredTopHeight,\n this.measuredLeftWidth,\n this.measuredCenterHeight);\n this.layoutChildren(this.topWidgets, 0, 0, this.measuredWidth, this.measuredTopHeight);\n this.layoutChildren(\n this.rightWidgets,\n this.measuredWidth - this.measuredRightWidth,\n this.measuredTopHeight,\n this.measuredRightWidth,\n this.measuredCenterHeight,\n );\n this.layoutChildren(\n this.bottomWidgets,\n 0,\n this.measuredTopHeight + this.measuredCenterHeight,\n this.measuredWidth,\n this.measuredBottomHeight,\n );\n this.layoutChildren(\n this.centerWidgets,\n this.measuredLeftWidth,\n this.measuredTopHeight,\n this.measuredCenterWidth,\n this.measuredCenterHeight,\n );\n }\n\n layoutChildren(\n widgets: Widget[],\n regionX: number,\n regionY: number,\n regionWidth: number,\n regionHeight: number,\n ): void\n {\n for (let i = 0, j = widgets.length; i < j; i++)\n {\n const widget = widgets[i];\n\n let x = 0;\n let y = 0;\n\n switch ((widget.layoutOptions as BorderLayoutOptions)?.horizontalAlign)\n {\n case ALIGN.CENTER: x = (regionWidth - widget.getMeasuredWidth()) / 2; break;\n case ALIGN.RIGHT: x = regionWidth - widget.getMeasuredWidth(); break;\n default: x = 0; break;\n }\n\n switch ((widget.layoutOptions as BorderLayoutOptions)?.verticalAlign)\n {\n case ALIGN.CENTER: y = (regionHeight - widget.getMeasuredHeight()) / 2; break;\n case ALIGN.BOTTOM: y = regionHeight - widget.getMeasuredHeight(); break;\n default: y = 0; break;\n }\n\n x += regionX;\n y += regionY;\n\n widget.layout(x, y, x + widget.getMeasuredWidth(), y + widget.getMeasuredHeight(), true);\n }\n }\n\n /**\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n * @override\n */\n onMeasure(maxWidth: number, maxHeight: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n this.indexRegions();\n this.clearMeasureCache();\n\n // Children can be aligned inside region if smaller\n const childWidthMode = widthMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n const childHeightMode = heightMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n\n // Measure top, bottom, and center. The max. of each row's width will be our \"reference\".\n let [tw, th, , thmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.topWidgets,\n maxWidth,\n maxHeight,\n childWidthMode, childHeightMode,\n );\n let [bw, bh,, bhmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.bottomWidgets,\n maxWidth,\n maxHeight,\n childWidthMode, childHeightMode,\n );\n let [cw, ch, cwmin, chmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.centerWidgets,\n maxWidth,\n maxHeight,\n childWidthMode,\n heightMode);\n\n // Measure left & right regions. Their heights will equal center's height.\n let [lw, , lwmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.leftWidgets,\n maxWidth,\n ch,\n childWidthMode, MeasureMode.AT_MOST);\n let [rw, , rwmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.rightWidgets,\n maxWidth,\n ch,\n childWidthMode, MeasureMode.AT_MOST);\n\n // Check if total width/height is greater than our limit. If so, then downscale\n // each row's height or each column's (in middle row) width.\n\n const middleRowWidth = lw + rw + cw;\n const netWidth = Math.max(tw, bw, middleRowWidth);\n const netHeight = th + bh + ch;\n\n // Resolve our limits.\n if (widthMode === MeasureMode.EXACTLY)\n {\n this.measuredWidth = maxWidth;\n }\n else if (widthMode === MeasureMode.AT_MOST)\n {\n this.measuredWidth = Math.min(netWidth, maxWidth);\n }\n else\n {\n this.measuredWidth = netWidth;\n }\n\n if (heightMode === MeasureMode.EXACTLY)\n {\n this.measuredHeight = maxHeight;\n }\n else if (heightMode === MeasureMode.AT_MOST)\n {\n this.measuredHeight = Math.min(netHeight, maxHeight);\n }\n else\n {\n this.measuredHeight = netHeight;\n }\n\n tw = this.measuredWidth;\n bw = this.measuredWidth;\n\n if (netHeight > this.measuredHeight)\n {\n const hmin = (thmin + chmin + bhmin);\n\n // Redistribute heights minus min-heights.\n if (hmin < this.measuredHeight)\n {\n const downscale = (this.measuredHeight - hmin) / (netHeight - hmin);\n\n th = thmin + ((th - thmin) * downscale);\n bh = bhmin + ((bh - bhmin) * downscale);\n ch = chmin + ((ch - chmin) * downscale);\n }\n // Redistribute full heights.\n else\n {\n const downscale = this.measuredHeight / netHeight;\n\n th *= downscale;\n bh *= downscale;\n ch *= downscale;\n }\n }\n\n if (netWidth > this.measuredWidth)\n {\n const wmin = lwmin + cwmin + rwmin;\n\n // Redistribute widths minus min. widths\n if (wmin < this.measuredWidth)\n {\n const downscale = (this.measuredWidth - wmin) / (netWidth - wmin);\n\n lw = lwmin + ((lw - lwmin) * downscale);\n cw = cwmin + ((cw - cwmin) * downscale);\n rw = rwmin + ((rw - rwmin) * downscale);\n }\n // Redistribute full widths\n else\n {\n const downscale = this.measuredWidth / netWidth;\n\n lw *= downscale;\n cw *= downscale;\n rw *= downscale;\n }\n }\n\n // Useful to know!\n this.measuredLeftWidth = lw;\n this.measuredRightWidth = rw;\n this.measuredCenterWidth = cw;\n this.measuredTopHeight = th;\n this.measuredBottomHeight = bh;\n this.measuredCenterHeight = ch;\n\n this.fitChildren(this.leftWidgets, this.measuredLeftWidth, this.measuredCenterHeight);\n this.fitChildren(this.topWidgets, this.measuredWidth, this.measuredTopHeight);\n this.fitChildren(this.rightWidgets, this.measuredRightWidth, this.measuredCenterHeight);\n this.fitChildren(this.bottomWidgets, this.measuredWidth, this.measuredBottomHeight);\n this.fitChildren(this.centerWidgets, this.measuredCenterWidth, this.measuredCenterHeight);\n }\n\n /**\n * This measures the list of widgets given the constraints. The max width and\n * height amongst the children is returned.\n *\n * @param {PUXI.Widget[]} list\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n * @returns {number[]} - [width, height, widthFixedLowerBound, heightFixedLowerBound] -\n * the max. width and height amongst children. Also, the minimum required width/height\n * for the region (as defined in layout-options).\n */\n protected measureChildren(\n list: Widget[],\n maxWidth: number,\n maxHeight: number,\n widthMode: MeasureMode,\n heightMode: MeasureMode,\n ): number[]\n {\n let width = 0;\n let height = 0;\n let widthFixedLowerBound = 0;\n let heightFixedLowerBound = 0;\n\n for (let i = 0, j = list.length; i < j; i++)\n {\n const widget = list[i];\n const lopt = widget.layoutOptions || LayoutOptions.DEFAULT;\n\n let w = maxWidth;\n let h = maxHeight;\n let wmd = widthMode;\n let hmd = heightMode;\n\n if (lopt.width <= LayoutOptions.MAX_DIMEN)\n {\n w = lopt.width;\n wmd = EXACTLY;\n\n widthFixedLowerBound = Math.max(widthFixedLowerBound, w);\n }\n if (lopt.height <= LayoutOptions.MAX_DIMEN)\n {\n h = lopt.height;\n hmd = EXACTLY;\n\n heightFixedLowerBound = Math.max(heightFixedLowerBound, h);\n }\n\n widget.measure(w, h, wmd, hmd);\n\n width = Math.max(width, widget.getMeasuredWidth());\n height = Math.max(height, widget.getMeasuredHeight());\n }\n\n return [width, height, widthFixedLowerBound, heightFixedLowerBound];\n }\n\n /**\n * Ensures all widgets in the list measured their dimensions below the region\n * width & height. Widgets that are too large are remeasured in the those\n * limits (using `MeasureMode.AT_MOST`).\n *\n * This will handle widgets that have \"FILL_PARENT\" width or height.\n *\n * @param {PUXI.Widget[]} list\n * @param {number} measuredRegionWidth\n * @param {number} measuredRegionHeight\n */\n protected fitChildren(\n list: Widget[],\n measuredRegionWidth: number,\n measuredRegionHeight: number,\n ): void\n {\n for (let i = 0, j = list.length; i < j; i++)\n {\n const widget = list[i];\n\n if (widget.getMeasuredWidth() <= measuredRegionWidth\n && widget.getMeasuredHeight() <= measuredRegionHeight\n && widget.getMeasuredWidth() > 0\n && widget.getMeasuredHeight() > 0\n && widget.layoutOptions?.width !== FILL_PARENT\n && widget.layoutOptions?.height !== FILL_PARENT)\n {\n continue;\n }\n\n if (measuredRegionWidth > 0 && measuredRegionHeight > 0)\n {\n const wm = widget.layoutOptions?.width === FILL_PARENT ? EXACTLY : AT_MOST;\n const hm = widget.layoutOptions?.height === FILL_PARENT ? EXACTLY : AT_MOST;\n\n widget.measure(measuredRegionWidth, measuredRegionHeight, wm, hm);\n }\n }\n }\n\n /**\n * Indexes the list of left, top, right, bottom, and center widget lists.\n */\n protected indexRegions(): void\n {\n this.clearRegions();\n const { widgetChildren: children } = this.host;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as BorderLayoutOptions;\n\n const region = lopt.region || REGION_CENTER;\n\n switch (region)\n {\n case REGION_LEFT: this.leftWidgets.push(widget); break;\n case REGION_TOP: this.topWidgets.push(widget); break;\n case REGION_RIGHT: this.rightWidgets.push(widget); break;\n case REGION_BOTTOM: this.bottomWidgets.push(widget); break;\n default: this.centerWidgets.push(widget);\n }\n }\n }\n\n /**\n * Clears the left, top, right, bottom, and center widget lists.\n */\n protected clearRegions(): void\n {\n this.leftWidgets.length = 0;\n this.topWidgets.length = 0;\n this.rightWidgets.length = 0;\n this.bottomWidgets.length = 0;\n }\n\n /**\n * Zeros the measured dimensions.\n */\n protected clearMeasureCache(): void\n {\n this.measuredLeftWidth = 0;\n this.measuredRightWidth = 0;\n this.measuredCenterWidth = 0;\n this.measuredTopHeight = 0;\n this.measuredBottomHeight = 0;\n this.measuredCenterHeight = 0;\n }\n\n getMeasuredWidth(): number\n {\n return this.measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this.measuredHeight;\n }\n}\n","import { ILayoutManager } from './ILayoutManager';\nimport { WidgetGroup } from '../WidgetGroup';\nimport { MeasureMode } from '../IMeasurable';\nimport { LayoutOptions } from '../layout-options';\n\ntype Gravity = 'left' | 'center' | 'right' | 'top' | 'middle' | 'bottom';\n\nexport class LinearLayout implements ILayoutManager\n{\n private host: WidgetGroup;\n private orientation: 'vertical' | 'horizontal';\n private gravity: Gravity;\n private measuredWidth: number;\n private measuredHeight: number;\n\n constructor(orientation: 'vertical' | 'horizontal' = 'vertical', gravity: Gravity = 'center')\n {\n this.orientation = orientation;\n this.gravity = gravity;\n }\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n }\n\n onLayout(): void\n {\n let position = 0;\n const children = this.host.widgetChildren;\n const breadth = this.orientation === 'vertical'\n ? this.measuredWidth\n : this.measuredHeight;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n\n // along axis\n const u = this.orientation === 'vertical'\n ? widget.getMeasuredWidth()\n : widget.getMeasuredHeight();\n const v = this.orientation === 'vertical'\n ? widget.getMeasuredHeight()\n : widget.getMeasuredWidth();\n\n let p = 0;\n\n if (u < breadth)\n {\n switch (this.gravity)\n {\n case 'center':\n case 'middle':\n p = (breadth - u) / 2;\n break;\n case 'right':\n case 'bottom':\n p = breadth - u;\n break;\n }\n }\n\n if (this.orientation === 'vertical')\n {\n widget.layout(p, position, p + u, position + v);\n }\n else\n {\n widget.layout(position, p, position + v, p + u);\n }\n\n position += v;\n }\n }\n\n onMeasure(widthLimit: number, heightLimit: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n const children = this.host.widgetChildren;\n const baseWidthMode = widthMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n const baseHeightMode = heightMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : heightMode;\n\n let length = 0;\n let breadth = 0;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT);\n\n const widgetWidthLimit = lopt.isWidthPredefined ? lopt.width : widthLimit;\n const widgetHeightLimit = lopt.isHeightPredefined ? lopt.height : heightLimit;\n const widgetWidthMode = lopt.isWidthPredefined ? MeasureMode.EXACTLY : baseWidthMode;\n const widgetHeightMode = lopt.isHeightPredefined ? MeasureMode.EXACTLY : baseHeightMode;\n\n widget.measure(widgetWidthLimit, widgetHeightLimit, widgetWidthMode, widgetHeightMode);\n\n if (this.orientation === 'vertical')\n {\n breadth = Math.max(breadth, widget.getMeasuredWidth());\n length += widget.getMeasuredHeight();\n }\n else\n {\n breadth = Math.max(breadth, widget.getMeasuredHeight());\n length += widget.getMeasuredWidth();\n }\n }\n\n if (this.orientation === 'vertical')\n {\n this.measuredWidth = breadth;\n this.measuredHeight = length;\n }\n else\n {\n this.measuredWidth = length;\n this.measuredHeight = breadth;\n }\n }\n\n getMeasuredWidth(): number\n {\n return this.measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this.measuredHeight;\n }\n}\n","import { IButtonOptions, Button } from './Button';\nimport { ImageWidget } from './Sprite';\nimport { Texture } from 'pixi.js';\nimport { LinearLayout } from './layout-manager';\n\nexport interface IImageButtonOptions extends IButtonOptions\n{\n icon: string | Texture | ImageWidget;\n}\n\nexport class ImageButton extends Button\n{\n iconWidget: ImageWidget;\n\n constructor(options: IImageButtonOptions)\n {\n super(options);\n\n if (!(options.icon instanceof ImageWidget))\n {\n const texture = options.icon instanceof Texture ? options.icon\n : Texture.from(options.icon);\n\n options.icon = new ImageWidget(texture);\n }\n\n this.textWidget.setLayoutOptions(null);// a little redundant maybe?\n this.iconWidget = options.icon;\n\n this.removeChild(this.textWidget);\n this.addChild(this.iconWidget);\n this.addChild(this.textWidget);\n\n this.useLayout(new LinearLayout('vertical'));\n }\n}\n","import { Widget } from './Widget';\nimport { DragManager } from './event/DragManager';\nimport { Tween } from './Tween';\nimport { Ease } from './Ease/Ease';\nimport { Helpers } from './Helpers';\nimport { Sprite } from './Sprite';\nimport * as PIXI from 'pixi.js';\nimport { MeasureMode } from './IMeasurable';\n\nexport interface ISliderOptions\n{\n track?: PIXI.Container | Widget;\n handle?: PIXI.Container | Widget;\n fill?: Sprite;\n orientation?: number;\n value?: number;\n minValue?: number;\n maxValue?: number;\n decimals?: number;\n onValueChange?: () => void;\n onValueChanging?: () => void;\n}\n\n/**\n * @memberof PUXI\n * @interface ISliderOptions\n * @property {PIXI.Container}[track]\n * @property {PIXI.Container}[handle]\n */\n\n/**\n * These options are used to configure a `PUXI.Slider`.\n *\n * @memberof PUXI\n * @interface ISliderOptions\n * @property {PIXI.Container}[track]\n * @property {PIXI.Container}[fill]\n * @property {boolean}[vertical]\n * @property {number}[value]\n * @property {number}[minValue]\n * @property {number}[maxValue]\n * @property {number}[decimals]\n * @property {Function}[onValueChange]\n * @property {Function}[onValueChanging]\n */\n\n/**\n * A slider is a form of input to set a variable to a value in a continuous\n * range. It cannot have its own children.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n */\nexport class Slider extends Widget\n{\n protected _disabled: boolean;\n\n track: Widget;\n handle: Widget;\n fill: Sprite;\n\n public readonly orientation: number;\n\n protected percentValue: number;\n protected _minValue: number;\n protected _maxValue: number;\n\n private _localCursor: PIXI.Point;\n\n decimals: number;\n vertical: boolean;\n\n _lastChange: number;\n _lastChanging: number;\n\n onValueChange: (n: number) => void;\n onValueChanging: (n: number) => void;\n\n /**\n * @param options {Object} Slider settings\n * @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the slider track\n * @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as slider handle\n * @param [options.fill=null] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used for slider fill\n * @param [options.vertical=false] {boolean} Direction of the slider\n * @param [options.value=0] {number} value of the slider\n * @param [options.minValue=0] {number} minimum value\n * @param [options.maxValue=100] {number} max value\n * @param [options.decimals=0] {boolean} the decimal precision (use negative to round tens and hundreds)\n * @param [options.onValueChange=null] {callback} Callback when the value has changed\n * @param [options.onValueChanging=null] {callback} Callback while the value is changing\n */\n constructor(options: ISliderOptions)\n {\n super();\n\n /**\n * The value expressed as a percentage from min. to max. This will always\n * be between 0 and 1.\n *\n * The actual value is: `this.minValue + this.percentValue * (this.maxValue - this.minValue`).\n *\n * @member {number}\n */\n this.percentValue = 0;\n this._disabled = false;\n\n this.fill = options.fill || null;\n this.percentValue = this._minValue;\n this._minValue = options.minValue || 0;\n this._maxValue = options.maxValue || 100;\n this.decimals = options.decimals || 0;\n this.orientation = options.orientation || Slider.HORIZONTAL;\n this.onValueChange = options.onValueChange || null;\n this.onValueChanging = options.onValueChanging || null;\n this.value = options.value || 50;\n\n // set options\n this.track = Widget.fromContent(options.track\n || (this.orientation === Slider.HORIZONTAL\n ? Slider.DEFAULT_HORIZONTAL_TRACK.clone()\n : Slider.DEFAULT_VERTICAL_TRACK.clone()));\n this.handle = Widget.fromContent(options.handle || Slider.DEFAULT_HANDLE.clone());\n\n this.addChild(this.track, this.handle);// initialize(), update() usage\n\n this._localCursor = new PIXI.Point();\n this.handle.contentContainer.buttonMode = true;\n }\n\n initialize(): void\n {\n super.initialize();\n\n let startValue = 0;\n let trackSize;\n\n const triggerValueChange = (): void =>\n {\n this.emit('change', this.value);\n\n if (this._lastChange != this.value)\n {\n this._lastChange = this.value;\n\n if (typeof this.onValueChange === 'function')\n {\n this.onValueChange(this.value);\n }\n }\n };\n\n const triggerValueChanging = (): void =>\n {\n this.emit('changing', this.value);\n\n if (this._lastChanging != this.value)\n {\n this._lastChanging = this.value;\n\n if (typeof this.onValueChanging === 'function')\n {\n this.onValueChanging(this.value);\n }\n }\n };\n\n const updatePositionToMouse = (mousePosition, soft): void =>\n {\n this.percentValue = this.getValueAtPhysicalPosition(mousePosition);\n this.layoutHandle();\n triggerValueChanging();\n };\n\n // Handles dragging\n const handleDrag: DragManager = this.handle.eventBroker.dnd as DragManager;\n\n handleDrag.onPress = (event: PIXI.interaction.InteractionEvent): void =>\n {\n event.stopPropagation();\n };\n\n handleDrag.onDragStart = (): void =>\n {\n startValue = this.percentValue;\n trackSize = this.orientation === Slider.HORIZONTAL\n ? this.track.width\n : this.track.height;\n };\n\n handleDrag.onDragMove = (event, offset: PIXI.Point): void =>\n {\n this.percentValue = Math.max(0, Math.min(\n 1,\n startValue + ((this.orientation === Slider.HORIZONTAL ? offset.x : offset.y) / trackSize\n )));\n\n triggerValueChanging();\n this.layoutHandle();\n };\n\n handleDrag.onDragEnd = (): void =>\n {\n triggerValueChange();\n this.layoutHandle();\n };\n\n // Bar pressing/dragging\n const trackDrag: DragManager = this.track.eventBroker.dnd as DragManager;\n\n trackDrag.onPress = (event, isPressed): void =>\n {\n if (isPressed)\n {\n updatePositionToMouse(event.data.global, true);\n }\n\n event.stopPropagation();\n };\n\n trackDrag.onDragMove = (event: PIXI.interaction.InteractionEvent): void =>\n {\n updatePositionToMouse(event.data.global, false);\n };\n\n trackDrag.onDragEnd = (): void =>\n {\n triggerValueChange();\n };\n\n this.layoutHandle();\n }\n\n get value(): number\n {\n return Helpers.Round(Helpers.Lerp(this._minValue, this._maxValue, this.percentValue), this.decimals);\n }\n set value(val: number)\n {\n if (val === this.value)\n {\n return;\n }\n if (isNaN(val))\n {\n throw new Error('Cannot use NaN as a value');\n }\n\n this.percentValue = (Math.max(this._minValue, Math.min(this._maxValue, val)) - this._minValue) / (this._maxValue - this._minValue);\n\n if (typeof this.onValueChange === 'function')\n {\n this.onValueChange(this.value);\n }\n if (typeof this.onValueChanging === 'function')\n {\n this.onValueChanging(this.value);\n }\n\n if (this.handle && this.initialized)\n {\n this.layoutHandle();\n }\n }\n\n get minValue(): number\n {\n return this._minValue;\n }\n set minValue(val: number)\n {\n this._minValue = val;\n this.update();\n }\n\n get maxValue(): number\n {\n return this._maxValue;\n }\n set maxValue(val: number)\n {\n this._maxValue = val;\n this.update();\n }\n\n get disabled(): boolean\n {\n return this._disabled;\n }\n set disabled(val: boolean)\n {\n if (val !== this._disabled)\n {\n this._disabled = val;\n this.handle.contentContainer.buttonMode = !val;\n this.handle.contentContainer.interactive = !val;\n this.track.contentContainer.interactive = !val;\n }\n }\n\n /**\n * @protected\n * @returns the amount of the freedom that handle has in physical units, i.e. pixels. This\n * is the width of the track minus the handle's size.\n */\n protected getPhysicalRange(): number\n {\n return this.orientation === Slider.HORIZONTAL\n ? this.contentWidth - this.handle.getMeasuredWidth()\n : this.contentHeight - this.handle.getMeasuredHeight();\n }\n\n /**\n * @protected\n * @param {PIXI.Point} cursor\n * @returns the value of the slider if the handle's center were (globally)\n * positioned at the given point.\n */\n protected getValueAtPhysicalPosition(cursor: PIXI.Point): number\n {\n // Transform position\n const localCursor = this.contentContainer.toLocal(cursor, null, this._localCursor, true);\n\n let offset: number;\n let range: number;\n\n if (this.orientation === Slider.HORIZONTAL)\n {\n const handleWidth = this.handle.getMeasuredWidth();\n\n offset = localCursor.x - this.paddingLeft - (handleWidth / 4);\n range = this.contentWidth - handleWidth;\n }\n else\n {\n const handleHeight = this.handle.getMeasuredHeight();\n\n offset = localCursor.y - this.paddingTop - (handleHeight / 4);\n range = this.contentHeight - handleHeight;\n }\n\n return offset / range;\n }\n\n /**\n * Re-positions the handle. This should be called after `_value` has been changed.\n */\n protected layoutHandle(): void\n {\n const handle = this.handle;\n\n const handleWidth = handle.getMeasuredWidth();\n const handleHeight = handle.getMeasuredHeight();\n let width = this.width - this.paddingHorizontal;\n let height = this.height - this.paddingVertical;\n\n let handleX: number;\n let handleY: number;\n\n if (this.orientation === Slider.HORIZONTAL)\n {\n width -= handleWidth;\n\n handleY = (height - handleHeight) / 2;\n handleX = (width * this.percentValue);\n }\n else\n {\n height -= handleHeight;\n\n handleX = (width - handleWidth) / 2;\n handleY = (height * this.percentValue);\n }\n\n handle.layout(handleX, handleY, handleX + handleWidth, handleY + handleHeight);\n }\n\n /**\n * Slider measures itself using the track's natural dimensions in its non-oriented\n * direction. The oriented direction will be the equal the range's size times\n * the track's resolution.\n *\n * @param width\n * @param height\n * @param widthMode\n * @param heightMode\n */\n onMeasure(width: number, height: number, widthMode: number, heightMode: number): void\n {\n const naturalWidth = ((this.orientation === Slider.HORIZONTAL)\n ? this._maxValue - this._minValue\n : Math.max(this.handle.contentContainer.width, this.track.contentContainer.width))\n + this.paddingHorizontal;\n const naturalHeight = ((this.orientation === Slider.VERTICAL)\n ? this._maxValue - this._minValue\n : Math.max(this.handle.contentContainer.height, this.track.contentContainer.height))\n + this.paddingVertical;\n\n switch (widthMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredWidth = width;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredWidth = naturalWidth;\n break;\n case MeasureMode.AT_MOST:\n this._measuredWidth = Math.min(width, naturalWidth);\n break;\n }\n\n switch (heightMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredHeight = height;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredHeight = naturalHeight;\n break;\n case MeasureMode.AT_MOST:\n this._measuredHeight = Math.min(height, naturalHeight);\n break;\n }\n }\n\n /**\n * `Slider` lays the track to fill all of its width and height. The handle is aligned\n * in the middle in the non-oriented direction.\n *\n * @param l\n * @param t\n * @param r\n * @param b\n * @param dirty\n * @override\n */\n onLayout(l: number, t: number, r: number, b: number, dirty: boolean): void\n {\n super.onLayout(l, t, r, b, dirty);\n const { handle, track } = this;\n\n track.layout(0, 0, this.width - this.paddingHorizontal, this.height - this.paddingVertical);\n\n // Layout doesn't scale the widget\n // TODO: Create a Track widget, this won't work for custom tracks that don't wanna\n // scale (and it looks ugly.)\n track.insetContainer.width = track.width;\n track.insetContainer.height = track.height;\n\n handle.measure(this.width, this.height, MeasureMode.AT_MOST, MeasureMode.AT_MOST);\n\n this.layoutHandle();\n }\n\n /**\n * The default track for horizontally oriented sliders.\n * @static\n */\n static DEFAULT_HORIZONTAL_TRACK: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0xffffff, 1)\n .drawRect(0, 0, 16, 16) // natural width & height = 16\n .endFill()\n .lineStyle(1, 0x000000, 0.7, 1, true) // draw line in middle\n .moveTo(1, 8)\n .lineTo(15, 8);\n\n /**\n * The default track for vertically oriented sliders.\n * @static\n */\n static DEFAULT_VERTICAL_TRACK: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0xffffff, 1)\n .drawRect(0, 0, 16, 16) // natural width & height = 16\n .endFill()\n .lineStyle(1, 0x000000, 0.7, 1, true) // draw line in middle\n .moveTo(8, 1)\n .lineTo(8, 15);\n\n /**\n * @static\n */\n static DEFAULT_HANDLE: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0x000000)\n .drawCircle(16, 16, 8)\n .endFill()\n .beginFill(0x000000, 0.5)\n .drawCircle(16, 16, 16)\n .endFill();\n /**\n * Horizontal orientation\n * @static\n */\n static HORIZONTAL = 0xff5;\n\n /**\n * Vertical orientation\n * @static\n */\n static VERTICAL = 0xffe;\n}\n","import { Helpers } from './Helpers';\nconst _tweenItemCache = [];\nconst _callbackItemCache = [];\nconst _tweenObjects = {};\nconst _activeTweenObjects = {};\nlet _currentId = 1;\n\nclass TweenObject\n{\n public object: T;\n public tweens: Record;\n public active: boolean;\n public onUpdate: () => void;\n\n constructor(object: T)\n {\n this.object = object;\n this.tweens = {};\n this.active = false;\n this.onUpdate = null;\n }\n}\n\nclass CallbackItem\n{\n key: string;\n obj: any;\n parent: any;\n time: number;\n callback: Function;\n currentTime: number;\n\n private _ready: boolean;\n\n constructor()\n {\n this._ready = false;\n this.obj = null;\n this.parent = null;\n this.key = '';\n this.time = 0;\n this.callback = null;\n this.currentTime = 0;\n }\n\n remove(): void\n {\n this._ready = true;\n delete this.parent.tweens[this.key];\n if (!Object.keys(this.parent.tweens).length)\n {\n this.parent.active = false;\n this.parent.onUpdate = null;\n delete _activeTweenObjects[this.obj._tweenObjectId];\n }\n }\n\n set(obj, callback, time): void\n {\n this.obj = obj.object;\n\n if (!this.obj._currentCallbackID)\n { this.obj._currentCallbackID = 1; }\n else\n { this.obj._currentCallbackID++; }\n\n this.time = time;\n this.parent = obj;\n this.callback = callback;\n this._ready = false;\n this.key = `cb_${this.obj._currentCallbackID}`;\n this.currentTime = 0;\n if (!this.parent.active)\n {\n this.parent.active = true;\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\n }\n }\n\n update(delta: number): void\n {\n this.currentTime += delta;\n if (this.currentTime >= this.time)\n {\n this.remove();\n this.callback.call(this.parent);\n }\n }\n}\n\nclass TweenItem\n{\n key: string;\n parent: any;\n obj: any;\n\n from: any;\n to: any;\n time: number;\n ease: any;\n currentTime: number;\n t: number;\n isColor: boolean;\n currentColor: any;\n surfix: any;\n\n _ready: boolean;\n\n constructor()\n {\n this._ready = false;\n this.parent = null;\n this.obj = null;\n this.key = '';\n this.from = 0;\n this.to = 0;\n this.time = 0;\n this.ease = 0;\n this.currentTime = 0;\n this.t = 0;\n this.isColor = false;\n }\n\n remove(): void\n {\n this._ready = true;\n delete this.parent.tweens[this.key];\n if (!Object.keys(this.parent.tweens).length)\n {\n this.parent.active = false;\n delete _activeTweenObjects[this.obj._tweenObjectId];\n }\n }\n\n set(obj: any, key: string, from: any, to: any, time: number, ease: any): void\n {\n this.isColor = isNaN(from) && from[0] === '#' || isNaN(to) && to[0] === '#';\n this.parent = obj;\n this.obj = obj.object;\n this.key = key;\n this.surfix = getSurfix(to);\n\n if (this.isColor)\n {\n this.to = Helpers.hexToRgb(to);\n this.from = Helpers.hexToRgb(from);\n this.currentColor = { r: this.from.r, g: this.from.g, b: this.from.b };\n }\n else\n {\n this.to = getToValue(to);\n this.from = getFromValue(from, to, this.obj, key);\n }\n\n this.time = time;\n this.currentTime = 0;\n this.ease = ease;\n this._ready = false;\n\n if (!this.parent.active)\n {\n this.parent.active = true;\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\n }\n }\n\n update(delta: number): void\n {\n this.currentTime += delta;\n this.t = Math.min(this.currentTime, this.time) / this.time;\n if (this.ease)\n { this.t = this.ease.getPosition(this.t); }\n\n if (this.isColor)\n {\n this.currentColor.r = Math.round(Helpers.Lerp(this.from.r, this.to.r, this.t));\n this.currentColor.g = Math.round(Helpers.Lerp(this.from.g, this.to.g, this.t));\n this.currentColor.b = Math.round(Helpers.Lerp(this.from.b, this.to.b, this.t));\n this.obj[this.key] = Helpers.rgbToNumber(this.currentColor.r, this.currentColor.g, this.currentColor.b);\n }\n else\n {\n const val = Helpers.Lerp(this.from, this.to, this.t);\n\n this.obj[this.key] = this.surfix ? val + this.surfix : val;\n }\n\n if (this.currentTime >= this.time)\n {\n this.remove();\n }\n }\n}\n\nconst widthKeys = ['width', 'minWidth', 'maxWidth', 'anchorLeft', 'anchorRight', 'left', 'right', 'x'];\nconst heightKeys = ['height', 'minHeight', 'maxHeight', 'anchorTop', 'anchorBottom', 'top', 'bottom', 'y'];\n\nfunction getFromValue(from, to, obj, key): number\n{\n // both number\n if (!isNaN(from) && !isNaN(to))\n { return from; }\n\n // both percentage\n if (isNaN(from) && isNaN(to) && from.indexOf('%') !== -1 && to.indexOf('%') !== -1)\n { return parseFloat(from.replace('%', '')); }\n\n // convert from to px\n if (isNaN(from) && !isNaN(to) && from.indexOf('%') !== -1)\n {\n if (widthKeys.indexOf(key) !== -1)\n { return obj.parent._width * (parseFloat(from.replace('%', '')) * 0.01); }\n else if (heightKeys.indexOf(key) !== -1)\n { return obj.parent._height * (parseFloat(from.replace('%', '')) * 0.01); }\n\n return 0;\n }\n\n // convert from to percentage\n if (!isNaN(from) && isNaN(to) && to.indexOf('%') !== -1)\n {\n if (widthKeys.indexOf(key) !== -1)\n { return from / obj.parent._width * 100; }\n else if (heightKeys.indexOf(key) !== -1)\n { return from / obj.parent._height * 100; }\n\n return 0;\n }\n\n return 0;\n}\n\nfunction getSurfix(to: number | string): any\n{\n if (isNaN(to) && to.indexOf('%') !== -1)\n { return '%'; }\n}\n\nfunction getToValue(to: number | string): any\n{\n if (!isNaN(to))\n { return to; }\n if (isNaN(to) && to.indexOf('%') !== -1)\n { return parseFloat(to.replace('%', '')); }\n}\n\nfunction getObject(obj: any): any\n{\n if (!obj._tweenObjectId)\n {\n obj._tweenObjectId = _currentId;\n _currentId++;\n }\n let object = _tweenObjects[obj._tweenObjectId];\n\n if (!object)\n {\n object = _tweenObjects[obj._tweenObjectId] = new TweenObject(obj);\n }\n\n return object;\n}\n\nfunction getTweenItem(): TweenItem\n{\n for (let i = 0; i < _tweenItemCache.length; i++)\n {\n if (_tweenItemCache[i]._ready)\n { return _tweenItemCache[i]; }\n }\n\n const tween = new TweenItem();\n\n _tweenItemCache.push(tween);\n\n return tween;\n}\n\nfunction getCallbackItem(): CallbackItem\n{\n for (let i = 0; i < _callbackItemCache.length; i++)\n {\n if (_callbackItemCache[i]._ready)\n { return _callbackItemCache[i]; }\n }\n\n const cb = new CallbackItem();\n\n _callbackItemCache.push(cb);\n\n return cb;\n}\n\nexport const Tween = {\n to(obj, time, params, ease?)\n {\n const object = getObject(obj);\n let onUpdate = null;\n\n for (const key in params)\n {\n if (key === 'onComplete')\n {\n const cb = getCallbackItem();\n\n cb.set(object, params[key], time);\n object.tweens[cb.key] = cb;\n continue;\n }\n\n if (key === 'onUpdate')\n {\n onUpdate = params[key];\n continue;\n }\n\n if (time)\n {\n const match = params[key] === obj[key];\n\n if (typeof obj[key] === 'undefined') continue;\n\n if (match)\n {\n if (object.tweens[key]) object.tweens[key].remove();\n }\n else\n {\n if (!object.tweens[key])\n { object.tweens[key] = getTweenItem(); }\n object.tweens[key].set(object, key, obj[key], params[key], time, ease);\n }\n }\n }\n\n if (time)\n { object.onUpdate = onUpdate; }\n else this.set(obj, params);\n },\n from(obj, time, params, ease)\n {\n const object = getObject(obj);\n let onUpdate = null;\n\n for (const key in params)\n {\n if (key === 'onComplete')\n {\n const cb = getCallbackItem();\n\n cb.set(object, params[key], time);\n object.tweens[cb.key] = cb;\n continue;\n }\n\n if (key === 'onUpdate')\n {\n onUpdate = params[key];\n continue;\n }\n\n if (time)\n {\n const match = params[key] == obj[key];\n\n if (typeof obj[key] === 'undefined') continue;\n\n if (match)\n {\n if (object.tweens[key]) object.tweens[key].remove();\n }\n else\n {\n if (!object.tweens[key])\n { object.tweens[key] = getTweenItem(); }\n object.tweens[key].set(object, key, params[key], obj[key], time, ease);\n }\n }\n }\n\n if (time)\n { object.onUpdate = onUpdate; }\n else this.set(obj, params);\n },\n fromTo(obj, time, paramsFrom, paramsTo, ease)\n {\n const object = getObject(obj);\n let onUpdate = null;\n\n for (const key in paramsTo)\n {\n if (key === 'onComplete')\n {\n const cb = getCallbackItem();\n\n cb.set(object, paramsTo[key], time);\n object.tweens[cb.key] = cb;\n continue;\n }\n\n if (key === 'onUpdate')\n {\n onUpdate = paramsTo[key];\n continue;\n }\n\n if (time)\n {\n const match = paramsFrom[key] == paramsTo[key];\n\n if (typeof obj[key] === 'undefined' || typeof paramsFrom[key] === 'undefined') continue;\n\n if (match)\n {\n if (object.tweens[key]) object.tweens[key].remove();\n obj[key] = paramsTo[key];\n }\n else\n {\n if (!object.tweens[key])\n {\n object.tweens[key] = getTweenItem();\n }\n object.tweens[key].set(object, key, paramsFrom[key], paramsTo[key], time, ease);\n }\n }\n }\n\n if (time)\n { object.onUpdate = onUpdate; }\n else this.set(obj, paramsTo);\n },\n set(obj, params)\n {\n const object = getObject(obj);\n\n for (const key in params)\n {\n if (typeof obj[key] === 'undefined') continue;\n if (object.tweens[key]) object.tweens[key].remove();\n obj[key] = params[key];\n }\n },\n _update(delta)\n {\n for (const id in _activeTweenObjects)\n {\n const object = _activeTweenObjects[id];\n\n for (const key in object.tweens)\n {\n object.tweens[key].update(delta);\n }\n if (object.onUpdate)\n {\n object.onUpdate.call(object.object, delta);\n }\n }\n },\n};\n","import { Slider, ISliderOptions } from './Slider';\nimport { Tween } from './Tween';\nimport { Sprite } from './Sprite';\nimport { ScrollWidget } from './ScrollWidget';\nimport * as PIXI from 'pixi.js';\n\ninterface IScrollBarOptions extends ISliderOptions\n{\n track?: Sprite;\n handle?: Sprite;\n scrollingContainer: ScrollWidget;\n orientation: number;\n autohide?: boolean;\n}\n\n/**\n * @memberof PUXI\n * @interface IScrollBarOptions\n * @property {PUXI.Sprite} track\n * @property {PUXI.Sprite} handle\n */\n\n/**\n * An UI scrollbar to control a ScrollingContainer\n *\n * @class\n * @extends PUXI.Slider\n * @memberof PUXI\n * @param options {Object} ScrollBar settings\n * @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the scrollbar track\n * @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as scrollbar handle\n * @param options.scrollingContainer {PIXI.UI.ScrollingContainer} The container to control\n * @param [options.vertical=false] {boolean} Direction of the scrollbar\n * @param [options.autohide=false] {boolean} Hides the scrollbar when not needed\n */\nexport class ScrollBar extends Slider\n{\n scrollingContainer: ScrollWidget;\n autohide: boolean;\n _hidden: boolean;\n\n constructor(options: IScrollBarOptions)\n {\n super({\n track: options.track || ScrollBar.DEFAULT_TRACK.clone(),\n handle: options.handle || ScrollBar.DEFAULT_HANDLE.clone(),\n fill: null,\n orientation: options.orientation,\n minValue: 0,\n maxValue: 1,\n });\n\n this.scrollingContainer = options.scrollingContainer;\n this.autohide = options.autohide;\n this._hidden = false;\n }\n\n initialize(): void\n {\n super.initialize();\n this.decimals = 3; // up decimals to trigger ValueChanging more often\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n this.on('changing', (): void =>\n {\n this.scrollingContainer.forcePctPosition(\n this.orientation === Slider.HORIZONTAL ? 'x' : 'y',\n this.percentValue);\n });\n\n this.on('change', (): void =>\n {\n this.scrollingContainer.setScrollPosition();\n });\n }\n\n toggleHidden(hidden: boolean): void\n {\n if (this.autohide)\n {\n if (hidden && !this._hidden)\n {\n Tween.to(this, 0.2, { alpha: 0 });\n this._hidden = true;\n }\n else if (!hidden && this._hidden)\n {\n Tween.to(this, 0.2, { alpha: 1 });\n this._hidden = false;\n }\n }\n }\n\n /**\n * @static\n */\n static DEFAULT_TRACK = new PIXI.Graphics()\n .beginFill(0xffffff)\n .drawRect(0, 0, 8, 8)\n .endFill();\n\n /**\n * @static\n */\n static DEFAULT_HANDLE: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0x000000)\n .drawCircle(8, 8, 4)\n .endFill()\n .beginFill(0x000000, 0.5)\n .drawCircle(8, 8, 8)\n .endFill();\n}\n\n","import { InteractiveGroup } from './InteractiveGroup';\nimport { Helpers } from './Helpers';\nimport { DragManager } from './event/DragManager';\nimport { ScrollManager } from './event/ScrollManager';\nimport * as PIXI from 'pixi.js';\nimport { Widget } from './Widget';\nimport { WidgetGroup } from './WidgetGroup';\nimport { BorderLayout } from './layout-manager';\nimport { ScrollBar } from './ScrollBar';\nimport { ALIGN, BorderLayoutOptions, LayoutOptions } from './layout-options';\nimport { Slider } from './Slider';\n\n/**\n * @namespace PUXI\n * @interface\n */\ninterface IScrollingContainerOptions\n{\n scrollX?: boolean;\n scrollY?: boolean;\n dragScrolling?: boolean;\n softness?: number;\n radius?: number;\n expandMask?: number;\n overflowY?: number;\n overflowX?: number;\n scrollBars?: boolean;\n}\n\n/**\n * `ScrollWidget` masks its contents to its layout bounds and translates\n * its children when scrolling. It uses the anchor layout.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.InteractiveGroup\n */\nexport class ScrollWidget extends InteractiveGroup\n{\n private mask: PIXI.Graphics;\n public readonly innerContainer: WidgetGroup;\n private innerBounds: PIXI.Rectangle;\n\n scrollX: boolean;\n scrollY: boolean;\n dragScrolling: boolean;\n softness: number;\n radius: number;\n expandMask: number;\n overflowY: number;\n overflowX: number;\n\n animating: boolean;\n scrolling: boolean;\n\n protected scrollBars: ScrollBar[];\n protected scrollPosition: PIXI.Point;\n protected scrollVelocity: PIXI.Point;\n protected targetPosition: PIXI.Point;\n protected lastPosition: PIXI.Point;\n protected stop: boolean;\n\n private boundCached: number;\n private lastWidth: number;\n private lastHeight: number;\n\n /**\n * @param {PUXI.IScrollingContainerOptions} options\n * @param [options.scrollX=false] {Boolean} Enable horizontal scrolling\n * @param [options.scrollY=false] {Boolean} Enable vertical scrolling\n * @param [options.dragScrolling=true] {Boolean} Enable mousedrag scrolling\n * @param [options.softness=0.5] {Number} (0-1) softness of scrolling\n * @param [options.width=0] {Number|String} container width\n * @param [options.height=0] {Number} container height\n * @param [options.radius=0] {Number} corner radius of clipping mask\n * @param [options.expandMask=0] {Number} mask expand (px)\n * @param [options.overflowY=0] {Number} how much can be scrolled past content dimensions\n * @param [options.overflowX=0] {Number} how much can be scrolled past content dimensions\n */\n constructor(options: IScrollingContainerOptions = {})\n {\n super();\n\n this.mask = new PIXI.Graphics();\n this.innerContainer = new InteractiveGroup();\n this.innerBounds = new PIXI.Rectangle();\n super.addChild(this.innerContainer);\n this.contentContainer.addChild(this.mask);\n this.contentContainer.mask = this.mask;\n\n this.scrollX = options.scrollX !== undefined ? options.scrollX : false;\n this.scrollY = options.scrollY !== undefined ? options.scrollY : false;\n this.dragScrolling = options.dragScrolling !== undefined ? options.dragScrolling : true;\n this.softness = options.softness !== undefined ? Math.max(Math.min(options.softness || 0, 1), 0) : 0.5;\n this.radius = options.radius || 0;\n this.expandMask = options.expandMask || 0;\n this.overflowY = options.overflowY || 0;\n this.overflowX = options.overflowX || 0;\n\n this.scrollVelocity = new PIXI.Point();\n\n /**\n * Widget's position in a scroll.\n * @member {PIXI.Point}\n * @private\n */\n this.scrollPosition = new PIXI.Point();\n\n /**\n * Position that the cursor is at, i.e. our scroll \"target\".\n * @member {PIXI.Point}\n * @private\n */\n this.targetPosition = new PIXI.Point();\n this.lastPosition = new PIXI.Point();\n\n this.useLayout(new BorderLayout());\n\n this.animating = false;\n this.scrolling = false;\n this.scrollBars = [];\n\n if (options.scrollBars && this.scrollX)\n {\n const horizontalScrollBar: ScrollBar = new ScrollBar({\n orientation: ScrollBar.HORIZONTAL,\n scrollingContainer: this,\n minValue: 0,\n maxValue: 1,\n })\n .setLayoutOptions(\n new BorderLayoutOptions({\n width: LayoutOptions.FILL_PARENT,\n height: LayoutOptions.WRAP_CONTENT,\n region: BorderLayoutOptions.REGION_BOTTOM,\n horizontalAlign: ALIGN.CENTER,\n verticalAlign: ALIGN.BOTTOM,\n }),\n )\n .setBackground(0xff)\n .setBackgroundAlpha(0.8) as ScrollBar;\n\n super.addChild(horizontalScrollBar);\n this.scrollBars.push(horizontalScrollBar);\n }\n if (options.scrollBars && this.scrollY)\n {\n const verticalScrollBar: ScrollBar = new ScrollBar({\n orientation: ScrollBar.VERTICAL,\n scrollingContainer: this,\n minValue: 0,\n maxValue: 1,\n })\n .setLayoutOptions(\n new BorderLayoutOptions({\n width: LayoutOptions.WRAP_CONTENT,\n height: LayoutOptions.FILL_PARENT,\n region: BorderLayoutOptions.REGION_RIGHT,\n horizontalAlign: ALIGN.RIGHT,\n verticalAlign: ALIGN.CENTER,\n }),\n )\n .setBackground(0xff)\n .setBackgroundAlpha(0.8) as ScrollBar;\n\n super.addChild(verticalScrollBar);\n this.scrollBars.push(verticalScrollBar);\n }\n\n this.boundCached = 0;\n }\n\n /**\n * Updates the mask and scroll position before rendering.\n *\n * @override\n */\n update(): void\n {\n super.update();\n\n if (this.lastWidth !== this.width || this.lastHeight !== this.height)\n {\n const of = this.expandMask;\n\n this.mask.clear();\n this.mask.lineStyle(0);\n this.mask.beginFill(0xFFFFFF, 1);\n\n if (this.radius === 0)\n {\n this.mask.drawRect(-of, -of, this.width + of, this.height + of);\n }\n else\n {\n this.mask.drawRoundedRect(-of, -of, this.width + of, this.height + of, this.radius);\n }\n\n this.mask.endFill();\n\n this.lastWidth = this.width;\n this.lastHeight = this.height;\n }\n }\n\n /**\n * Adds this scrollbar. It is expected that the given scrollbar has been\n * given proper border-layout options.\n *\n * @todo This only works for TOP, LEFT scrollbars as BOTTOM, RIGHT are occupied.\n * @param {PUXI.ScrollBar} scrollBar\n */\n addScrollBar(scrollBar: ScrollBar): ScrollWidget\n {\n super.addChild(scrollBar);\n this.scrollBars.push(scrollBar);\n\n return this;\n }\n\n /**\n * @param {PUXI.Widget[]} newChildren\n * @returns {ScrollWidget} this widget\n */\n addChild(...newChildren: Widget[]): Widget\n {\n for (let i = 0; i < newChildren.length; i++)\n {\n this.innerContainer.addChild(newChildren[i]);\n }\n\n this.getInnerBounds(true); // make sure bounds is updated instantly when a child is added\n\n return this;\n }\n\n /**\n * Updates the scroll bar values, and should be called when scrolled.\n */\n updateScrollBars(): void\n {\n for (let i = 0, j = this.scrollBars.length; i < j; i++)\n {\n const scrollBar = this.scrollBars[i];\n\n if (scrollBar.orientation === Slider.HORIZONTAL)\n {\n const x = this.getPercentPosition('x');\n\n scrollBar.value = x;\n }\n else if (scrollBar.orientation === Slider.VERTICAL)\n {\n const y = this.getPercentPosition('y');\n\n scrollBar.value = y;\n }\n }\n }\n\n getInnerBounds(force?: boolean): PIXI.Rectangle\n {\n // this is a temporary fix, because we cant rely on innercontainer height if the children is positioned > 0 y.\n if (force || performance.now() - this.boundCached > 1000)\n {\n this.innerContainer.insetContainer.getLocalBounds(this.innerBounds);\n\n this.innerBounds.height = this.innerBounds.y + this.innerContainer.height || 0;\n this.innerBounds.width = this.innerBounds.x + this.innerContainer.width || 0;\n this.boundCached = performance.now();\n }\n\n return this.innerBounds;\n }\n\n /**\n * @override\n */\n initialize(): void\n {\n super.initialize();\n\n if (this.scrollX || this.scrollY)\n {\n this.initScrolling();\n }\n }\n\n private initScrolling(): void\n {\n const container = this.innerContainer.insetContainer;\n const realPosition = new PIXI.Point();\n const {\n scrollPosition,\n targetPosition,\n } = this;\n\n // Drag scroll\n if (this.dragScrolling)\n {\n const drag: DragManager = this.eventBroker.dnd as DragManager;\n\n drag.onDragStart = (e): void =>\n {\n if (!this.scrolling)\n {\n realPosition.copyFrom(container.position);\n scrollPosition.copyFrom(container.position);\n this.scrolling = true;\n this.setScrollPosition();\n\n this.emit('scrollstart', e);\n }\n };\n\n drag.onDragMove = (_, offset): void =>\n {\n if (this.scrollX)\n {\n targetPosition.x = realPosition.x + offset.x;\n }\n if (this.scrollY)\n {\n targetPosition.y = realPosition.y + offset.y;\n }\n\n this.setScrollPosition();\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n drag.onDragEnd = (e): void =>\n {\n if (this.scrolling)\n {\n this.scrolling = false;\n this.emit('scrollend', e);\n }\n };\n }\n\n // Mouse scroll\n const scrollSpeed = new PIXI.Point();\n const scroll = new ScrollManager(this, true);\n\n scroll.onMouseScroll = (e, delta: PIXI.Point): void =>\n {\n scrollSpeed.set(-delta.x * 0.2, -delta.y * 0.2);\n this.setScrollPosition(scrollSpeed);\n };\n\n this.updateScrollBars();\n }\n\n /**\n * @param {string} direction - `'x'` or `'y'`\n * @returns {number} a value between 0 and 1 indicating how scrolling\n * has occured in that direction (called percent position).\n */\n getPercentPosition(direction: 'x' | 'y'): number\n {\n const bounds = this.getInnerBounds();\n const container = this.innerContainer.insetContainer;\n\n if (direction === 'x')\n {\n return container.x / (this.width - bounds.width);\n }\n else if (direction === 'y')\n {\n return container.y / (this.height - bounds.height);\n }\n\n return 0;\n }\n\n forcePctPosition = (direction: string, pct: number): void =>\n {\n const bounds = this.getInnerBounds();\n const container = this.innerContainer.insetContainer;\n\n if (this.scrollX && direction === 'x')\n {\n container.position[direction] = -((bounds.width - this.width) * pct);\n }\n if (this.scrollY && direction === 'y')\n {\n container.position[direction] = -((bounds.height - this.height) * pct);\n }\n\n this.scrollPosition[direction] = this.targetPosition[direction] = container.position[direction];\n };\n\n focusPosition = (pos: PIXI.Point): void =>\n {\n const bounds = this.getInnerBounds();\n const container = this.innerContainer.insetContainer;\n\n let dif;\n\n if (this.scrollX)\n {\n const x = Math.max(0, (Math.min(bounds.width, pos.x)));\n\n if (x + container.x > this.width)\n {\n dif = x - this.width;\n container.x = -dif;\n }\n else if (x + container.x < 0)\n {\n dif = x + container.x;\n container.x -= dif;\n }\n }\n if (this.scrollY)\n {\n const y = Math.max(0, (Math.min(bounds.height, pos.y)));\n\n if (y + container.y > this.height)\n {\n dif = y - this.height;\n container.y = -dif;\n }\n else if (y + container.y < 0)\n {\n dif = y + container.y;\n container.y -= dif;\n }\n }\n\n this.lastPosition.copyFrom(container.position);\n this.targetPosition.copyFrom(container.position);\n this.scrollPosition.copyFrom(container.position);\n\n this.updateScrollBars();\n };\n\n /**\n * @param {PIXI.Point}[velocity]\n */\n setScrollPosition = (velocity?: PIXI.Point): void =>\n {\n if (velocity)\n {\n this.scrollVelocity.copyFrom(velocity);\n }\n\n const container = this.innerContainer.insetContainer;\n\n if (!this.animating)\n {\n this.animating = true;\n this.lastPosition.copyFrom(container.position);\n this.targetPosition.copyFrom(container.position);\n\n PIXI.Ticker.shared.add(this.updateScrollPosition);\n }\n };\n\n /**\n * @param {number} delta\n * @protected\n */\n protected updateScrollPosition = (delta: number): void =>\n {\n this.stop = true;\n\n if (this.scrollX)\n {\n this.updateDirection('x', delta);\n }\n if (this.scrollY)\n {\n this.updateDirection('y', delta);\n }\n\n if (this.stop)\n {\n PIXI.Ticker.shared.remove(this.updateScrollPosition);\n this.animating = false;\n }\n\n this.updateScrollBars();\n };\n\n /**\n * @param {'x' | 'y'} direction\n * @param {number} delta\n * @protected\n */\n protected updateDirection = (direction: string, delta: number): void =>\n {\n const bounds = this.getInnerBounds();\n const {\n scrollPosition,\n scrollVelocity,\n targetPosition,\n lastPosition,\n } = this;\n const container = this.innerContainer.insetContainer;\n\n let min;\n\n if (direction === 'y')\n {\n min = Math.round(Math.min(0, this.height - bounds.height));\n }\n else\n {\n min = Math.round(Math.min(0, this.width - bounds.width));\n }\n\n if (!this.scrolling && Math.round(scrollVelocity[direction]) !== 0)\n {\n targetPosition[direction] += scrollVelocity[direction];\n scrollVelocity[direction] = Helpers.Lerp(\n scrollVelocity[direction],\n 0,\n (5 + 2.5 / Math.max(this.softness, 0.01)) * delta);\n\n if (targetPosition[direction] > 0)\n {\n targetPosition[direction] = 0;\n }\n else if (targetPosition[direction] < min)\n {\n targetPosition[direction] = min;\n }\n }\n\n if (!this.scrolling\n && Math.round(scrollVelocity[direction]) === 0\n && (container[direction] > 0\n || container[direction] < min))\n {\n const target = this.scrollPosition[direction] > 0 ? 0 : min;\n\n scrollPosition[direction] = Helpers.Lerp(\n scrollPosition[direction],\n target,\n (40 - (30 * this.softness)) * delta);\n this.stop = false;\n }\n else if (this.scrolling || Math.round(scrollVelocity[direction]) !== 0)\n {\n if (this.scrolling)\n {\n scrollVelocity[direction] = this.scrollPosition[direction] - lastPosition[direction];\n lastPosition.copyFrom(scrollPosition);\n }\n if (targetPosition[direction] > 0)\n {\n scrollVelocity[direction] = 0;\n scrollPosition[direction] = 100 * this.softness * (1 - Math.exp(targetPosition[direction] / -200));\n }\n else if (targetPosition[direction] < min)\n {\n scrollVelocity[direction] = 0;\n scrollPosition[direction] = min - (100 * this.softness * (1 - Math.exp((min - targetPosition[direction]) / -200)));\n }\n else\n {\n scrollPosition[direction] = targetPosition[direction];\n }\n\n this.stop = false;\n }\n\n container.position[direction] = Math.round(scrollPosition[direction]);\n };\n\n /**\n * This is fired when the user starts scrolling.\n * @event scrollstart\n */\n\n /**\n * This is fired when the user stops scrolling.\n * @event scrollend\n */\n}\n","import { InteractiveGroup } from './InteractiveGroup';\nimport { Tween } from './Tween';\nimport { EaseBase } from './Ease/EaseBase';\nimport { Widget } from './Widget';\n\n/**\n * An UI Container object\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n * @param desc {Boolean} Sort the list descending\n * @param tweenTime {Number} if above 0 the sort will be animated\n * @param tweenEase {PIXI.UI.Ease} ease method used for animation\n */\nexport class SortableList extends InteractiveGroup\n{\n desc: boolean;\n tweenTime: number;\n tweenEase: EaseBase;\n items: any[];\n\n _sortTimeout: NodeJS.Timeout;\n\n constructor(desc, tweenTime, tweenEase)\n {\n super(0, 0);\n\n this.desc = typeof desc !== 'undefined' ? desc : false;\n this.tweenTime = tweenTime || 0;\n this.tweenEase = tweenEase;\n this.items = [];\n }\n\n addChild(UIObject: any, fnValue?, fnThenBy?): void\n {\n super.addChild(UIObject);\n\n if (this.items.indexOf(UIObject) === -1)\n {\n this.items.push(UIObject);\n }\n\n if (typeof fnValue === 'function')\n {\n UIObject._sortListValue = fnValue;\n }\n\n if (typeof fnThenBy === 'function')\n {\n UIObject._sortListThenByValue = fnThenBy;\n }\n\n if (!UIObject._sortListRnd)\n {\n UIObject._sortListRnd = Math.random();\n }\n\n this.sort();\n }\n\n removeChild(UIObject): void\n {\n if (arguments.length > 1)\n {\n for (let i = 0; i < arguments.length; i++)\n {\n this.removeChild(arguments[i]);\n }\n }\n else\n {\n super.removeChild(UIObject);\n const index = this.items.indexOf(UIObject);\n\n if (index !== -1)\n {\n this.items.splice(index, 1);\n }\n\n this.sort();\n }\n }\n\n sort(instant = false): void\n {\n clearTimeout(this._sortTimeout);\n\n if (instant)\n {\n this._sort();\n\n return;\n }\n\n this._sortTimeout = setTimeout(() => { this._sort(); }, 0);\n }\n\n _sort()\n {\n const desc = this.desc;\n let y = 0;\n let alt = true;\n\n this.items.sort(function (a, b)\n {\n let res = a._sortListValue() < b._sortListValue() ? desc ? 1 : -1\n : a._sortListValue() > b._sortListValue() ? desc ? -1 : 1 : 0;\n\n if (res === 0 && a._sortListThenByValue && b._sortListThenByValue)\n {\n res = a._sortListThenByValue() < b._sortListThenByValue() ? desc ? 1 : -1\n : a._sortListThenByValue() > b._sortListThenByValue() ? desc ? -1 : 1 : 0;\n }\n if (res === 0)\n {\n res = a._sortListRnd > b._sortListRnd ? 1\n : a._sortListRnd < b._sortListRnd ? -1 : 0;\n }\n\n return res;\n });\n\n for (let i = 0; i < this.items.length; i++)\n {\n const item = this.items[i];\n\n alt = !alt;\n\n if (this.tweenTime > 0)\n {\n Tween.fromTo(item, this.tweenTime, { x: item.x, y: item.y }, { x: 0, y }, this.tweenEase);\n }\n else\n {\n item.x = 0;\n item.y = y;\n }\n y += item.height;\n if (typeof item.altering === 'function')\n { item.altering(alt); }\n }\n\n // force it to update parents when sort animation is done (prevent scrolling container bug)\n if (this.tweenTime > 0)\n {\n setTimeout(() =>\n {\n this.updatesettings(false, true);\n }, this.tweenTime * 1000);\n }\n }\n}\n\n","import { Widget } from './Widget';\nimport * as PIXI from 'pixi.js';\n\n/**\n * A sliced sprite with dynamic width and height.\n *\n * @class\n * @memberof PUXI\n * @param Texture {PIXI.Texture} the texture for this SliceSprite\n * @param BorderWidth {Number} Width of the sprite borders\n * @param horizontalSlice {Boolean} Slice the sprite horizontically\n * @param verticalSlice {Boolean} Slice the sprite vertically\n * @param [tile=false] {Boolean} tile or streach\n */\nexport class SliceSprite extends Widget\n{\n ftl: PIXI.Rectangle;\n ftr: PIXI.Rectangle;\n\n fbl: PIXI.Rectangle;\n fbr: PIXI.Rectangle;\n\n ft: PIXI.Rectangle;\n fb: PIXI.Rectangle;\n fr: PIXI.Rectangle;\n fl: PIXI.Rectangle;\n ff: PIXI.Rectangle;\n\n stl: PIXI.Sprite;\n str: PIXI.Sprite;\n sbl: PIXI.Sprite;\n sbr: PIXI.Sprite;\n\n st: PIXI.Sprite;\n sb: PIXI.Sprite;\n sl: PIXI.Sprite;\n sr: PIXI.Sprite;\n\n sf: PIXI.Sprite;\n\n bw: number;\n vs: boolean;\n hs: boolean;\n t: PIXI.BaseTexture;\n f: PIXI.Rectangle;\n\n tile: any;\n\n constructor(texture: PIXI.Texture, borderWidth, horizontalSlice, verticalSlice, tile)\n {\n super(texture.width, texture.height);\n\n this.bw = borderWidth || 5;\n this.vs = typeof verticalSlice !== 'undefined' ? verticalSlice : true;\n this.hs = typeof horizontalSlice !== 'undefined' ? horizontalSlice : true;\n this.t = texture.baseTexture;\n this.f = texture.frame;\n this.tile = tile;\n\n if (this.hs)\n {\n this.setting.minWidth = borderWidth * 2;\n }\n if (this.vs)\n {\n this.setting.minHeight = borderWidth * 2;\n }\n\n /**\n * Updates the sliced sprites position and size\n *\n * @private\n */\n this.update = function ()\n {\n if (!this.initialized) return;\n if (vs && hs)\n {\n str.x = sbr.x = sr.x = this._width - bw;\n sbl.y = sbr.y = sb.y = this._height - bw;\n sf.width = st.width = sb.width = this._width - bw * 2;\n sf.height = sl.height = sr.height = this._height - bw * 2;\n }\n else if (hs)\n {\n sr.x = this._width - bw;\n sl.height = sr.height = sf.height = this._height;\n sf.width = this._width - bw * 2;\n }\n else\n { // vs\n sb.y = this._height - bw;\n st.width = sb.width = sf.width = this._width;\n sf.height = this._height - bw * 2;\n }\n\n if (this.tint !== null)\n {\n sf.tint = this.tint;\n if (vs && hs) stl.tint = str.tint = sbl.tint = sbr.tint = this.tint;\n if (hs) sl.tint = sr.tint = this.tint;\n if (vs) st.tint = sb.tint = this.tint;\n }\n\n if (this.blendMode !== null)\n {\n sf.blendMode = this.blendMode;\n if (vs && hs) stl.blendMode = str.blendMode = sbl.blendMode = sbr.blendMode = this.blendMode;\n if (hs) sl.blendMode = sr.blendMode = this.blendMode;\n if (vs) st.blendMode = sb.blendMode = this.blendMode;\n }\n };\n }\n\n initialize()\n {\n super.initialize();\n const { f, bw } = this;\n\n // get frames\n if (this.vs && this.hs)\n {\n this.ftl = new PIXI.Rectangle(f.x, f.y, bw, bw);\n this.ftr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, bw);\n this.fbl = new PIXI.Rectangle(f.x, f.y + f.height - bw, bw, bw);\n this.fbr = new PIXI.Rectangle(f.x + f.width - bw, f.y + f.height - bw, bw, bw);\n this.ft = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, bw);\n this.fb = new PIXI.Rectangle(f.x + bw, f.y + f.height - bw, f.width - bw * 2, bw);\n this.fl = new PIXI.Rectangle(f.x, f.y + bw, bw, f.height - bw * 2);\n this.fr = new PIXI.Rectangle(f.x + f.width - bw, f.y + bw, bw, f.height - bw * 2);\n this.ff = new PIXI.Rectangle(f.x + bw, f.y + bw, f.width - bw * 2, f.height - bw * 2);\n }\n else if (this.hs)\n {\n this.fl = new PIXI.Rectangle(this.f.x, f.y, bw, f.height);\n this.fr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, f.height);\n this.ff = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, f.height);\n }\n else\n { // vs\n this.ft = new PIXI.Rectangle(f.x, f.y, f.width, bw);\n this.fb = new PIXI.Rectangle(f.x, f.y + f.height - bw, f.width, bw);\n this.ff = new PIXI.Rectangle(f.x, f.y + bw, f.width, f.height - bw * 2);\n }\n\n // TODO: swap frames if rotation\n\n const { t, ff, fl, fr, ft, fb } = this;\n\n // make sprites\n this.sf = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, ff))\n : new PIXI.Sprite(new PIXI.Texture(t, ff));\n this.contentContainer.addChildAt(this.sf, 0);\n\n if (this.vs && this.hs)\n {\n this.stl = new PIXI.Sprite(new PIXI.Texture(t, this.ftl));\n this.str = new PIXI.Sprite(new PIXI.Texture(t, this.ftr));\n this.sbl = new PIXI.Sprite(new PIXI.Texture(t, this.fbl));\n this.sbr = new PIXI.Sprite(new PIXI.Texture(t, this.fbr));\n this.contentContainer.addChildAt(this.stl, 0);\n this.contentContainer.addChildAt(this.str, 0);\n this.contentContainer.addChildAt(this.sbl, 0);\n this.contentContainer.addChildAt(this.sbr, 0);\n }\n if (hs)\n {\n this.sl = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, fl))\n : new PIXI.Sprite(new PIXI.Texture(t, fl));\n this.sr = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, fr))\n : new PIXI.Sprite(new PIXI.Texture(t, fr));\n\n this.contentContainer.addChildAt(this.sl, 0);\n this.contentContainer.addChildAt(this.sr, 0);\n }\n if (this.vs)\n {\n this.st = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, ft))\n : new PIXI.Sprite(new PIXI.Texture(t, ft));\n this.sb = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, fb))\n : new PIXI.Sprite(new PIXI.Texture(t, fb));\n this.contentContainer.addChildAt(this.st, 0);\n this.contentContainer.addChildAt(this.sb, 0);\n }\n\n // set constant position and sizes\n if (this.vs && this.hs)\n {\n this.st.x = bw;\n this.sb.x = bw;\n this.sl.y = bw;\n this.sr.y = bw;\n this.stl.width = bw;\n this.str.width = bw;\n this.sbl.width = bw;\n this.sbr.width = bw;\n this.stl.height = bw;\n this.str.height = bw;\n this.sbl.height = bw;\n this.sbr.height = bw;\n }\n\n if (this.hs)\n {\n this.sf.x = this.sl.width = this.sr.width = bw;\n }\n if (this.vs)\n {\n this.sf.y = this.st.height = this.sb.height = bw;\n }\n }\n\n update(): void\n {\n // NO updates\n }\n}\n\n","import { Stage } from '../Stage';\nimport { Widget } from '../Widget';\nimport * as PIXI from 'pixi.js';\n\nexport abstract class Controller extends PIXI.utils.EventEmitter\n{\n stage: Stage;\n\n constructor(stage: Stage)\n {\n super();\n this.stage = stage;\n }\n\n abstract in(widget: T): any;\n\n abstract out(widget: T): any;\n}\n\n/**\n * A controller handles a stage-level state that can be held by wigets. For example,\n * `PUXI.FocusController` handles which widget is focused.\n *\n * @memberof PUXI\n * @class Controller\n */\n\n/**\n * Enables the widget to enter the controller's state.\n *\n * @memberof PUXI.Controller#\n * @method in\n * @param {PUXI.Widget} widget\n */\n\n/**\n * Disables the widget from the controller's state.\n *\n * @memberof PUXI.Controller#\n * @method out\n * @param {PUXI.Widget} widget\n */\n","import { Controller } from './Controller';\nimport { CheckBox } from '../CheckBox';\nimport { Stage } from '../Stage';\n\nexport type CheckGroup = string;\n\n/**\n * @memberof PUXI\n * @typedef {string} CheckGroup\n */\n\ninterface CBGroup\n{\n checks: Array;\n selected: CheckBox;\n}\n\n/**\n * Check boxes use this controller to deselect other checkboxes in the group when\n * they are selected.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Controller\n */\nexport class CheckBoxGroupController extends Controller\n{\n protected checkGroups: Map;\n\n constructor(stage: Stage)\n {\n super(stage);\n this.checkGroups = new Map();\n }\n\n /**\n * @param {PUXI.CheckBox} widget\n * @param {PUXI.CheckGroup} checkGroup\n * @override\n */\n in(widget: CheckBox, checkGroup?: CheckGroup): void\n {\n if (!checkGroup)\n {\n throw new Error('Default check groups don\\'t exist!');\n }\n\n const group = this.checkGroups.get(checkGroup) || this.initGroup(checkGroup);\n\n group.checks.push(widget);\n widget.checkGroup = checkGroup;\n }\n\n /**\n * @override\n */\n out(widget: CheckBox): void\n {\n const group = this.checkGroups.get(widget.checkGroup);\n const i = group.checks.indexOf(widget);\n\n if (i > 0)\n {\n group.checks.splice(i, 1);\n }\n\n widget.checkGroup = null;\n }\n\n /**\n * Called when a checkbox is selected. Do not call from outside.\n *\n * @param {CheckBox} widget\n */\n notifyCheck(widget: CheckBox): void\n {\n const group = this.checkGroups.get(widget.checkGroup);\n\n if (!group)\n {\n return;\n }\n\n const { checks } = group;\n\n for (let i = 0, j = checks.length; i < j; i++)\n {\n if (checks[i] !== widget)\n {\n checks[i].checked = false;\n }\n }\n\n group.selected = widget;\n }\n\n /**\n * @param {PUXI.CheckGroup} group\n * @returns {CheckBox} the selected checkbox in the group\n */\n getSelected(group: CheckGroup): CheckBox\n {\n return this.checkGroups.get(group)?.selected;\n }\n\n /**\n * Ensures that the check group exists in `this.checkGroups`.\n *\n * @param {PUXI.CheckGroup} id\n * @protected\n */\n protected initGroup(id: CheckGroup): CBGroup\n {\n const cgroup: CBGroup = {\n checks: [],\n selected: null,\n };\n\n this.checkGroups.set(id, cgroup);\n\n return cgroup;\n }\n}\n","import { Controller } from './Controller';\nimport { Stage } from '../Stage';\nimport { IFocusable } from '../IFocusable';\n\nexport type TabGroup = string;\n\n/**\n * Pressing tab on a focused widget will make the next widget its tab group\n * focused. If no tab group is specified for a focusable widget, then it\n * has the `'default'` tab group.\n *\n * @memberof PUXI\n * @typedef {string} TabGroup\n */\n\n/**\n * @memberof PUXI\n * @class\n * @extends PUXI.Controller\n */\nexport class FocusController extends Controller\n{\n stage: Stage;\n\n protected tabGroups: Map;\n protected currentItem: IFocusable;\n\n useTab: boolean;\n useForward: boolean;\n useBack: boolean;\n\n constructor(stage: Stage)\n {\n super(stage);\n\n /**\n * Map of tab-group names to the widgets in those groups.\n * @member {Map}\n * @protected\n */\n this.tabGroups = new Map();\n\n /**\n * Whether to enable tab-based focus movement.\n * @member {boolean}\n */\n this.useTab = true;\n\n /**\n * Whether to enable forward arrow key focus movement.\n * @member {boolean}\n */\n this.useForward = true;\n\n /**\n * Whether to enable back arrow key focus movement.\n * @member {boolean}\n */\n this.useBack = true;\n }\n\n /**\n * Adds the (focusable) widget to the tab group so that pressing tab repeatedly\n * will eventually bring it into focus.\n *\n * @param {PUXI.IFocusable} widget - the widget to add\n * @param {number}[tabIndex=0] - unique index for the widget in tab group used for ordering\n * @param {PUXI.TabGroup}[tabGroup='default'] - tab group name\n */\n in(widget: IFocusable, tabIndex = 0, tabGroup = 'default'): void\n {\n let widgets = this.tabGroups.get(tabGroup);\n\n if (!widgets)\n {\n widgets = [];\n this.tabGroups.set(tabGroup, widgets);\n }\n\n const i = widgets.indexOf(widget);\n\n // Push widget into tab group list if not present already.\n if (i === -1)\n {\n widget.tabIndex = tabIndex !== undefined ? tabIndex : -1;\n widget.tabGroup = tabGroup;\n\n widgets.push(widget);\n widgets.sort((a, b) => a.tabIndex - b.tabIndex);\n }\n }\n\n /**\n * @param {PUXI.IFocusable} widget\n * @override\n */\n out(widget: IFocusable): void\n {\n const widgets = this.tabGroups.get(widget.tabGroup);\n\n if (!widgets)\n {\n return;\n }\n\n const i = widgets.indexOf(widget);\n\n if (i !== -1)\n {\n // Widgets should already be sorted & so deleting should not unsort it.\n widgets.splice(i, 1);\n }\n }\n\n /**\n * Called when a widget comes into focus. Do not call this yourself.\n *\n * @param {IFocusable} widget\n */\n notifyFocus(widget: IFocusable): void\n {\n const lastItem = this.currentItem;\n\n if (lastItem)\n {\n lastItem.blur();\n this.emit('blur', lastItem);\n }\n\n this.currentItem = widget;\n\n this.emit('focus', widget);\n this.emit('focusChanged', widget, lastItem);\n }\n\n /**\n * Clears the currently focused item without blurring it. It is called\n * when a widget goes out of focus.\n */\n notifyBlur(): void\n {\n this.emit('blur', this.currentItem);\n this.emit('focusChanged', null, this.currentItem);\n\n this.currentItem = null;\n }\n\n /**\n * Brings the widget into focus.\n *\n * @param {IFocusable} item\n */\n focus(item: IFocusable): void\n {\n const lastItem = this.currentItem;\n\n if (lastItem)\n {\n lastItem.blur();\n this.emit('blur', lastItem);\n }\n\n item.focus();\n\n this.emit('focus', item);\n this.emit('focusChanged', item, lastItem);\n }\n\n /**\n * Blurs the currently focused widget out of focus.\n */\n blur(): void\n {\n if (this.currentItem)\n {\n this.currentItem.blur();\n\n this.emit('blur', this.currentItem);\n this.emit('focusChanged', null, this.currentItem);\n\n this.currentItem = null;\n }\n }\n\n /**\n * Called when tab is pressed on a focusable widget.\n */\n onTab(): void\n {\n const { tabGroups, currentItem } = this;\n\n if (currentItem)\n {\n const tabGroup = tabGroups.get(currentItem.tabGroup);\n\n let i = tabGroup.indexOf(currentItem) + 1;\n\n if (i >= tabGroup.length)\n {\n i = 0;\n }\n\n this.focus(tabGroup[i]);\n }\n }\n\n /**\n * Focuses the next item without wrapping, i.e. it does not go to the first\n * item if the current one is the last item. This is called when the user\n * presses the forward arrow key.\n */\n onForward(): void\n {\n if (!this.useForward)\n {\n return;\n }\n\n const { currentItem, tabGroups } = this;\n\n if (currentItem)\n {\n const tabGroup = tabGroups.get(currentItem.tabGroup);\n\n let i = tabGroup.indexOf(currentItem) + 1;\n\n if (i >= tabGroup.length)\n {\n i = tabGroup.length - 1;\n }\n\n this.focus(tabGroup[i]);\n }\n }\n\n /**\n * Focuses the last item without wrapping, i.e. it does not go to the last\n * item if the current item is the first one. This is called when the user\n * presses the back arrow button.\n */\n onBack(): void\n {\n const { currentItem, tabGroups } = this;\n\n if (currentItem)\n {\n const tabGroup = tabGroups.get(currentItem.tabGroup);\n let i = tabGroup.indexOf(currentItem) - 1;\n\n if (i < 0) i = 0;\n\n this.focus(tabGroup[i]);\n }\n }\n\n /**\n * Fired when a widget gains focus.\n * @event focus\n * @param {PUXI.IFocusable} widget - the widget that gained focus.\n */\n\n /**\n * Fired when a widget looses focus.\n * @event blur\n * @param {PUXI.IFocusable} widget - the widget that lost focus.\n */\n\n /**\n * Fired when a new widget comes into focus or one looses focus.\n * @event focusChanged\n * @param {PUXI.IFocusable}[newFocus] - the widget that came into focus. It may\n * be null if only a blur occured.\n * @param {PUXI.IFocusable}[oldFocus] - the widget that lost focus. It may be\n * null if a widget gained focused for the first time.\n */\n}\n","import { Widget } from './Widget';\nimport * as PIXI from 'pixi.js';\nimport { MeasureMode } from './IMeasurable';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { FocusController, Controller, CheckBoxGroupController } from './ctl';\n\n/**\n * The stage is the root node in the PUXI scene graph. It does not provide a\n * sophisticated layout model; however, it will accept constraints defined by\n * `PUXI.FastLayoutOptions` or `PUXI.LayoutOptions` in its children.\n *\n * The stage is not a `PUXI.Widget` and its dimensions are always fixed.\n *\n * @memberof PUXI\n * @class\n * @extends PIXI.Container\n */\nexport class Stage extends PIXI.Container\n{\n __width: number;\n __height: number;\n minWidth: number;\n minHeight: number;\n initialized: boolean;\n widgetChildren: Widget[];\n\n stage: any;\n\n private _checkBoxGroupCtl: CheckBoxGroupController;\n private _focusCtl: FocusController;\n\n protected background: PIXI.Container;\n\n /**\n * @param {number} width - width of the stage\n * @param {number} height - height of the stage\n */\n constructor(width: number, height: number)\n {\n super();\n\n this.__width = width;\n this.__height = height;\n this.minWidth = 0;\n this.minHeight = 0;\n\n this.widgetChildren = [];\n this.interactive = true;\n this.stage = this;\n this.hitArea = new PIXI.Rectangle(0, 0, 0, 0);\n this.initialized = true;\n this.resize(width, height);\n\n this._checkBoxGroupCtl = new Stage.CHECK_BOX_GROUP_CONTROLLER(this);\n this._focusCtl = new Stage.FOCUS_CONTROLLER(this);\n }\n\n public measureAndLayout(): void\n {\n if (this.background)\n {\n this.background.width = this.width;\n this.background.height = this.height;\n }\n\n for (let i = 0, j = this.widgetChildren.length; i < j; i++)\n {\n const widget = this.widgetChildren[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n\n const widthMeasureMode = lopt.width < LayoutOptions.MAX_DIMEN\n ? MeasureMode.EXACTLY\n : MeasureMode.AT_MOST;\n const heightMeasureMode = lopt.height < LayoutOptions.MAX_DIMEN\n ? MeasureMode.EXACTLY\n : MeasureMode.AT_MOST;\n const loptWidth = (Math.abs(lopt.width) < 1) ? lopt.width * this.width : lopt.width;\n const loptHeight = (Math.abs(lopt.height) < 1) ? lopt.height * this.height : lopt.height;\n\n widget.measure(\n widthMeasureMode === MeasureMode.EXACTLY ? loptWidth : this.width,\n heightMeasureMode === MeasureMode.EXACTLY ? loptHeight : this.height,\n widthMeasureMode,\n heightMeasureMode);\n\n let x = lopt.x ? lopt.x : 0;\n let y = lopt.y ? lopt.y : 0;\n\n if (Math.abs(x) < 1)\n {\n x *= this.width;\n }\n if (Math.abs(y) < 1)\n {\n y *= this.height;\n }\n\n const anchor = lopt.anchor || FastLayoutOptions.DEFAULT_ANCHOR;\n const l = x - (anchor.x * widget.getMeasuredWidth());\n const t = y - (anchor.y * widget.getMeasuredHeight());\n\n widget.layout(l, t,\n l + widget.getMeasuredWidth(),\n t + widget.getMeasuredHeight(),\n true);\n }\n }\n\n getBackground(): PIXI.Container\n {\n return this.background;\n }\n\n setBackground(bg: PIXI.Container): void\n {\n if (this.background)\n {\n super.removeChild(this.background);\n }\n\n this.background = bg;\n\n if (bg)\n {\n super.addChildAt(bg, 0);\n\n this.background.width = this.width;\n this.background.height = this.height;\n }\n }\n\n private update(widgets: Widget[]): void\n {\n this.emit('preupdate', this);\n\n for (let i = 0, j = widgets.length; i < j; i++)\n {\n const widget = widgets[i];\n\n widget.stage = this;\n\n if (!widget.initialized)\n {\n widget.initialize();\n }\n\n this.update(widget.widgetChildren);\n widget.update();\n }\n\n this.emit('postupdate', this);\n }\n\n render(renderer: PIXI.Renderer): void\n {\n this.update(this.widgetChildren);\n super.render(renderer);\n }\n\n addChild(UIObject: Widget): void\n {\n const argumentLenght = arguments.length;\n\n if (argumentLenght > 1)\n {\n for (let i = 0; i < argumentLenght; i++)\n {\n this.addChild(arguments[i]);\n }\n }\n else\n {\n if (UIObject.parent)\n {\n UIObject.parent.removeChild(UIObject);\n }\n\n UIObject.parent = this;\n this.widgetChildren.push(UIObject);\n super.addChild(UIObject.insetContainer);\n // UIObject.updatesettings(true);\n }\n\n this.measureAndLayout();\n }\n\n removeChild(UIObject: Widget): void\n {\n const argumentLenght = arguments.length;\n\n if (argumentLenght > 1)\n {\n for (let i = 0; i < argumentLenght; i++)\n {\n this.removeChild(arguments[i]);\n }\n }\n else\n {\n super.removeChild(UIObject.insetContainer);\n\n const index = this.widgetChildren.indexOf(UIObject);\n\n if (index !== -1)\n {\n this.children.splice(index, 1);\n UIObject.parent = null;\n }\n }\n\n this.measureAndLayout();\n }\n\n resize(width?: number, height?: number): void\n {\n this.width = width;\n this.height = height;\n\n if (this.hitArea)\n {\n (this.hitArea as PIXI.Rectangle).width = this.__width;\n (this.hitArea as PIXI.Rectangle).height = this.__height;\n }\n\n this.measureAndLayout();\n }\n\n get width(): number\n {\n return this.__width;\n }\n set width(val: number)\n {\n if (!isNaN(val))\n {\n this.__width = val;\n this.resize();\n }\n }\n\n get height(): number\n {\n return this.__height;\n }\n set height(val: number)\n {\n if (!isNaN(val))\n {\n this.__height = val;\n this.resize();\n }\n }\n\n /**\n * The check box group controller for check boxes in this stage.\n *\n * @member {PUXI.CheckBoxGroupController}\n */\n get checkBoxGroupController(): CheckBoxGroupController\n {\n return this._checkBoxGroupCtl;\n }\n\n /**\n * The focus controller for widgets in this stage. You can use this to bring a\n * widget into focus.\n *\n * @member {PUXI.FocusController}\n */\n get focusController(): FocusController\n {\n return this._focusCtl;\n }\n\n /**\n * Use this to override which class is used for the check box group controller. It\n * should extend from `PUXI.CheckBoxGroupController`.\n *\n * @static\n */\n static CHECK_BOX_GROUP_CONTROLLER: typeof CheckBoxGroupController = CheckBoxGroupController;\n\n /**\n * Use this to override which class is used for the focus controller. It should\n * extend from `PUXI.FocusController`.\n *\n * @static\n */\n static FOCUS_CONTROLLER: typeof FocusController = FocusController;\n}\n","import * as PIXI from 'pixi.js';\n\nexport type StyleData = {\n [id: string]: any;\n backgroundColor?: string | number;\n background?: PIXI.Container;\n fontFamily?: string;\n fontSize?: number;\n paddingLeft?: number;\n paddingTop?: number;\n paddingRight?: number;\n paddingBottom?: number;\n padding?: number;\n\n// [':hover']?: StyleData;\n// [':focus']?: StyleData;\n};\n\n/**\n * A StyleSheet provides a mechansim to style widgets in a shared fashion.\n */\nexport class Style extends PIXI.utils.EventEmitter\n{\n public dirtyID: number;\n\n private data: StyleData;\n private extends: Style[];\n\n private computedData: StyleData;\n private computedDirty: boolean;\n\n constructor(data: StyleData = {})\n {\n super();\n\n this.dirtyID = 0;\n\n this.data = data;\n this.extends = [];\n\n this.computedData = data;\n this.computedDirty = false;\n }\n\n /**\n * @param prop\n */\n getProperty(prop: string): any\n {\n if (this.computedDirty)\n {\n this.compute();\n }\n\n return this.computedData[prop];\n }\n\n /**\n * @param props\n * @example\n * style.getProperties('paddingLeft', 'paddingRight')\n */\n getProperties(...props: string[]): Record\n {\n if (this.computedDirty)\n {\n this.compute();\n }\n\n const result = { };\n\n for (let i = 0, j = props.length; i < j; i++)\n {\n result[props[i]] = this.computedData[props[i]];\n }\n\n return result;\n }\n\n /**\n * @param prop\n * @param value\n */\n setProperty(prop: string, value: any): void\n {\n // Ensure computedData is up-to-date to ensure child styles get the correct information.\n if (this.computedDirty)\n {\n this.compute();\n }\n\n this.data[prop] = value;\n this.computedData[prop] = value;\n this.emit('setProperty', prop, value, this);\n\n ++this.dirtyID;\n }\n\n /**\n * Extend the given style so that properties not set on this style are derived from it. If multiple styles\n * are extended, the ones extended later have a higher priority.\n *\n * @param style\n */\n extend(style: Style): void\n {\n this.extends.push(style);\n this.computedDirty = true;\n\n ++this.dirtyID;\n\n // Recompute the set-property for this style\n style.on('setProperty', this.onParentSetProperty);\n }\n\n /**\n * Recomputes the style data\n */\n private compute(): void\n {\n const superStyles = this.extends;\n\n this.computedData = {};\n\n for (let i = 0, j = superStyles.length; i < j; i++)\n {\n Object.assign(this.computedData, superStyles[i].computedData);\n }\n\n this.computedDirty = false;\n }\n\n private onParentSetProperty = (propertyName: string, value: any, style: Style): void =>\n {\n const superStyles = this.extends;\n const superIndex = superStyles.indexOf(style);\n\n if (superIndex === -1)\n {\n throw new Error('onParentSetProperty triggered when by a non-super style.');\n }\n\n const thisValue = this.computedData[propertyName];\n\n for (let i = superIndex, j = superStyles.length; i < j; i++)\n {\n const superStyle = superStyles[i];\n\n if (superStyle.computedData[propertyName])\n {\n this.computedData[propertyName] = superStyle.computedData[propertyName];\n }\n }\n\n if (this.data[propertyName])\n {\n this.computedData[propertyName] = this.data[propertyName];\n }\n\n if (thisValue !== this.computedData[propertyName])\n {\n this.emit('setProperty', propertyName, this.computedData[propertyName], this);\n }\n };\n\n /**\n * @param data\n * @example\n * Style.create({\n * backgroundColor: 0xabcdef,\n * padding: 8\n * })\n */\n static create(data: StyleData): Style\n {\n return new Style(data);\n }\n}\n","import { Style, StyleData } from './Style';\n\nexport class StyleSheet\n{\n [id: string]: Style;\n\n static create(sheetData: { [id: string]: StyleData }): StyleSheet\n {\n const sheet = new StyleSheet();\n\n for (const key in sheetData)\n {\n sheet[key] = Style.create(sheetData[key]);\n }\n\n return sheet;\n }\n}\n","import { FocusableWidget, IFocusableOptions } from './FocusableWidget';\nimport { ScrollWidget } from './ScrollWidget';\nimport * as PIXI from 'pixi.js';\nimport { LayoutOptions } from './layout-options';\nimport { DragManager } from './event/DragManager';\n\n/**\n * @memberof PUXI\n * @interface\n */\ninterface ITextInputOptions extends IFocusableOptions\n{\n multiLine?: boolean;\n style?: PIXI.TextStyle;\n background?: PIXI.Container;\n selectedColor?: string | number[];\n selectedBackgroundColor?: string;\n width?: number;\n height?: number;\n padding?: number;\n paddingTop?: number;\n paddingBottom?: number;\n paddingLeft?: number;\n paddingRight?: number;\n tabIndex?: number;\n tabGroup?: number;\n maxLength?: number;\n caretWidth?: number;\n lineHeight?: number;\n value?: string;\n}\n\n// Dummy element created for mobile keyboards\nlet mockDOMInput: any;\n\nfunction initMockDOMInput(): void\n{\n // create temp input (for mobile keyboard)\n if (typeof mockDOMInput === 'undefined')\n {\n mockDOMInput = document.createElement('INPUT');\n mockDOMInput.setAttribute('type', 'text');\n mockDOMInput.setAttribute('id', '_pui_tempInput');\n mockDOMInput.setAttribute('style', 'position:fixed; left:-10px; top:-10px; width:0px; height: 0px;');\n document.body.appendChild(mockDOMInput);\n }\n}\n\n/**\n * An UI text object\n *\n * @class\n * @extends PIXI.UI.InputBase\n * @memberof PIXI.UI\n */\nexport class TextInput extends FocusableWidget\n{\n protected options: ITextInputOptions;\n\n protected _listeners: any;\n protected _dirtyText: boolean;\n protected _value: string;\n protected _lastValue: string;\n\n protected _lastWidth: number;\n protected _lastHeight: number;\n\n protected selection: PIXI.Graphics;\n protected textContainer: ScrollWidget;\n\n public maxLength: number;\n\n protected chars: any[];\n protected multiLine: boolean;\n protected color: string;\n protected selectedColor: string;\n protected selectedBackgroundColor: string;\n protected tempText: PIXI.Text;\n protected textHeight: number;\n protected lineHeight: number;\n\n protected caret: PIXI.Graphics;\n protected caretInterval: NodeJS.Timeout;\n protected si: number; // startIndex\n protected sie: boolean; // startIndexEnd\n protected ei: number; // endIndex\n protected eie: boolean; // endIndexEnd\n protected sp: PIXI.Point; // startposition\n protected ds: PIXI.Point; // dragStart\n protected de: PIXI.Point; // dragend\n protected rdd: boolean; // Reverse drag direction\n protected vrdd: boolean; // vertical Reverse drag direction\n\n protected selectionStart: number;\n protected selectionEnd: number;\n protected hasSelection: boolean;\n protected t: number; // timestamp\n protected cc: number; // click counter\n protected textLengthPX: number;\n protected textHeightPX: number;\n protected lineIndexMax: number;\n\n protected ctrlDown: boolean;\n protected shiftDown: boolean;\n protected shiftKey: number;\n protected ctrlKey: number;\n protected cmdKey: number;\n\n protected _sp: PIXI.Point;\n\n /**\n * @param {PUXI.ITextInputOptions} options\n * @param {string} options.value Text content\n * @param {boolean} [options.multiLine=false] Multiline input\n * @param options.style {PIXI.TextStyle} Style used for the Text\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\n * @param [options.selectedColor='#ffffff'] {String|Array} Fill color of selected text\n * @param [options.selectedBackgroundColor='#318cfa'] {String} BackgroundColor of selected text\n * @param [options.width=150] {Number} width of input\n * @param [options.height=20] {Number} height of input\n * @param [options.padding=3] {Number} input padding\n * @param [options.paddingTop=0] {Number} input padding\n * @param [options.paddingBottom=0] {Number} input padding\n * @param [options.paddingLeft=0] {Number} input padding\n * @param [options.paddingRight=0] {Number} input padding\n * @param [options.tabIndex=0] {Number} input tab index\n * @param [options.tabGroup=0] {Number|String} input tab group\n * @param [options.maxLength=0] {Number} 0 = unlimited\n * @param [options.caretWidth=1] {Number} width of the caret\n * @param [options.lineHeight=0] {Number} 0 = inherit from text\n */\n constructor(options: ITextInputOptions)\n {\n super(options);\n initMockDOMInput();\n\n this.options = options;\n\n this._listeners = {};\n this._dirtyText = true;\n this.maxLength = options.maxLength || 0;\n this._value = this._lastValue = options.value || '';\n\n if (this.maxLength)\n {\n this._value = this._value.slice(0, this.maxLength);\n }\n\n this.chars = [];\n this.multiLine = options.multiLine !== undefined ? options.multiLine : false;\n this.color = options.style && options.style.fill ? options.style.fill : '#000000';\n this.selectedColor = options.selectedColor || '#ffffff';\n this.selectedBackgroundColor = options.selectedBackgroundColor || '#318cfa';\n this.tempText = new PIXI.Text('1', options.style);\n this.textHeight = this.tempText.height;\n this.lineHeight = options.lineHeight || this.textHeight || this._height;\n\n this.tempText.destroy();\n\n // set cursor\n // this.container.cursor = \"text\";\n\n // selection graphics\n this.selection = new PIXI.Graphics();\n this.selection.visible = false;\n this.selection._startIndex = 0;\n this.selection._endIndex = 0;\n\n // caret graphics\n this.caret = new PIXI.Graphics();\n this.caret.visible = false;\n this.caret._index = 0;\n this.caret.lineStyle(\n options.caretWidth || 1,\n typeof(this.color) == \"number\" ? this.color : parseInt(this.color.slice(1), 16),\n 1\n );\n this.caret.moveTo(0, 0);\n this.caret.lineTo(0, this.textHeight);\n\n // var padding\n const paddingLeft = options.paddingLeft !== undefined ? options.paddingLeft : options.padding;\n const paddingRight = options.paddingRight !== undefined ? options.paddingRight : options.padding;\n const paddingBottom = options.paddingBottom !== undefined ? options.paddingBottom : options.padding;\n const paddingTop = options.paddingTop !== undefined ? options.paddingTop : options.padding;\n\n // insert text container (scrolling container)\n this.textContainer = new ScrollWidget({\n scrollX: !this.multiLine,\n scrollY: this.multiLine,\n dragScrolling: this.multiLine,\n expandMask: 2,\n softness: 0.2,\n overflowX: 40,\n overflowY: 40,\n }).setPadding(\n paddingLeft || 3,\n paddingTop || 3,\n paddingRight || 3,\n paddingBottom || 3,\n ).setLayoutOptions(\n new LayoutOptions(\n LayoutOptions.FILL_PARENT,\n LayoutOptions.FILL_PARENT,\n ),\n ) as ScrollWidget;\n\n this.addChild(this.textContainer);\n\n if (this.multiLine)\n {\n this._useNext = this._usePrev = false;\n this.textContainer.dragRestrictAxis = 'y';\n this.textContainer.dragThreshold = 5;\n this.dragRestrictAxis = 'x';\n this.dragThreshold = 5;\n }\n\n // selection Vars\n this.sp = new PIXI.Point(); // startposition\n this._sp = new PIXI.Point();\n this.ds = new PIXI.Point(); // dragStart\n this.de = new PIXI.Point(); // dragend\n this.rdd = false; // Reverse drag direction\n this.vrdd = false; // vertical Reverse drag direction\n this.selectionStart = -1;\n this.selectionEnd = -1;\n this.hasSelection = false;\n this.t = performance.now(); // timestamp\n this.cc = 0; // click counter\n this.textLengthPX = 0;\n this.textHeightPX = 0;\n this.lineIndexMax = 0;\n this.ctrlDown = false;\n this.shiftDown = false;\n this.shiftKey = 16;\n this.ctrlKey = 17;\n this.cmdKey = 91;\n\n this.setupDrag();\n }\n\n setupDrag(): void\n {\n const event = new DragManager(this);\n\n event.onPress = (e, mouseDown): void =>\n {\n if (mouseDown)\n {\n const timeSinceLast = performance.now() - this.t;\n\n this.t = performance.now();\n if (timeSinceLast < 250)\n {\n this.cc++;\n if (this.cc > 1)\n {\n this.select();\n }\n else\n {\n this.innerContainer.toLocal(this.sp, undefined, this.ds, true);\n this.updateClosestIndex(this.ds, true);\n const c = this.chars[this.si];\n\n if (c)\n {\n if (c.wordIndex != -1)\n {\n this.selectWord(c.wordIndex);\n }\n else\n {\n this.selectRange(this.si, this.si);\n }\n }\n }\n }\n else\n {\n this.cc = 0;\n this.sp.copyFrom(e.data.global);\n this.innerContainer.toLocal(this.sp, undefined, this.ds, true);\n\n if (this.chars.length)\n {\n this.updateClosestIndex(this.ds, true);\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n }\n }\n e.data.originalEvent.preventDefault();\n };\n\n event.onDragMove = (e, offset: PIXI.Point): void =>\n {\n if (!this.chars.length || !this._isFocused)\n {\n return;\n }\n\n this.de.x = this.sp.x + offset.x;\n this.de.y = this.sp.y + offset.y;\n this.innerContainer.toLocal(this.de, undefined, this.de, true);\n this.updateClosestIndex(this.de, false);\n\n if (this.si < this.ei)\n {\n this.selectRange(this.sie ? this.si + 1 : this.si, this.eie ? this.ei : this.ei - 1);\n this.caret._index = this.eie ? this.ei : this.ei - 1;\n }\n else if (this.si > this.ei)\n {\n this.selectRange(this.ei, this.sie ? this.si : this.si - 1);\n this.caret._index = this.ei;\n }\n else if (this.sie === this.eie)\n {\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n else\n {\n this.selectRange(this.si, this.ei);\n this.caret._index = this.ei;\n }\n\n this.caret._forward = this.si <= this.ei;\n this.caret._down = offset.y > 0;\n\n this.scrollToPosition(this.de);\n };\n }\n\n protected get innerContainer(): PIXI.Container\n {\n return this.textContainer.innerContainer.insetContainer;\n }\n\n update(): void\n {\n if (this.width !== this._lastWidth)\n {\n this._lastWidth = this._width;\n\n if (this.multiLine)\n {\n this.updateText();\n\n if (this.caret.visible)\n {\n this.setCaretIndex(this.caret._index);\n }\n if (this.hasSelection)\n {\n this.updateSelectionGraphics();\n }\n }\n }\n\n // update text\n if (this._dirtyText)\n {\n this.updateText();\n this._dirtyText = false;\n }\n }\n\n updateText(): void\n {\n this.textLengthPX = 0;\n this.textHeightPX = 0;\n this.lineIndexMax = 0;\n\n let lineIndex = 0;\n const length = this._value.length;\n let x = 0;\n let y = (this.lineHeight - this.textHeight) * 0.5;\n let i = 0;\n\n // destroy excess chars\n if (this.chars.length > length)\n {\n for (i = this.chars.length - 1; i >= length; i--)\n {\n this.innerContainer.removeChild(this.chars[i]);\n this.chars[i].destroy();\n }\n\n this.chars.splice(length, this.chars.length - length);\n }\n\n // update and add chars\n let whitespace = false;\n let newline = false;\n let wordIndex = 0;\n let lastWordIndex = -1;\n let wrap = false;\n\n for (i = 0; i < this._value.length; i++)\n {\n if (whitespace || newline)\n {\n lastWordIndex = i;\n wordIndex++;\n }\n\n let c = this._value[i];\n\n whitespace = c === ' ';\n newline = c === '\\n';\n\n if (newline)\n { // newline \"hack\". webgl render errors if \\n is passed to text\n c = '';\n }\n\n let charText = this.chars[i];\n\n if (!charText)\n {\n charText = new PIXI.Text(c, this.options.style);\n this.innerContainer.addChild(charText);\n this.chars.push(charText);\n }\n else\n {\n charText.text = c;\n }\n\n charText.scale.x = newline ? 0 : 1;\n charText.wrapped = wrap;\n wrap = false;\n\n if (newline || (this.multiLine && x + charText.width >= this._width - this.paddingLeft - this.paddingRight))\n {\n lineIndex++;\n x = 0;\n y += this.lineHeight;\n\n if (lastWordIndex !== -1 && !newline)\n {\n i = lastWordIndex - 1;\n lastWordIndex = -1;\n wrap = true;\n continue;\n }\n }\n\n charText.lineIndex = lineIndex;\n charText.x = x;\n charText.y = y;\n charText.wordIndex = whitespace || newline ? -1 : wordIndex;\n x += charText.width;\n\n if (x > this.textLengthPX)\n {\n this.textLengthPX = x;\n }\n if (y > this.textHeightPX)\n {\n this.textHeightPX = y;\n }\n }\n\n this.lineIndexMax = lineIndex;\n\n // put caret on top\n this.innerContainer.addChild(this.caret);\n\n // recache\n if (this.innerContainer.cacheAsBitmap)\n {\n this.innerContainer.cacheAsBitmap = false;\n this.innerContainer.cacheAsBitmap = true;\n }\n\n this.textContainer.update();\n }\n\n updateClosestIndex(point: PIXI.Point, start: boolean): void\n {\n let currentDistX = 99999;\n let currentIndex = -1;\n let atEnd = false;\n\n let closestLineIndex = 0;\n\n if (this.lineIndexMax > 0)\n {\n closestLineIndex = Math.max(0, Math.min(\n this.lineIndexMax,\n Math.floor(point.y / this.lineHeight)));\n }\n\n for (let i = 0; i < this.chars.length; i++)\n {\n const char = this.chars[i];\n\n if (char.lineIndex !== closestLineIndex)\n {\n continue;\n }\n\n const distX = Math.abs(point.x - (char.x + (char.width * 0.5)));\n\n if (distX < currentDistX)\n {\n currentDistX = distX;\n currentIndex = i;\n atEnd = point.x > char.x + (char.width * 0.5);\n }\n }\n\n if (start)\n {\n this.si = currentIndex;\n this.sie = atEnd;\n }\n else\n {\n this.ei = currentIndex;\n this.eie = atEnd;\n }\n }\n\n deleteSelection(): boolean\n {\n if (this.hasSelection)\n {\n this.value = this.value.slice(0, this.selectionStart) + this.value.slice(this.selectionEnd + 1);\n this.setCaretIndex(this.selectionStart);\n\n return true;\n }\n\n return false;\n }\n\n updateSelectionColors(): void\n {\n // Color charecters\n for (let i = 0; i < this.chars.length; i++)\n {\n if (i >= this.selectionStart && i <= this.selectionEnd)\n {\n this.chars[i].style.fill = this.selectedColor;\n }\n else\n {\n this.chars[i].style.fill = this.color;\n }\n }\n }\n\n scrollToPosition(pos: PIXI.Point): void\n {\n this._sp.x = pos.x;\n this._sp.y = pos.y;\n\n if (this.multiLine && this._sp.y >= this.lineHeight)\n {\n this._sp.y += this.lineHeight;\n }\n\n this.textContainer.focusPosition(this._sp);\n }\n\n resetScrollPosition(): void\n {\n this._sp.set(0, 0);\n this.textContainer.focusPosition(this._sp);\n }\n\n hideCaret(): void\n {\n this.caret.visible = false;\n clearInterval(this.caretInterval);\n }\n\n showCaret(): void\n {\n this.clearSelection();\n clearInterval(this.caretInterval);\n\n this.caret.alpha = 1;\n this.caret.visible = true;\n\n this.caretInterval = setInterval(() =>\n {\n this.caret.alpha = this.caret.alpha === 0 ? 1 : 0;\n }, 500);\n }\n\n insertTextAtCaret(c: string): void\n {\n if (!this.multiLine && c.indexOf('\\n') !== -1)\n {\n c = c.replace(/\\n/g, '');\n }\n\n if (this.hasSelection)\n {\n this.deleteSelection();\n }\n\n if (!this.maxLength || this.chars.length < this.maxLength)\n {\n if (this.caret._atEnd)\n {\n this.valueEvent += c;\n this.setCaretIndex(this.chars.length);\n }\n else\n {\n const index = Math.min(this.chars.length - 1, this.caret._index);\n\n this.valueEvent = this.value.slice(0, index) + c + this.value.slice(index);\n this.setCaretIndex(index + c.length);\n }\n }\n }\n\n public onKeyDown(e) {\n if (e.which === this.ctrlKey || e.which === this.cmdKey)\n {\n this.ctrlDown = true;\n }\n if (e.which === this.shiftKey)\n {\n this.shiftDown = true;\n }\n\n // FocusableWidget.onKeyDownImpl should've been called before this.\n\n if (e.defaultPrevented)\n {\n return;\n }\n\n if (e.which === 13)\n { // enter\n this.insertTextAtCaret('\\n');\n e.preventDefault();\n\n return;\n }\n\n if (this.ctrlDown)\n {\n // Handle Ctrl+ commands\n\n if (e.which === 65)\n {\n // Ctrl+A (Select all)\n this.select();\n e.preventDefault();\n\n return;\n }\n else if (e.which === 90)\n {\n // Ctrl+Z (Undo)\n if (this.value != this._lastValue)\n {\n this.valueEvent = this._lastValue;\n }\n\n this.setCaretIndex(this._lastValue.length + 1);\n e.preventDefault();\n\n return;\n }\n }\n if (e.which === 8)\n {\n // Handle backspace\n if (!this.deleteSelection())\n {\n if (this.caret._index > 0 || (this.chars.length === 1 && this.caret._atEnd))\n {\n if (this.caret._atEnd)\n {\n this.valueEvent = this.value.slice(0, this.chars.length - 1);\n this.setCaretIndex(this.caret._index);\n }\n else\n {\n this.valueEvent = this.value.slice(0, this.caret._index - 1) + this.value.slice(this.caret._index);\n this.setCaretIndex(this.caret._index - 1);\n }\n }\n }\n\n e.preventDefault();\n\n return;\n }\n\n if (e.which === 46)\n {\n // Delete selection\n if (!this.deleteSelection())\n {\n if (!this.caret._atEnd)\n {\n this.valueEvent = this.value.slice(0, this.caret._index) + this.value.slice(this.caret._index + 1);\n this.setCaretIndex(this.caret._index);\n }\n }\n\n e.preventDefault();\n\n return;\n }\n else if (e.which === 37 || e.which === 39)\n {\n this.rdd = e.which === 37;\n\n if (this.shiftDown)\n {\n if (this.hasSelection)\n {\n const caretAtStart = this.selectionStart === this.caret._index;\n\n if (caretAtStart)\n {\n if (this.selectionStart === this.selectionEnd && this.rdd === this.caret._forward)\n {\n this.setCaretIndex(this.caret._forward ? this.caret._index : this.caret._index + 1);\n }\n else\n {\n const startindex = this.rdd ? this.caret._index - 1 : this.caret._index + 1;\n\n this.selectRange(startindex, this.selectionEnd);\n this.caret._index = Math.min(this.chars.length - 1, Math.max(0, startindex));\n }\n }\n else\n {\n const endIndex = this.rdd ? this.caret._index - 1 : this.caret._index + 1;\n\n this.selectRange(this.selectionStart, endIndex);\n this.caret._index = Math.min(this.chars.length - 1, Math.max(0, endIndex));\n }\n }\n else\n {\n const _i = this.caret._atEnd ? this.caret._index + 1 : this.caret._index;\n const selectIndex = this.rdd ? _i - 1 : _i;\n\n this.selectRange(selectIndex, selectIndex);\n this.caret._index = selectIndex;\n this.caret._forward = !rdd;\n }\n }\n else\n {\n // Navigation\n // eslint-disable-next-line no-lonely-if\n if (this.hasSelection)\n {\n this.setCaretIndex(this.rdd ? this.selectionStart : this.selectionEnd + 1);\n }\n else\n {\n this.setCaretIndex(this.caret._index + (this.rdd ? this.caret._atEnd ? 0 : -1 : 1));\n }\n }\n\n e.preventDefault();\n\n return;\n }\n else if (this.multiLine && (e.which === 38 || e.which === 40))\n {\n this.vrdd = e.which === 38;\n\n if (this.shiftDown)\n {\n if (this.hasSelection)\n {\n this.de.y = Math.max(0, Math.min(\n this.textHeightPX,\n this.de.y + (this.vrdd ? -this.lineHeight : this.lineHeight)));\n this.updateClosestIndex(this.de, false);\n\n // console.log(si, ei);\n if (Math.abs(this.si - this.ei) <= 1)\n {\n // console.log(si, ei);\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n else\n {\n this.caret._index = (this.eie ? this.ei + 1 : this.ei) + (this.caret._down ? -1 : 0);\n this.selectRange(this.caret._down ? this.si : this.si - 1, this.caret._index);\n }\n }\n else\n {\n this.si = this.caret._index;\n this.sie = false;\n this.de.copyFrom(this.caret);\n this.de.y = Math.max(0, Math.min(\n this.textHeightPX,\n this.de.y + (this.vrdd ? -this.lineHeight : this.lineHeight)));\n this.updateClosestIndex(this.de, false);\n\n this.caret._index = (this.eie ? this.ei + 1 : ei) - (this.vrdd ? 0 : 1);\n this.selectRange(this.vrdd ? this.si - 1 : this.si, this.caret._index);\n this.caret._down = !this.vrdd;\n }\n }\n else if (this.hasSelection)\n {\n this.setCaretIndex(this.vrdd ? this.selectionStart : this.selectionEnd + 1);\n }\n else\n {\n this.ds.copyFrom(this.caret);\n this.ds.y += this.vrdd ? -this.lineHeight : this.lineHeight;\n this.ds.x += 1;\n this.updateClosestIndex(this.ds, true);\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n e.preventDefault();\n\n return;\n }\n };\n\n public keyUpEvent(e) {\n if (e.which === this.ctrlKey || e.which === this.cmdKey) this.ctrlDown = false;\n if (e.which === this.shiftKey) this.shiftDown = false;\n\n this.emit('keyup', e);\n\n if (e.defaultPrevented)\n { return; }\n };\n\n public copyEvent(e) {\n this.emit('copy', e);\n\n if (e.defaultPrevented)\n { return; }\n\n if (this.hasSelection)\n {\n const clipboardData = e.clipboardData || window.clipboardData;\n\n clipboardData.setData('Text', this.value.slice(this.selectionStart, this.selectionEnd + 1));\n }\n\n e.preventDefault();\n };\n\n public cutEvent(e) {\n this.emit('cut', e);\n\n if (e.defaultPrevented)\n { return; }\n\n if (this.hasSelection)\n {\n this.copyEvent(e);\n this.deleteSelection();\n }\n\n e.preventDefault();\n };\n\n public pasteEvent(e) {\n this.emit('paste', e);\n\n if (e.defaultPrevented)\n { return; }\n\n const clipboardData = e.clipboardData || window.clipboardData;\n\n this.insertTextAtCaret(clipboardData.getData('Text'));\n e.preventDefault();\n };\n\n public inputEvent(e) {\n const c = mockDOMInput.value;\n\n if (c.length)\n {\n this.insertTextAtCaret(c);\n mockDOMInput.value = '';\n }\n\n e.preventDefault();\n };\n\n public inputBlurEvent(e) {\n this.blur();\n };\n\n public focus = (): void =>\n {\n if (!this._isFocused)\n {\n super.focus();\n\n const l = `${this.contentContainer.worldTransform.tx}px`;\n const t = `${this.contentContainer.worldTransform.ty}px`;\n const h = `${this.contentContainer.height}px`;\n const w = `${this.contentContainer.width}px`;\n\n mockDOMInput.setAttribute('style', `position:fixed; left:${l}; top:${t}; height:${h}; width:${w};`);\n mockDOMInput.value = '';\n mockDOMInput.setAttribute('style', 'position:fixed; left:-10px; top:-10px; width:0px; height: 0px;');\n\n this.innerContainer.cacheAsBitmap = false;\n\n this._listeners.blur = e => this.inputBlurEvent(e);\n this._listeners.keydown = e => this.onKeyDown(e);\n this._listeners.keyup = e => this.keyUpEvent(e);\n this._listeners.paste = e => this.pasteEvent(e);\n this._listeners.copy = e => this.copyEvent(e);\n this._listeners.cut = e => this.cutEvent(e);\n this._listeners.input = e => this.inputEvent(e);\n\n mockDOMInput.addEventListener('blur', this._listeners.blur, false);\n document.addEventListener('keydown', this._listeners.keydown, false);\n document.addEventListener('keyup', this._listeners.keyup, false);\n document.addEventListener('paste', this._listeners.paste, false);\n document.addEventListener('copy', this._listeners.copy, false);\n document.addEventListener('cut', this._listeners.cut, false);\n mockDOMInput.addEventListener('input', this._listeners.input, false);\n\n setTimeout(() =>\n {\n mockDOMInput.focus();\n \n if (!this.caret.visible && !this.selection.visible && !this.multiLine)\n {\n this.setCaretIndex(this.chars.length);\n }\n }, 0);\n }\n };\n\n public blur = (): void =>\n {\n if (this._isFocused)\n {\n super.blur();\n this.ctrlDown = false;\n this.shiftDown = false;\n\n this.hideCaret();\n this.clearSelection();\n\n if (this.chars.length > 1)\n {\n this.innerContainer.cacheAsBitmap = true;\n }\n\n mockDOMInput.removeEventListener('blur', this._listeners.blur);\n document.removeEventListener('keydown', this._listeners.keydown);\n document.removeEventListener('keyup', this._listeners.keyup);\n document.removeEventListener('paste', this._listeners.paste);\n document.removeEventListener('copy', this._listeners.copy);\n document.removeEventListener('cut', this._listeners.cut);\n mockDOMInput.removeEventListener('input', this._listeners.input);\n mockDOMInput.blur();\n\n this._listeners = {}\n }\n\n if (!this.multiLine)\n {\n this.resetScrollPosition();\n }\n };\n\n setCaretIndex = (index: number): void =>\n {\n this.caret._atEnd = index >= this.chars.length;\n this.caret._index = Math.max(0, Math.min(this.chars.length - 1, index));\n\n if (this.chars.length && index > 0)\n {\n let i = Math.max(0, Math.min(index, this.chars.length - 1));\n let c = this.chars[i];\n\n if (c && c.wrapped)\n {\n this.caret.x = c.x;\n this.caret.y = c.y;\n }\n else\n {\n i = Math.max(0, Math.min(index - 1, this.chars.length - 1));\n c = this.chars[i];\n this.caret.x = this.chars[i].x + this.chars[i].width;\n this.caret.y = (this.chars[i].lineIndex * this.lineHeight) + (this.lineHeight - this.textHeight) * 0.5;\n }\n }\n else\n {\n this.caret.x = 0;\n this.caret.y = (this.lineHeight - this.textHeight) * 0.5;\n }\n\n this.scrollToPosition(this.caret);\n this.showCaret();\n };\n\n select = (): void =>\n {\n this.selectRange(0, this.chars.length - 1);\n };\n\n selectWord = (wordIndex: number): void =>\n {\n let startIndex = this.chars.length;\n let endIndex = 0;\n\n for (let i = 0; i < this.chars.length; i++)\n {\n if (this.chars[i].wordIndex !== wordIndex)\n {\n continue;\n }\n\n if (i < startIndex)\n {\n startIndex = i;\n }\n if (i > endIndex)\n {\n endIndex = i;\n }\n }\n\n this.selectRange(startIndex, endIndex);\n };\n\n selectRange = (startIndex: number, endIndex: number): void =>\n {\n if (startIndex > -1 && endIndex > -1)\n {\n const start = Math.min(startIndex, endIndex, this.chars.length - 1);\n const end = Math.min(Math.max(startIndex, endIndex), this.chars.length - 1);\n\n if (start !== this.selectionStart || end !== this.selectionEnd)\n {\n this.hasSelection = true;\n this.selection.visible = true;\n this.selectionStart = start;\n this.selectionEnd = end;\n\n this.hideCaret();\n this.updateSelectionGraphics();\n this.updateSelectionColors();\n }\n\n this.focus();\n }\n else\n {\n this.clearSelection();\n }\n };\n\n clearSelection = (): void =>\n {\n if (this.hasSelection)\n {\n // Remove color\n this.hasSelection = false;\n this.selection.visible = false;\n this.selectionStart = -1;\n this.selectionEnd = -1;\n this.updateSelectionColors();\n }\n };\n\n updateSelectionGraphics = () =>\n {\n const c1 = this.chars[this.selectionStart];\n\n if (c1 !== undefined)\n {\n let cx = c1.x;\n let cy = c1.y;\n let w = 0;\n const h = this.textHeight;\n let cl = c1.lineIndex;\n\n this.selection.clear();\n for (let i = this.selectionStart; i <= this.selectionEnd; i++)\n {\n const c = this.chars[i];\n\n if (c.lineIndex != cl)\n {\n this.drawSelectionRect(cx, cy, w, h);\n cx = c.x;\n cy = c.y;\n cl = c.lineIndex;\n w = 0;\n }\n\n w += c.width;\n }\n\n this.drawSelectionRect(cx, cy, w, h);\n this.innerContainer.addChildAt(this.selection, 0);\n }\n };\n\n drawSelectionRect = (x: number, y: number, w: number, h: number): void =>\n {\n this.selection.beginFill(`0x${this.selectedBackgroundColor.slice(1)}`, 1);\n this.selection.moveTo(x, y);\n this.selection.lineTo(x + w, y);\n this.selection.lineTo(x + w, y + h);\n this.selection.lineTo(x, y + h);\n this.selection.endFill();\n };\n\n get valueEvent(): string\n {\n return this._value;\n }\n set valueEvent(val: string)\n {\n if (this.maxLength)\n {\n val = val.slice(0, this.maxLength);\n }\n\n if (this._value != val)\n {\n this.value = val;\n this.emit('change');\n }\n }\n\n get value(): string\n {\n return this._value;\n }\n set value(val: string)\n {\n if (this.maxLength)\n {\n val = val.slice(0, this.maxLength);\n }\n\n if (this._value != val)\n {\n this._lastValue = this._value;\n this._value = val;\n this._dirtyText = true;\n this.update();\n }\n }\n\n get text(): string\n {\n return this.value;\n }\n set text(value: string)\n {\n this.value = value;\n }\n\n get mock() {\n return mockDOMInput\n }\n}\n\n/*\n * Features:\n * multiLine, shift selection, Mouse Selection, Cut, Copy, Paste, Delete, Backspace, Arrow navigation, tabIndex\n *\n * Methods:\n * blur()\n * focus()\n * select() - selects all text\n * selectRange(startIndex, endIndex)\n * clearSelection()\n * setCaretIndex(index) moves caret to index\n *\n *\n * Events:\n * \"change\"\n * \"blur\"\n * \"blur\"\n * \"focus\"\n * \"focusChanged\" param: [bool]focus\n * \"keyup\" param: Event\n * \"keydown\" param: Event\n * \"copy\" param: Event\n * \"paste\" param: Event\n * \"cut\" param: Event\n * \"keyup\" param: Event\n */\n","import * as PIXI from 'pixi.js';\nimport { Widget } from './Widget';\n\n/**\n * An UI sprite object\n *\n * @class\n * @extends PIXI.UI.UIBase\n * @memberof PIXI.UI\n * @param Texture {PIXI.Texture} The texture for the sprite\n * @param [Width=Texture.width] {number} Width of tilingsprite\n * @param [Height=Texture.height] {number} Height of tiling sprite\n */\nexport class TilingSprite extends Widget\n{\n protected sprite: PIXI.TilingSprite;\n\n constructor(t, width: number, height: number)\n {\n const sprite = new PIXI.TilingSprite(t);\n\n super(width || sprite.width, height || sprite.height);\n\n this.sprite = sprite;\n this.contentContainer.addChild(this.sprite);\n }\n\n /**\n * Updates the text\n *\n * @private\n */\n update(): void\n {\n if (this.tint !== null)\n { this.sprite.tint = this.tint; }\n\n if (this.blendMode !== null)\n { this.sprite.blendMode = this.blendMode; }\n\n this.sprite.width = this._width;\n this.sprite.height = this._height;\n }\n\n get tilePosition(): any\n {\n return this.sprite.tilePosition;\n }\n set tilingPosition(val: any)\n {\n this.sprite.tilePosition = val;\n }\n\n get tileScale(): number\n {\n return this.sprite.tileScale;\n }\n set tileScale(val: number)\n {\n this.sprite.tileScale = val;\n }\n}\n","import { Tween } from './Tween';\nimport * as PIXI from 'pixi.js';\n\n/**\n * This ticker is an event-emitter that can be used for running periodic tasks\n * in the rendering loop. It emits the `update` event every animation frame.\n *\n * @memberof PUXI\n * @class\n * @extends PIXI.utils.EventEmitter\n */\nexport class Ticker extends PIXI.utils.EventEmitter\n{\n private _disabled: boolean;\n private _now: number;\n\n DeltaTime: number;\n Time: number;\n Ms: number;\n\n constructor(autoStart: boolean)\n {\n super();\n\n this._disabled = true;\n this._now = 0;\n\n this.DeltaTime = 0;\n this.Time = performance.now();\n this.Ms = 0;\n\n if (autoStart)\n {\n this.disabled = false;\n }\n\n Ticker.shared = this;\n }\n\n get disabled(): boolean\n {\n return this._disabled;\n }\n set disabled(val: boolean)\n {\n if (!this._disabled)\n {\n this._disabled = true;\n }\n else\n {\n this._disabled = false;\n Ticker.shared = this;\n\n this.update(performance.now(), true);\n }\n }\n\n /**\n * Updates the text\n *\n * @private\n */\n update(time: number): void\n {\n Ticker.shared._now = time;\n Ticker.shared.Ms = Ticker.shared._now - Ticker.shared.Time;\n Ticker.shared.Time = Ticker.shared._now;\n Ticker.shared.DeltaTime = Ticker.shared.Ms * 0.001;\n Ticker.shared.emit('update', Ticker.shared.DeltaTime);\n Tween._update(Ticker.shared.DeltaTime);\n\n if (!Ticker.shared._disabled)\n {\n requestAnimationFrame(Ticker.shared.update);\n }\n }\n\n /**\n * The update event is fired periodically and it can be used to for a rendering\n * loop.\n * @event update\n * @param {DOMHighResTimeStamp} deltaTime - milliseconds since last update\n */\n\n static shared: Ticker;\n\n static on(event: any, fn: Function, context: any): void\n {\n Ticker.shared.on(event, fn, context);\n }\n\n static once(event: any, fn: Function, context: any): void\n {\n Ticker.shared.once(event, fn, context);\n }\n\n static removeListener(event: any, fn: Function): void\n {\n Ticker.shared.removeListener(event, fn);\n }\n}\n\nTicker.shared = new Ticker(true);\n"],"names":["PIXI.Point","PIXI.utils","PIXI.Container","PIXI.BLEND_MODES","PIXI.Graphics","PIXI.Rectangle","PIXI.Text","PIXI.TextStyle","PIXI.Sprite","PIXI.Texture","PIXI.BaseTexture","PIXI.Ticker","PIXI.TilingSprite"],"mappings":"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"},CAAC,CAAC;KAC1C;IAED,OAAO,cAAc,CAAC,KAAU,EAAE,EAAY;QAE1C,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;KAC3C;CACJ;AAED,MAAM,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"puxi-core.js","sources":["../src/event/DragDropController.js","../src/layout-options/Insets.ts","../src/IMeasurable.ts","../src/event/EventManager.ts","../src/event/ClickManager.ts","../src/event/DragManager.ts","../src/event/EventBroker.ts","../src/event/ScrollManager.ts","../src/Widget.ts","../src/layout-options/Align.ts","../src/layout-options/LayoutOptions.ts","../src/layout-options/AnchorLayoutOptions.ts","../src/layout-options/FastLayoutOptions.ts","../src/layout-options/BorderLayoutOptions.ts","../src/layout-manager/FastLayout.ts","../src/WidgetGroup.ts","../src/InteractiveGroup.ts","../src/FocusableWidget.ts","../src/TextWidget.ts","../src/Button.ts","../src/CheckBox.ts","../src/Ease/EaseBase.js","../src/Ease/ExponentialEase.js","../src/Ease/Ease.js","../src/Helpers.ts","../src/Sprite.ts","../src/layout-manager/AnchorLayout.ts","../src/layout-manager/BorderLayout.ts","../src/layout-manager/LinearLayout.ts","../src/ImageButton.ts","../src/Slider.ts","../src/Tween.ts","../src/ScrollBar.ts","../src/ScrollWidget.ts","../src/SortableList.ts","../src/SliceSprite.ts","../src/ctl/Controller.ts","../src/ctl/CheckBoxGroupController.ts","../src/ctl/FocusController.ts","../src/Stage.ts","../src/Style.ts","../src/StyleSheet.ts","../src/TextInput.ts","../src/TilingSprite.ts","../src/Ticker.ts"],"sourcesContent":["const _items = [];\nconst DragDropController = {\n add(item, event)\n {\n item._dragDropEventId = event.data.identifier;\n if (_items.indexOf(item) === -1)\n {\n _items.push(item);\n\n return true;\n }\n\n return false;\n },\n getItem(object)\n {\n let item = null; let\n index;\n\n for (let i = 0; i < _items.length; i++)\n {\n if (_items[i] === object)\n {\n item = _items[i];\n index = i;\n break;\n }\n }\n\n if (item !== null)\n {\n _items.splice(index, 1);\n\n return item;\n }\n\n return false;\n },\n getEventItem(event, group)\n {\n let item = null; let index; const\n id = event.data.identifier;\n\n for (let i = 0; i < _items.length; i++)\n {\n if (_items[i]._dragDropEventId === id)\n {\n if (group !== _items[i].dragGroup)\n {\n return false;\n }\n item = _items[i];\n index = i;\n break;\n }\n }\n\n if (item !== null)\n {\n _items.splice(index, 1);\n\n return item;\n }\n\n return false;\n },\n};\n\nexport { DragDropController };\nexport default DragDropController;\n","/**\n * @memberof PUXI\n * @class\n */\nexport class Insets\n{\n left: number;\n top: number;\n right: number;\n bottom: number;\n\n dirtyId: number;\n\n constructor()\n {\n this.reset();\n this.dirtyId = 0;\n }\n\n reset(): void\n {\n this.left = -1;\n this.top = -1;\n this.right = -1;\n this.bottom = -1;\n }\n}\n","/**\n * These are the modes in which an entity can measures its dimension. They are\n * relevant when a layout needs to know the optimal sizes of its children.\n *\n * @memberof PUXI\n * @enum\n * @property {number} UNBOUNDED - no upper limit on bounds. This should calculate the optimal dimensions for the entity.\n * @property {number} EXACTLY - the entity should set its dimension to the one passed to it.\n * @property {number} AT_MOST - the entity should find an optimal dimension below the one passed to it.\n */\nexport enum MeasureMode\n{\n UNBOUNDED = 0,\n EXACTLY = 1,\n AT_MOST = 2\n}\n\nexport interface IMeasurable\n{\n onMeasure(maxWidth: number, maxHeight: number, widthMode: MeasureMode, heightMode: MeasureMode);\n getMeasuredWidth(): number;\n getMeasuredHeight(): number;\n}\n\n/**\n * Any renderable entity that can be used in a widget hierarchy must be\n * measurable.\n *\n * @memberof PUXI\n * @interface IMeasurable\n */\n\n/**\n * Measures its width & height based on the passed constraints.\n *\n * @memberof PUXI.IMeasurable#\n * @method onMeasure\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n */\n\n/**\n * @memberof PUXI.IMeasurable#\n * @method getMeasuredWidth\n * @returns {number} - the measured width of the entity after a `onMeasure` call\n */\n\n/**\n * @memberof PUXI.IMeasurable#\n * @method getMeasuredHeight\n * @returns {number} - the measured height of the entity after a `onMeasure` call\n */\n","import { Widget } from '../Widget';\n\n/**\n * An event manager handles the states related to certain events and can augment\n * widget interaction. For example, the click manager will hide clicks when\n * the object is dragging.\n *\n * Event managers are lifecycle objects - they can start/stop. Their constructor\n * will always accept one argument - the widget. Other settings can be applied before\n * `startEvent`.\n *\n * Ideally, you should access event managers _after_ your widget has initialized. This is\n * because it may depend on the widget's stage being assigned.\n *\n * @memberof PUXI\n * @class\n * @abstract\n */\nexport abstract class EventManager\n{\n protected target: Widget;\n protected isEnabled: boolean;\n\n /**\n * @param {Widget} target\n */\n constructor(target: Widget)\n {\n this.target = target;\n this.isEnabled = false;// use to track start/stopEvent\n }\n\n /**\n * @returns {Widget}\n */\n getTarget(): Widget\n {\n return this.target;\n }\n\n /**\n * Registers the interaction event listeners that will emit corresponding events\n * on the target widget.\n */\n abstract startEvent(): any;\n\n /**\n * Unregisters any event listeners and releases any resources held. This should\n * revert all changes made by `startEvent`.\n */\n abstract stopEvent(): any;\n}\n","import * as PIXI from 'pixi.js';\nimport { Widget } from '../Widget';\nimport { EventManager } from './EventManager';\n\n/**\n * `ClickManager` handles hover and click events. It registers listeners\n * for `mousedown`, `mouseup`, `mousemove`, `mouseout`, `mouseover`, `touchstart`,\n * `touchend`, `touchendoutside`, `touchmove`, `rightup`, `rightdown`, `rightupoutside`\n * events.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.EventManager\n */\nexport class ClickManager extends EventManager\n{\n onHover: (event: PIXI.InteractionEvent, over: boolean) => void;\n onPress: (event: PIXI.InteractionEvent, isPressed: boolean) => void;\n onClick: (event: PIXI.InteractionMouseEvents) => void;\n onMove: (event: PIXI.InteractionEvent) => void;\n\n protected _rightMouseButton: boolean;\n protected _includeHover: boolean;\n protected _doubleClick: boolean;\n\n private bound: boolean;\n private id: number;\n private ishover: boolean;\n protected target: Widget;\n\n private movementX: number;\n private movementY: number;\n mouse: PIXI.Point;\n offset: PIXI.Point;\n\n private evMouseDown: string;\n private evMouseUp: string;\n private evMouseUpOutside: string;\n\n time: number;\n\n /**\n * @param {PUXI.Widget | PUXI.Button} target\n * @param {boolean}[includeHover=false] - enable hover (`mouseover`, `mouseout`) listeners\n * @param {boolean}[rightMouseButton=false] - use right mouse clicks\n * @param {boolean}[doubleClick=false] - fire double clicks\n */\n constructor(target: Widget, includeHover?: boolean, rightMouseButton?, doubleClick?: boolean)\n {\n super(target);\n\n this.bound = false;\n this.id = 0;\n this.ishover = false;\n this.mouse = new PIXI.Point();\n this.offset = new PIXI.Point();\n this.movementX = 0;\n this.movementY = 0;\n\n this._includeHover = typeof includeHover === 'undefined' ? true : includeHover;\n this.rightMouseButton = typeof rightMouseButton === 'undefined' ? false : rightMouseButton;\n this._doubleClick = typeof doubleClick === 'undefined' ? false : doubleClick;\n\n target.interactive = true;\n\n this.time = 0;\n this.startEvent();\n\n this.onHover = (): void => null;\n this.onPress = (): void => null;\n this.onClick = (): void => null;\n this.onMove = (): void => null;\n }\n\n /**\n * Whether right mice are used for clicks rather than left mice.\n * @member boolean\n */\n get rightMouseButton(): boolean\n {\n return this._rightMouseButton;\n }\n set rightMouseButton(val: boolean)\n {\n this._rightMouseButton = val;\n\n this.evMouseDown = this._rightMouseButton ? 'rightdown' : 'mousedown';\n this.evMouseUp = this._rightMouseButton ? 'rightup' : 'mouseup';\n this.evMouseUpOutside = this._rightMouseButton ? 'rightupoutside' : 'mouseupoutside';\n }\n\n /**\n * @param {boolean}[includeHover]\n * @param {boolean}[rightMouseButton]\n * @param {boolean}[doubleClick]\n * @override\n */\n startEvent = (\n includeHover = this._includeHover,\n rightMouseButton = this._rightMouseButton,\n doubleClick = this._doubleClick,\n ): void =>\n {\n if (this.isEnabled)\n {\n return;\n }\n\n this._includeHover = includeHover;\n this.rightMouseButton = rightMouseButton;\n this._doubleClick = doubleClick;\n\n const { target } = this;\n\n target.insetContainer.on(this.evMouseDown, this.onMouseDownImpl);\n\n if (!this._rightMouseButton)\n {\n target.insetContainer.on('touchstart', this.onMouseDownImpl);\n }\n\n if (this._includeHover)\n {\n target.insetContainer.on('mouseover', this.onMouseOverImpl);\n target.insetContainer.on('mouseout', this.onMouseOutImpl);\n }\n\n this.isEnabled = true;\n };\n\n /**\n * @override\n */\n stopEvent = (): void =>\n {\n if (!this.isEnabled)\n {\n return;\n }\n\n const { target } = this;\n\n if (this.bound)\n {\n target.insetContainer.removeListener(this.evMouseUp, this.onMouseUpImpl);\n target.insetContainer.removeListener(this.evMouseUpOutside, this.onMouseUpOutsideImpl);\n\n if (!this._rightMouseButton)\n {\n target.insetContainer.removeListener('touchend', this.onMouseUpImpl);\n target.insetContainer.removeListener('touchendoutside', this.onMouseUpOutsideImpl);\n }\n\n this.bound = false;\n }\n\n target.insetContainer.removeListener(this.evMouseDown, this.onMouseDownImpl);\n\n if (!this._rightMouseButton)\n {\n target.insetContainer.removeListener('touchstart', this.onMouseDownImpl);\n }\n\n if (this._includeHover)\n {\n target.insetContainer.removeListener('mouseover', this.onMouseOverImpl);\n target.insetContainer.removeListener('mouseout', this.onMouseOutImpl);\n target.insetContainer.removeListener('mousemove', this.onMouseMoveImpl);\n target.insetContainer.removeListener('touchmove', this.onMouseMoveImpl);\n }\n\n this.isEnabled = false;\n };\n\n protected onMouseDownImpl = (event: PIXI.interaction.InteractionEvent): void =>\n {\n const {\n target: obj,\n evMouseUp,\n onMouseUpImpl: _onMouseUp,\n evMouseUpOutside,\n onMouseUpOutsideImpl: _onMouseUpOutside,\n _rightMouseButton: right,\n } = this;\n\n this.mouse.copyFrom(event.data.global);\n this.id = event.data.identifier;\n this.onPress.call(this.target, event, true);\n\n if (!this.bound)\n {\n obj.insetContainer.on(evMouseUp, _onMouseUp);\n obj.insetContainer.on(evMouseUpOutside, _onMouseUpOutside);\n\n if (!right)\n {\n obj.insetContainer.on('touchend', _onMouseUp);\n obj.insetContainer.on('touchendoutside', _onMouseUpOutside);\n }\n\n this.bound = true;\n }\n\n if (this._doubleClick)\n {\n const now = performance.now();\n\n if (now - this.time < 210)\n {\n this.onClick.call(obj, event);\n }\n else\n {\n this.time = now;\n }\n }\n\n event.data.originalEvent.preventDefault();\n };\n\n protected onMouseUpCommonImpl = (event: PIXI.interaction.InteractionEvent): void =>\n {\n const {\n target: obj,\n evMouseUp,\n onMouseUpImpl: _onMouseUp,\n evMouseUpOutside,\n onMouseUpOutsideImpl: _onMouseUpOutside,\n } = this;\n\n if (event.data.identifier !== this.id)\n {\n return;\n }\n\n this.offset.set(event.data.global.x - this.mouse.x, event.data.global.y - this.mouse.y);\n\n if (this.bound)\n {\n obj.insetContainer.removeListener(evMouseUp, _onMouseUp);\n obj.insetContainer.removeListener(evMouseUpOutside, _onMouseUpOutside);\n\n if (!this._rightMouseButton)\n {\n obj.insetContainer.removeListener('touchend', _onMouseUp);\n obj.insetContainer.removeListener('touchendoutside', _onMouseUpOutside);\n }\n\n this.bound = false;\n }\n\n this.onPress.call(obj, event, false);\n };\n\n protected onMouseUpImpl = (event): void =>\n {\n if (event.data.identifier !== this.id)\n {\n return;\n }\n\n this.onMouseUpCommonImpl(event);\n\n // prevent clicks with scrolling/dragging objects\n if (this.target.dragThreshold)\n {\n this.movementX = Math.abs(this.offset.x);\n this.movementY = Math.abs(this.offset.y);\n\n if (Math.max(this.movementX, this.movementY) > this.target.dragThreshold)\n {\n return;\n }\n }\n\n if (!this._doubleClick)\n {\n this.onClick.call(this.target, event);\n }\n };\n\n protected onMouseUpOutsideImpl = (event): void =>\n {\n if (event.data.identifier !== this.id)\n {\n return;\n }\n\n this.onMouseUpCommonImpl(event);\n };\n\n protected onMouseOverImpl = (event): void =>\n {\n if (!this.ishover)\n {\n this.ishover = true;\n this.target.insetContainer.on('mousemove', this.onMouseMoveImpl);\n this.target.insetContainer.on('touchmove', this.onMouseMoveImpl);\n\n this.onHover.call(this.target, event, true);\n }\n };\n\n protected onMouseOutImpl = (event): void =>\n {\n if (this.ishover)\n {\n this.ishover = false;\n this.target.insetContainer.removeListener('mousemove', this.onMouseMoveImpl);\n this.target.insetContainer.removeListener('touchmove', this.onMouseMoveImpl);\n\n this.onHover.call(this.target, event, false);\n }\n };\n\n protected onMouseMoveImpl = (event): void =>\n {\n this.onMove.call(this.target, event);\n };\n}\n","import * as PIXI from 'pixi.js';\nimport { EventManager } from './EventManager';\nimport { Widget } from '../Widget';\n\n/**\n * `DragManager` handles drag & drop events. It registers listeners for `mousedown`,\n * `touchstart` on the target and `mousemove`, `touchmove`, `mouseup`, `mouseupoutside`,\n * `touchend`, `touchendoutside` on the stage.\n *\n * By default, `draggable` widgets will internally handle drag-n-drop and reassigning\n * the callbacks on their `DragManager` will break their behaviour. You can prevent\n * this by using `eventBroker.dnd` directly without setting `widget.draggable` to\n * `true` (or using `widget.makeDraggable()`).\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.EventManager\n */\nexport class DragManager extends EventManager\n{\n protected isBound: boolean;\n protected isDragging: boolean;\n protected id: number;\n protected dragStart: PIXI.Point;\n protected dragOffset: PIXI.Point;\n protected lastCursor: PIXI.Point;\n protected movementX: number;\n protected movementY: number;\n protected cancel: boolean;\n\n public onPress: (e: PIXI.interaction.InteractionEvent, isPressed: boolean) => void;\n public onDragStart: (e: PIXI.interaction.InteractionEvent) => void;\n public onDragMove: (e: PIXI.interaction.InteractionEvent, dragOffset: PIXI.Point) => void;\n public onDragEnd: (e: PIXI.interaction.InteractionEvent) => void;\n\n constructor(target: Widget)\n {\n super(target);\n\n this.isBound = false;\n this.isDragging = false;\n this.id = 0;\n this.dragStart = new PIXI.Point();\n this.dragOffset = new PIXI.Point();\n this.lastCursor = new PIXI.Point();\n this.movementX = 0;\n this.movementY = 0;\n this.cancel = false;\n\n this.target.interactive = true;\n\n this.onPress = (): void => null;\n this.onDragStart = (): void => null;\n this.onDragMove = (): void => null;\n this.onDragEnd = (): void => null;\n }\n\n startEvent(): void\n {\n if (this.isEnabled)\n {\n return;\n }\n\n const { target } = this;\n\n target.insetContainer.on('mousedown', this.onDragStartImpl);\n target.insetContainer.on('touchstart', this.onDragStartImpl);\n\n this.isEnabled = true;\n }\n\n stopEvent(): void\n {\n if (!this.isEnabled)\n {\n return;\n }\n\n const { target } = this;\n\n if (this.isBound)\n {\n target.stage.removeListener('mousemove', this.onDragMoveImpl);\n target.stage.removeListener('touchmove', this.onDragMoveImpl);\n target.stage.removeListener('mouseup', this.onDragEndImpl);\n target.stage.removeListener('mouseupoutside', this.onDragEndImpl);\n target.stage.removeListener('touchend', this.onDragEndImpl);\n target.stage.removeListener('touchendoutside', this.onDragEndImpl);\n\n this.isBound = false;\n }\n\n target.insetContainer.removeListener('mousedown', this.onDragStartImpl);\n target.insetContainer.removeListener('touchstart', this.onDragStartImpl);\n\n this.isEnabled = false;\n }\n\n protected onDragStartImpl = (e: PIXI.interaction.InteractionEvent): void =>\n {\n const { target } = this;\n\n this.id = e.data.identifier;\n this.onPress(e, true);\n\n if (!this.isBound)\n {\n this.dragStart.copyFrom(e.data.global);\n\n target.stage.on('mousemove', this.onDragMoveImpl);\n target.stage.on('touchmove', this.onDragMoveImpl);\n target.stage.on('mouseup', this.onDragEndImpl);\n target.stage.on('mouseupoutside', this.onDragEndImpl);\n target.stage.on('touchend', this.onDragEndImpl);\n target.stage.on('touchendoutside', this.onDragEndImpl);\n target.stage.on('touchcancel', this.onDragEndImpl);\n\n this.isBound = true;\n }\n\n e.data.originalEvent.preventDefault();\n };\n\n private onDragMoveImpl = (e: PIXI.interaction.InteractionEvent): void =>\n {\n if (e.data.identifier !== this.id)\n {\n return;\n }\n\n const {\n lastCursor,\n dragOffset,\n dragStart,\n target,\n } = this;\n\n this.lastCursor.copyFrom(e.data.global);\n this.dragOffset.set(lastCursor.x - dragStart.x, lastCursor.y - dragStart.y);\n\n if (!this.isDragging)\n {\n this.movementX = Math.abs(dragOffset.x);\n this.movementY = Math.abs(dragOffset.y);\n\n if ((this.movementX === 0 && this.movementY === 0)\n || Math.max(this.movementX, this.movementY) < target.dragThreshold)\n {\n return; // threshold\n }\n\n if (target.dragRestrictAxis !== null)\n {\n this.cancel = false;\n\n if (target.dragRestrictAxis === 'x' && this.movementY > this.movementX)\n {\n this.cancel = true;\n }\n else if (target.dragRestrictAxis === 'y' && this.movementY <= this.movementX)\n {\n this.cancel = true;\n }\n\n if (this.cancel)\n {\n this.onDragEndImpl(e);\n\n return;\n }\n }\n\n this.onDragStart(e);\n this.isDragging = true;\n }\n\n this.onDragMove(e, dragOffset);\n };\n\n private onDragEndImpl = (e: PIXI.interaction.InteractionEvent): void =>\n {\n if (e.data.identifier !== this.id)\n {\n return;\n }\n\n const { target } = this;\n\n if (this.isBound)\n {\n target.stage.removeListener('mousemove', this.onDragMoveImpl);\n target.stage.removeListener('touchmove', this.onDragMoveImpl);\n target.stage.removeListener('mouseup', this.onDragEndImpl);\n target.stage.removeListener('mouseupoutside', this.onDragEndImpl);\n target.stage.removeListener('touchend', this.onDragEndImpl);\n target.stage.removeListener('touchendoutside', this.onDragEndImpl);\n target.stage.removeListener('touchcancel', this.onDragEndImpl);\n\n this.isDragging = false;\n this.isBound = false;\n\n this.onDragEnd(e);\n this.onPress(e, false);\n }\n };\n}\n","import { ClickManager } from './ClickManager';\nimport { DragManager } from './DragManager';\nimport { EventManager } from './EventManager';\nimport { Widget } from '../Widget';\n\n/**\n * The event brokers allows you to access event managers without manually assigning\n * them to a widget. By default, the click (`PUXI.ClickManager`), dnd (`PUXI.DragManager`)\n * are defined. You can add event managers for all (new) widgets by adding an entry to\n * `EventBroker.MANAGER_MAP`.\n *\n * @memberof PUXI\n * @class\n */\nexport class EventBroker\n{\n [key: string]: EventManager | Widget;\n\n constructor(target: Widget)\n {\n this.target = target;\n\n for (const mgr of Object.keys(EventBroker.MANAGER_MAP))\n {\n Object.defineProperty(\n this,\n mgr,\n {\n get(): EventManager\n {\n if (!this[`_${mgr}`])\n {\n this[`_${mgr}`] = new EventBroker.MANAGER_MAP[mgr](this.target);\n }\n\n return this[`_${mgr}`];\n },\n },\n );\n }\n }\n\n static MANAGER_MAP = {\n click: ClickManager,\n dnd: DragManager,\n };\n}\n","import * as PIXI from 'pixi.js';\nimport { EventManager } from './EventManager';\nimport { Widget } from '../Widget';\n\n/**\n * Handles the `wheel` and `scroll` DOM events on widgets. It also registers\n * listeners for `mouseout` and `mouseover`.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.EventManager\n */\nexport class ScrollManager extends EventManager\n{\n private bound: boolean;\n private delta: PIXI.Point;\n private preventDefault: boolean;\n\n constructor(target: Widget, preventDefault = true)\n {\n super(target);\n\n this.bound = false;\n this.delta = new PIXI.Point();\n this.preventDefault = preventDefault;\n\n this.startEvent();\n }\n\n /**\n * @override\n */\n startEvent(): void\n {\n const { target, onHoverImpl, onMouseOutImpl } = this;\n\n target.contentContainer.on('mouseover', onHoverImpl);\n target.contentContainer.on('mouseout', onMouseOutImpl);\n }\n\n /**\n * @override\n */\n stopEvent(): void\n {\n const { target, onMouseScrollImpl, onHoverImpl, onMouseOutImpl } = this;\n\n if (this.bound)\n {\n document.removeEventListener('mousewheel', onMouseScrollImpl);\n document.removeEventListener('DOMMouseScroll', onMouseScrollImpl);\n\n this.bound = false;\n }\n\n target.contentContainer.removeListener('mouseover', onHoverImpl);\n target.contentContainer.removeListener('mouseout', onMouseOutImpl);\n }\n\n private onMouseScrollImpl = (e: WheelEvent): void =>\n {\n const { target, preventDefault, delta } = this;\n\n if (preventDefault)\n {\n event.preventDefault();\n }\n\n if (typeof e.deltaX !== 'undefined')\n {\n delta.set(e.deltaX, e.deltaY);\n }\n else // Firefox\n {\n delta.set(e.axis === 1 ? e.detail * 60 : 0,\n e.axis === 2 ? e.detail * 60 : 0);\n }\n\n this.onMouseScroll.call(target, event, delta);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private onHoverImpl = (e): void =>\n {\n const { onMouseScrollImpl } = this;\n\n if (!this.bound)\n {\n document.addEventListener('mousewheel', onMouseScrollImpl, false);\n document.addEventListener('DOMMouseScroll', onMouseScrollImpl, false);\n\n this.bound = true;\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private onMouseOutImpl = (e): void =>\n {\n const { onMouseScrollImpl } = this;\n\n if (this.bound)\n {\n document.removeEventListener('mousewheel', onMouseScrollImpl);\n document.removeEventListener('DOMMouseScroll', onMouseScrollImpl);\n\n this.bound = false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onMouseScroll = function onMouseScroll(event, delta: PIXI.Point): void\n {\n // Default onMouseScroll.\n };\n}\n","import { DragManager } from './event/DragManager';\nimport { DragDropController } from './event/DragDropController';\nimport * as PIXI from 'pixi.js';\nimport { Insets } from './layout-options/Insets';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { MeasureMode, IMeasurable } from './IMeasurable';\nimport { Stage } from './Stage';\nimport { DropShadowFilter } from '@pixi/filter-drop-shadow';\nimport { EventBroker } from './event';\nimport { Style } from './Style';\nimport { Menu } from './Menu';\nimport { PopupMenu } from './PopupMenu';\n\nconst PADDING_PROPERTIES = ['paddingLeft', 'paddingTop', 'paddingRight', 'paddingBottom'];\n\nconst PADDING_AXIS_PROPERTIES = ['paddingHorizontal', 'paddingVertical'];\n\nexport const TEXT_STYLE_PROPERTIES = [\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'letterSpacing',\n];\n\n/**\n * A widget is a user interface control that renders content inside its prescribed\n * rectangle on the screen.\n *\n * @memberof PUXI\n * @class\n * @extends PIXI.utils.EventEmitter\n * @implements PUXI.IMeasurable\n */\nexport class Widget extends PIXI.utils.EventEmitter implements IMeasurable\n{\n /**\n * The minimum delay between two clicks to not consider them as a double-click.\n */\n public static CLICK_DELAY = 300;\n\n public readonly insetContainer: PIXI.Container;\n public readonly contentContainer: PIXI.Container;\n public readonly widgetChildren: Widget[];\n public readonly stage: Stage;\n\n initialized: boolean;\n protected dragInitialized: boolean;\n protected dropInitialized: boolean;\n protected isDragging: boolean;\n\n private draggable: boolean;\n private droppable: boolean;\n \n tint: number;\n dirty: boolean;\n _oldWidth: number;\n _oldHeight: number;\n pixelPerfect: boolean;\n\n parent: Widget;\n\n public layoutMeasure: Insets;\n public layoutOptions: LayoutOptions;\n\n protected blendMode: PIXI.BLEND_MODES;\n protected background: PIXI.Container;\n protected _measuredWidth: number;\n protected _measuredHeight: number;\n\n private _eventBroker: EventBroker;\n private _paddingLeft: number;\n private _paddingTop: number;\n private _paddingRight: number;\n private _paddingBottom: number;\n private _width: number;\n private _height: number;\n private _elevation: number;\n private _dropShadow: DropShadowFilter;\n private _layoutDirty: boolean;\n\n private singleClickTimeout: NodeJS.Timeout;\n private style: Style;\n private styleID: number;\n private contextMenu: Menu;\n private contextPopup: PopupMenu;\n\n constructor()\n {\n super();\n\n /**\n * This container owns the background + content of this widget.\n * @member {PIXI.Container}\n * @readonly\n */\n this.insetContainer = new PIXI.Container();\n\n /**\n * This container holds the content of this widget. Subclasses should add\n * renderable display-objects to this container.\n * @member {PIXI.Container}\n * @readonly\n */\n this.contentContainer = this.insetContainer.addChild(new PIXI.Container());\n\n /**\n * Children of this widget. Use `WidgetGroup` to position children.\n * @member {PUXI.Widget[]}\n * @readonly\n */\n this.widgetChildren = [];\n\n /**\n * Stage whose scene graph holds this widget. Once set, this cannot be changed.\n * @member {PUXI.Stage}\n * @readonly\n */\n this.stage = null;\n\n /**\n * Layout insets of this widget. In normal state, the widget should be in this\n * rectangle inside the parent reference frame.\n * @member {PUXI.Insets}\n * @readonly\n */\n this.layoutMeasure = new Insets();\n\n this.initialized = false;\n this.dragInitialized = false;\n this.dropInitialized = false;\n\n this.dirty = true;\n this._oldWidth = -1;\n this._oldHeight = -1;\n this.pixelPerfect = true;\n\n this._paddingLeft = 0;\n this._paddingTop = 0;\n this._paddingRight = 0;\n this._paddingBottom = 0;\n this._elevation = 0;\n\n this.tint = 0;\n this.blendMode = PIXI.BLEND_MODES.NORMAL;\n\n this.draggable = false;\n this.droppable = false;\n\n this.singleClickTimeout = null;\n this.style = null;\n this.styleID = -1;\n\n // Use a separate callback function to allow this.on* methods to be reassigned.\n this.insetContainer.on('pointerdown', (e: PIXI.InteractionEvent) => { this.onPointerPress(e); });\n this.insetContainer.on('pointermove', (e: PIXI.InteractionEvent) => { this.onPointerMove(e); });\n this.insetContainer.on('pointerup', (e: PIXI.InteractionEvent) => { this.onPointerRelease(e); });\n this.insetContainer.on('pointerover', (e: PIXI.InteractionEvent) => { this.onPointerEnter(e); });\n this.insetContainer.on('pointerout', (e: PIXI.InteractionEvent) => { this.onPointerExit(e); });\n this.insetContainer.on('rightclick', (e: PIXI.InteractionEvent) => { this.onRightClick(e); });\n }\n\n /**\n * Update method that is to be overriden. This is called before a `render()`\n * pass on widgets that are dirty.\n *\n * @private\n */\n update(): any\n {\n if (this._layoutDirty)\n {\n // console.log('here');\n setTimeout(() =>\n {\n if (this._layoutDirty)\n {\n this.stage.measureAndLayout();\n }\n }, 0);\n }\n\n if (this.style && this.styleID !== this.style.dirtyID)\n {\n this.onStyleChange(this.style);\n this.styleID = this.style.dirtyID;\n }\n }\n\n /**\n * The measured width that is used by the parent's layout manager to place this\n * widget.\n * @member {number}\n */\n get measuredWidth(): number\n {\n return this._measuredWidth;\n }\n\n /**\n * The measured height that is used by the parent's layout manager to place this\n * widget.\n * @member {number}\n */\n get measuredHeight(): number\n {\n return this._measuredHeight;\n }\n\n /**\n * Alias for `Widget.measuredWidth`.\n *\n * @returns {number} the measured width\n */\n getMeasuredWidth(): number\n {\n return this._measuredWidth;\n }\n\n /**\n * Alias for `Widget.measuredHeight`.\n *\n * @returns {number} the measured height\n */\n getMeasuredHeight(): number\n {\n return this._measuredHeight;\n }\n\n /**\n * Override this method to measure the dimensions for your widget. By default, it\n * will use the natural width/height of this widget's content (`contentContainer`)\n * plus any padding.\n *\n * @param {number} width - width of region provided by parent\n * @param {number} height - height of region provided by parent\n * @param {PUXI.MeasureMode} widthMode - mode in which provided width is to be used\n * @param {PUXI.MeasureMode} heightMode - mode in which provided height is to be used\n */\n onMeasure(width: number, height: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n const naturalWidth = this.contentContainer.width + this.paddingHorizontal;\n const naturalHeight = this.contentContainer.height + this.paddingVertical;\n\n switch (widthMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredWidth = width;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredWidth = naturalWidth;\n break;\n case MeasureMode.AT_MOST:\n this._measuredWidth = Math.min(width, naturalWidth);\n break;\n }\n\n switch (heightMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredHeight = height;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredHeight = naturalHeight;\n break;\n case MeasureMode.AT_MOST:\n this._measuredHeight = Math.min(height, naturalHeight);\n break;\n }\n }\n\n /**\n * This method calls `Widget.onMeasure` and should not be overriden. It does internal\n * bookkeeping.\n *\n * @param {number} width\n * @param {number} height\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n */\n measure(width: number, height: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n this.onMeasure(width, height, widthMode, heightMode);\n }\n\n /**\n * This method should set the frame in which rendering will occur and lay out\n * child widgets in that frame.\n *\n * @param l\n * @param t\n * @param r\n * @param b\n * @param dirty\n * @protected\n */\n onLayout(l: number, t: number = l, r: number = l, b: number = t, dirty = true): void\n {\n this.layoutMeasure.left = l;\n this.layoutMeasure.top = t;\n this.layoutMeasure.right = r;\n this.layoutMeasure.bottom = b;\n\n this._width = r - l;\n this._height = b - t;\n\n if (this.background)\n {\n this.background.x = 0;\n this.background.y = 0;\n this.background.width = r - l;\n this.background.height = b - t;\n }\n\n // Update parallel PIXI node too!\n this.insetContainer.x = l;\n this.insetContainer.y = t;\n this.contentContainer.x = this._paddingLeft;\n this.contentContainer.y = this._paddingTop;\n\n // Don't set width/height on inset, content because that would scale\n // the contents (we don't want that).\n\n this._layoutDirty = false;\n }\n\n layout(l: number, t: number = l, r: number = l, b: number = t, dirty = true): void\n {\n this.onLayout(l, t, r, b, dirty);\n }\n\n /**\n * Use this to specify how you want to layout this widget w.r.t its parent.\n * The specific layout options class depends on which layout you are\n * using in the parent widget.\n *\n * @param {PUXI.LayoutOptions} lopt\n * @returns {Widget} this\n */\n setLayoutOptions(lopt: LayoutOptions): Widget\n {\n this.layoutOptions = lopt;\n\n return this;\n }\n\n /**\n * This is invoked when a style is applied on the widget. If you override it, you must pass through the superclass\n * implementation.\n *\n * @param style\n */\n protected onStyleChange(style: Style): void\n {\n const styleData = style.getProperties(\n 'backgroundColor',\n 'background',\n 'elevation',\n 'padding',\n 'paddingHorizontal',\n 'paddingVertical',\n 'paddingLeft',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n );\n\n // Set background of widget\n if (styleData.background)\n {\n this.setBackground(styleData.background);\n }\n else if (typeof styleData.backgroundColor !== 'undefined')\n {\n this.setBackground(styleData.backgroundColor);\n }\n\n // Set elevation\n if (typeof styleData.elevation !== 'undefined')\n {\n this.setElevation(styleData.elevation);\n }\n\n // Set _paddingLeft, _paddingTop, _paddingRight, _paddingBottom\n PADDING_PROPERTIES.forEach((propName, i) =>\n {\n if (typeof styleData[propName] === 'number')\n {\n this[`_${propName}`] = styleData[propName];\n }\n else if (typeof styleData[PADDING_AXIS_PROPERTIES[i % 2]] === 'number')\n {\n this[`_${propName}`] = styleData[PADDING_AXIS_PROPERTIES[i % 2]];\n }\n else if (typeof styleData.padding === 'number')\n {\n this[`_${propName}`] = styleData.padding;\n }\n });\n\n this.dirty = true;\n }\n\n /**\n * Handles the pointer-entered event.\n *\n * If you override this method, you must call through to the superclass implementation.\n *\n * @param e - the triggering interaction event\n */\n onPointerEnter(e: PIXI.InteractionEvent): void\n {\n this.onHoverChange(e, true);\n }\n\n /**\n * Handles the pointer-exited event.\n *\n * If you override this method, you must call through to the superclass implementation.\n *\n * @param e\n */\n onPointerExit(e: PIXI.InteractionEvent): void\n {\n this.onHoverChange(e, false);\n }\n\n /**\n * Handles the pointer-down event. If you override this method, you must call through to the superclass\n * implementation.\n */\n onPointerPress(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n /**\n * Handles the pointer-move event. If you override this method, you must call through to the superclass\n * implementation.\n */\n onPointerMove(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n onPointerRelease(e: PIXI.InteractionEvent): void\n {\n if (!this.singleClickTimeout)\n {\n // Invoke onClick after ~300ms only if it isn't a double-click.\n this.singleClickTimeout = setTimeout(() =>\n {\n this.singleClickTimeout = null;\n }, Widget.CLICK_DELAY);\n\n this.onClick(e);\n }\n else\n {\n clearTimeout(this.singleClickTimeout);\n\n this.singleClickTimeout = null;\n\n // Invoke onDoubleClick after the onPointerPress handler.\n setTimeout(() => { this.onDoubleClick(e); }, 0);\n }\n\n return;\n }\n\n /**\n * Event handler for change in the hover state.\n *\n * @param e\n * @param hover\n */\n onHoverChange(e: PIXI.InteractionEvent, hover: boolean): void\n {\n return;\n }\n\n onClick(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n onDoubleClick(e: PIXI.InteractionEvent): void\n {\n return;\n }\n\n onRightClick(e: PIXI.InteractionEvent): void\n {\n console.log('RIGHT_CLICK');\n e.data.originalEvent.preventDefault();\n\n if (this.contextMenu)\n {\n if (!this.contextPopup)\n {\n // this.contextPopup = new PopupMenu(this.contextMenu);\n }\n\n const location = e.data.getLocalPosition(this.stage);\n\n // this.openPopupMenu(location.x, location.y);\n }\n\n return;\n }\n\n /**\n * The event broker for this widget that holds all the event managers. This can\n * be used to start/stop clicks, drags, scrolls and configure how those events\n * are handled/interpreted.\n * @member PUXI.EventBroker\n */\n get eventBroker(): EventBroker\n {\n if (!this._eventBroker)\n {\n this._eventBroker = new EventBroker(this);\n }\n\n return this._eventBroker;\n }\n\n /**\n * Padding on left side.\n * @member {number}\n */\n get paddingLeft(): number\n {\n return this._paddingLeft;\n }\n set paddingLeft(val: number)\n {\n this._paddingLeft = val;\n this.dirty = true;\n }\n\n /**\n * Padding on top side.\n * @member {number}\n */\n get paddingTop(): number\n {\n return this._paddingTop;\n }\n set paddingTop(val: number)\n {\n this._paddingTop = val;\n this.dirty = true;\n }\n\n /**\n * Padding on right side.\n * @member {number}\n */\n get paddingRight(): number\n {\n return this._paddingRight;\n }\n set paddingRight(val: number)\n {\n this._paddingRight = val;\n this.dirty = true;\n }\n\n /**\n * Padding on bottom side.\n * @member {number}\n */\n get paddingBottom(): number\n {\n return this._paddingBottom;\n }\n set paddingBottom(val: number)\n {\n this._paddingBottom = val;\n this.dirty = true;\n }\n\n /**\n * Sum of left & right padding.\n * @member {number}\n * @readonly\n */\n get paddingHorizontal(): number\n {\n return this._paddingLeft + this._paddingRight;\n }\n\n /**\n * Sum of top & bottom padding.\n * @member {number}\n * @readonly\n */\n get paddingVertical(): number\n {\n return this._paddingTop + this._paddingBottom;\n }\n\n /**\n * Whether this widget is interactive in the PixiJS scene graph.\n * @member {boolean}\n */\n get interactive(): boolean\n {\n return this.insetContainer.interactive;\n }\n set interactive(val: boolean)\n {\n this.insetContainer.interactive = true;\n this.contentContainer.interactive = true;\n }\n\n /**\n * Layout width of this widget.\n * @member {number}\n * @readonly\n */\n get width(): number\n {\n return this._width;\n }\n\n /**\n * Layout height of this widget.\n * @member {number}\n * @readonly\n */\n get height(): number\n {\n return this._height;\n }\n\n /**\n * Layout width of this widget's content, which is the width minus horizontal padding.\n * @member {number}\n * @readonly\n */\n get contentWidth(): number\n {\n return this._width - this.paddingHorizontal;\n }\n\n /**\n * Layout height of this widget's content, which is the height minus vertical padding.\n * @member {number}\n * @readonly\n */\n get contentHeight(): number\n {\n return this._height - this.paddingVertical;\n }\n\n /**\n * Alpha of this widget & its contents.\n * @member {number}\n */\n get alpha(): number\n {\n return this.insetContainer.alpha;\n }\n set alpha(val: number)\n {\n this.insetContainer.alpha = val;\n }\n\n /**\n * Sets the padding values.\n *\n * To set all paddings to one value:\n * ```\n * widget.setPadding(8);\n * ```\n *\n * To set horizontal & vertical padding separately:\n * ```\n * widget.setPadding(4, 12);\n * ```\n *\n * @param {number}[l=0] - left padding\n * @param {number}[t=l] - top padding (default is equal to left padding)\n * @param {number}[r=l] - right padding (default is equal to right padding)\n * @param {number}[b=t] - bottom padding (default is equal to top padding)\n */\n setPadding(l: number, t: number = l, r: number = l, b: number = t): Widget\n {\n this._paddingLeft = l;\n this._paddingTop = t;\n this._paddingRight = r;\n this._paddingBottom = b;\n this.dirty = true;\n\n return this;\n }\n\n /**\n * @returns {PIXI.Container} - the background display-object\n */\n getBackground(): PIXI.Container\n {\n return this.background;\n }\n\n /**\n * The background of a widget is a `PIXI.DisplayObject` that is rendered before\n * all of its children.\n *\n * @param {PIXI.Container | number | string} bg - the background display-object or\n * a color that will be used to generate a `PIXI.Graphics` as the background.\n */\n setBackground(bg: PIXI.Container | number | string): Widget\n {\n if (this.background)\n {\n this.insetContainer.removeChild(this.background);\n }\n\n if (typeof bg === 'string')\n {\n bg = PIXI.utils.string2hex(bg);\n }\n if (typeof bg === 'number')\n {\n bg = new PIXI.Graphics()\n .beginFill(bg)\n .drawRect(0, 0, 1, 1)\n .endFill();\n }\n\n this.background = bg;\n\n if (bg)\n {\n bg.width = this.width;\n bg.height = this.height;\n this.insetContainer.addChildAt(bg, 0);\n }\n\n if (bg && this._elevation && this._dropShadow)\n {\n if (!this.background.filters)\n {\n this.background.filters = [];\n }\n\n this.background.filters.push(this._dropShadow);\n }\n\n return this;\n }\n\n /**\n * @returns {number} the alpha on the background display-object.\n */\n getBackgroundAlpha(): number\n {\n return this.background ? this.background.alpha : 1;\n }\n\n /**\n * This can be used to set the alpha on the _background_ of this widget. This\n * does not affect the widget's contents nor individual components of the\n * background display-object.\n *\n * @param {number} val - background alpha\n */\n setBackgroundAlpha(val: number): Widget\n {\n if (!this.background)\n {\n this.setBackground(0xffffff);\n }\n\n this.background.alpha = val;\n\n return this;\n }\n\n /**\n * Set the context-menu to be shown on right-clicks.\n *\n * This feature is not released yet, i.e. does not work!\n *\n * @param menu\n * @alpha\n */\n setContextMenu(menu: Menu): void\n {\n this.contextMenu = menu;\n }\n\n /**\n * @return {number} the elevation set on this widget\n */\n getElevation(): number\n {\n return this._elevation;\n }\n\n /**\n * This can be used add a drop-shadow that will appear to raise this widget by\n * the given elevation against its parent.\n *\n * @param {number} val - elevation to use. 2px is good for most widgets.\n */\n setElevation(val: number): Widget\n {\n this._elevation = val;\n\n if (val === 0 && this._dropShadow)\n {\n if (!this.background)\n {\n return this;\n }\n\n const i = this.background.filters.indexOf(this._dropShadow);\n\n if (i > 0)\n {\n this.background.filters.splice(i, 1);\n }\n }\n else if (val > 0)\n {\n if (!this._dropShadow)\n {\n if (this.background && !this.background.filters)\n {\n this.background.filters = [];\n }\n\n this._dropShadow = new DropShadowFilter({ distance: val });\n\n if (this.background)\n {\n this.background.filters.push(this._dropShadow);\n }\n }\n\n this._dropShadow.distance = val;\n }\n\n return this;\n }\n\n /**\n * Set the style applied on this widget. To unset a style, simply pass {@code null}.\n *\n * @param style\n */\n setStyle(style?: Style): this\n {\n this.style = style;\n this.styleID = -1;\n\n return this;\n }\n\n /**\n * Will trigger a full layout pass next animation frame.\n */\n requestLayout(): void\n {\n this._layoutDirty = true;\n }\n\n /**\n * Adds the widgets as children of this one.\n *\n * @param {PUXI.Widget[]} widgets\n * @returns {Widget} - this widget\n */\n addChild(...widgets: Widget[]): Widget\n {\n for (let i = 0; i < widgets.length; i++)\n {\n const widget = widgets[i];\n\n if (widget.parent)\n {\n widget.parent.removeChild(widget);\n }\n\n widget.parent = this;\n this.contentContainer.addChild(widget.insetContainer);\n this.widgetChildren.push(widget);\n }\n\n return this;\n }\n\n /**\n * Orphans the widgets that are children of this one.\n *\n * @param {PUXI.Widget[]} widgets\n * @returns {Widget} - this widget\n */\n removeChild(...widgets: Widget[]): Widget\n {\n for (let i = 0; i < widgets.length; i++)\n {\n const widget = widgets[i];\n const index = this.widgetChildren.indexOf(widget);\n\n if (index !== -1)\n {\n widget.insetContainer.parent.removeChild(widget.insetContainer);\n this.widgetChildren.splice(index, 1);\n widget.parent = null;\n }\n }\n\n return this;\n }\n\n private openPopupMenu(x: number, y: number): void\n {\n const stage = this.stage;\n const lopt = this.contextPopup.layoutOptions as FastLayoutOptions;\n\n lopt.x = x;\n lopt.y = y;\n\n this.stage.addChild(this.contextPopup);\n }\n\n private closePopupMenu(): void\n {\n this.stage.removeChild(this.contextPopup);\n }\n\n /**\n * Makes this widget `draggable`.\n */\n makeDraggable(): Widget\n {\n this.draggable = true;\n\n if (this.initialized)\n {\n this.initDraggable();\n }\n\n return this;\n }\n\n /**\n * Makes this widget not `draggable`.\n */\n clearDraggable(): void\n {\n if (this.dragInitialized)\n {\n this.dragInitialized = false;\n (this.eventBroker.dnd as DragManager).stopEvent();\n }\n }\n\n /**\n * Widget initialization related to the stage. This method should always call\n * `super.initialize()`.\n *\n * This method expects `stage` to be set before calling it. This is handled\n * by the `Stage` itself.\n *\n * This will set `initialized` to true. If it was already set to true, it _should\n * do nothing_.\n *\n * @protected\n */\n initialize(): void\n {\n if (this.initialized)\n {\n return;\n }\n\n if (this.draggable)\n {\n this.initDraggable();\n }\n if (this.droppable)\n {\n this.initDroppable();\n }\n\n this.initialized = true;\n }\n\n private initDraggable(): void\n {\n if (this.dragInitialized)\n {\n return;\n }\n\n this.dragInitialized = true;\n\n const realPosition = new PIXI.Point();\n const dragPosition = new PIXI.Point();\n\n const dnd: DragManager = this.eventBroker.dnd as DragManager;\n const { insetContainer } = this;\n\n dnd.onDragStart = (e: PIXI.InteractionEvent): void =>\n {\n const added = DragDropController.add(this, e);\n\n if (!this.isDragging && added)\n {\n this.isDragging = true;\n insetContainer.interactive = false;\n realPosition.copyFrom(insetContainer.position);\n\n this.emit('draggablestart', e);\n }\n };\n\n dnd.onDragMove = (e: PIXI.InteractionEvent, offset: PIXI.Point): void =>\n {\n if (this.isDragging)\n {\n dragPosition.set(realPosition.x + offset.x, realPosition.y + offset.y);\n\n insetContainer.x = dragPosition.x;\n insetContainer.y = dragPosition.y;\n\n this.emit('draggablemove', e);\n }\n };\n\n dnd.onDragEnd = (e: PIXI.InteractionEvent): void =>\n {\n if (this.isDragging)\n {\n this.isDragging = false;\n DragDropController.getItem(this);\n\n // Return to container after 0ms if not picked up by a droppable\n setTimeout((): void =>\n {\n this.insetContainer.interactive = true;\n this.insetContainer.position.copyFrom(realPosition);\n\n this.emit('draggableend', e);\n }, 0);\n }\n };\n\n dnd.startEvent()\n }\n\n /**\n * Makes this widget `droppable`.\n */\n makeDroppable(): Widget\n {\n this.droppable = true;\n\n if (this.initialized)\n {\n this.initDroppable();\n }\n\n return this;\n }\n\n protected onDrop: (e: PIXI.interaction.InteractionEvent) => void;\n\n /**\n * Makes this widget not `droppable`.\n */\n clearDroppable(): void\n {\n if (this.dropInitialized)\n {\n this.dropInitialized = false;\n this.contentContainer.removeListener('mouseup', this.onDrop);\n this.contentContainer.removeListener('touchend', this.onDrop);\n }\n }\n\n private initDroppable(): void\n {\n if (!this.dropInitialized)\n {\n this.dropInitialized = true;\n const container = this.contentContainer;\n\n this.contentContainer.interactive = true;\n\n this.onDrop = (event): void =>\n {\n const item = DragDropController.getEventItem(event, this.dropGroup);\n\n if (item && item.isDragging)\n {\n item.isDragging = false;\n item.insetContainer.interactive = true;\n const parent = this.droppableReparent !== null ? this.droppableReparent : self;\n\n parent.container.toLocal(item.container.position, item.container.parent, item);\n if (parent.container != item.container.parent) { parent.addChild(item); }\n }\n };\n\n container.on('mouseup', this.onDrop);\n container.on('touchend', this.onDrop);\n }\n }\n\n /**\n * Creates a widget that holds the display-object as its content. If `content` is\n * a `PUXI.Widget`, then it will be returned.\n * @param {PIXI.Container | Widget} content\n * @static\n */\n static fromContent(content: PIXI.Container | Widget): Widget\n {\n if (content instanceof Widget)\n {\n return content;\n }\n\n const widget = new Widget();\n\n widget.contentContainer.addChild(content);\n\n return widget;\n }\n\n /**\n * Easy utility to resolve measured dimension.\n * @param {number} natural - your widget's natural dimension\n * @param {number} limit - width/height limit passed by parent\n * @param {PUXI.MeasureMode} mode - measurement mode passed by parent\n */\n static resolveMeasuredDimen(natural: number, limit: number, mode: MeasureMode): number\n {\n if (mode === MeasureMode.EXACTLY)\n {\n return limit;\n }\n else if (mode === MeasureMode.AT_MOST)\n {\n return Math.min(limit, natural);\n }\n\n return natural;\n }\n}\n","/**\n * Alignments supported by layout managers in PuxiJS core.\n *\n * @memberof PUXI\n * @enum\n */\nexport enum ALIGN\n{\n LEFT = 0,\n TOP = 0,\n MIDDLE = 0xff1,\n CENTER = 0xff1,\n RIGHT = 0xffff1,\n BOTTOM = 0xffff1,\n NONE = 0xffffffff\n}\n","/**\n * This are the base constraints that you can apply on a `PUXI.Widget` under any\n * layout manager. It specifies the dimensions of a widget, while the position\n * of the widget is left to the parent to decide. If a dimension (width or height)\n * is set to a value between -1 and 1, then it is interpreted as a percentage\n * of the parent's dimension.\n *\n * The following example will render a widget at 50% of the parent's width and 10px height:\n *\n * ```js\n * const widget = new PUXI.Widget();\n * const parent = new PUXI.Widget();\n *\n * widget.layoutOptions = new PUXI.LayoutOptions(\n * .5,\n * 10\n * );\n * parent.addChild(widget);\n * ```\n *\n * @memberof PUXI\n * @class\n */\nexport class LayoutOptions\n{\n public static FILL_PARENT = 0xfffffff1;\n public static WRAP_CONTENT = 0xfffffff2;\n public static MAX_DIMEN = 0xfffffff0;\n\n public static DEFAULT = new LayoutOptions();\n\n public width: number;\n public height: number;\n public cache: any;\n\n private _marginLeft: number;\n private _marginTop: number;\n private _marginRight: number;\n private _marginBottom: number;\n\n /**\n * @param {number}[width = LayoutOptions.WRAP_CONTENT]\n * @param {number}[height = LayoutOptions.WRAP_CONTENT]\n */\n constructor(width: number | string = LayoutOptions.WRAP_CONTENT, height: number | string = LayoutOptions.WRAP_CONTENT)\n {\n this.setWidth(width);\n this.setHeight(height);\n\n /**\n * Used by the layout manager to cache calculations.\n * @member {object}\n */\n this.cache = {};\n }\n\n /**\n * Utility method to store width that converts strings to their number format.\n *\n * @param {number | string} val\n * @example\n * ```\n * lopt.setWidth('68.7%');// 68.7% of parent's width\n * lopt.setWidth('96px');// 96px\n * lopt.setWidth(34);// 34px\n * lopt.setWidth(.45);// 45% of parent's width\n * ```\n */\n setWidth(val: number | string): void\n {\n /**\n * Preferred height of the widget in pixels. If its value is between -1 and 1, it\n * is interpreted as a percentage of the parent's height.\n * @member {number}\n * @default {PUXI.LayoutOptions.WRAP_CONTENT}\n */\n this.width = LayoutOptions.parseDimen(val);\n }\n\n /**\n * Utility method to store height that converts strings to their number format.\n *\n * @param {number | string} val\n * @example\n * ```\n * lopt.setHeight('68.7%');// 68.7% of parent's height\n * lopt.setHeight('96px');// 96px\n * lopt.setHeight(34);// 34px\n * lopt.setHeight(.45);// 45% of parent's height\n * ```\n */\n setHeight(val: number | string): void\n {\n /**\n * Preferred width of the widget in pixels. If its value is between -1 and 1, it\n * is interpreted as a percentage of the parent's width.\n * @member {number}\n * @default {PUXI.LayoutOptions.WRAP_CONTENT}\n */\n this.height = LayoutOptions.parseDimen(val);\n }\n\n /**\n * @member {boolean} - whether the specified width is a constant\n * (not a percentage, `WRAP_CONTENT`, or `FILL_PARENT`)\n */\n get isWidthPredefined(): boolean\n {\n return this.width > 1 && this.width <= LayoutOptions.MAX_DIMEN;\n }\n\n /**\n * @member {boolean} - whether the specified height is a constant\n * (not a percentage, `WRAP_CONTENT`, or `FILL_PARENT`)\n */\n get isHeightPredefined(): boolean\n {\n return this.height > 1 && this.height <= LayoutOptions.MAX_DIMEN;\n }\n\n /**\n * The left margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginLeft(): number\n {\n return this._marginLeft || 0;\n }\n set marginLeft(val: number)\n {\n this._marginLeft = val;\n }\n\n /**\n * This top margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginTop(): number\n {\n return this._marginTop || 0;\n }\n set marginTop(val: number)\n {\n this._marginTop = val;\n }\n\n /**\n * The right margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginRight(): number\n {\n return this._marginRight || 0;\n }\n set marginRight(val: number)\n {\n this._marginRight = val;\n }\n\n /**\n * The bottom margin in pixels of the widget.\n * @member {number}\n * @default 0\n */\n get marginBottom(): number\n {\n return this._marginBottom || 0;\n }\n set marginBottom(val: number)\n {\n this._marginBottom = val;\n }\n\n /**\n * @param left\n * @param top\n * @param right\n * @param bottom\n */\n setMargin(left: number, top: number, right: number, bottom: number): void\n {\n this._marginLeft = left;\n this._marginTop = top;\n this._marginRight = right;\n this._marginBottom = bottom;\n }\n\n static parseDimen(val: number | string): number\n {\n if (typeof val === 'string')\n {\n if (val.endsWith('%'))\n {\n val = parseFloat(val.replace('%', '')) / 100;\n }\n else if (val.endsWith('px'))\n {\n val = parseFloat(val.replace('px', ''));\n }\n\n if (typeof val === 'string' || isNaN(val))\n {\n throw new Error('Width could not be parsed!');\n }\n }\n\n return val;\n }\n}\n","import { ALIGN } from './Align';\nimport { LayoutOptions } from './LayoutOptions';\n\ninterface IAnchorLayoutParams\n{\n anchorLeft?: number;\n anchorTop?: number;\n anchorRight?: number;\n anchorBottom?: number;\n horizontalAlign?: ALIGN;\n verticalAlign?: ALIGN;\n width: number | string;\n height: number | string;\n}\n\n/**\n * @memberof PUXI\n * @interface IAnchorLayoutParams\n * @property {number} anchorLeft - distance from parent's left inset to child's left edge\n * @property {number} anchorTop - distance from parent's top inset to child's top edge\n * @property {number} anchorRight - distance from parent's right inset to child's right edge\n * @property {number} anchorBottom - distance from parent's bottom insets to child's bottom edge\n * @property {PUXI.ALIGN} horizontalAlign - horizontal alignment of child in anchor region\n * @property {PUXI.ALIGN} verticalAlign - vertical alignment of child in anchor region\n * @property {number | string} width - requested width of widget (default is `WRAP_CONTENT`)\n * @property {number | string} height - requested height of widget (default is `WRAP_CONTENT`)\n */\n\n/**\n * Anchors the edge of a widget to defined offsets from the parent's insets.\n *\n * The following example will render a widget at (10px, 15%) with a width extending\n * to the parent's center and a height extending till 40px above the parent's bottom\n * inset.\n * ```js\n * new PUXI.AnchoredLayoutOptions({\n * anchorLeft: 10,\n * anchorTop: .15,\n * anchorRight: .5,\n * anchorBottom: 40\n * });\n * ```\n *\n * ### Intra-anchor region alignment\n *\n * You can specify how the widget should be aligned in the intra-anchor region using the\n * `horizontalAlign` and `verticalAlign` properties.\n *\n * ### Support for FILL_PARENT and percentage-of-parent dimensions\n *\n * Anchor layout does not support a width/height that is `LayoutOptions.FILL_PARENT`\n * or a percentage of the parent's width/height. Instead, you can define anchors that\n * result in the equivalent behaviour.\n *\n * @memberof PUXI\n * @extends PUXI.LayoutOptions\n * @class\n */\nexport class AnchorLayoutOptions extends LayoutOptions\n{\n public anchorLeft: number;\n public anchorTop: number;\n public anchorRight: number;\n public anchorBottom: number;\n\n public horizontalAlign: ALIGN;\n public verticalAlign: ALIGN;\n\n constructor(options: IAnchorLayoutParams)\n {\n super(options.width, options.height);\n\n this.anchorLeft = options.anchorLeft || 0;\n this.anchorTop = options.anchorTop || 0;\n this.anchorBottom = options.anchorBottom || 0;\n this.anchorRight = options.anchorRight || 0;\n\n this.horizontalAlign = options.horizontalAlign || ALIGN.LEFT;\n this.verticalAlign = options.verticalAlign || ALIGN.CENTER;\n }\n}\n","import { LayoutOptions } from './LayoutOptions';\nimport * as PIXI from 'pixi.js';\n\nexport interface IFastLayoutParams\n{\n width?: number | string;\n height?: number | string;\n x?: number;\n y?: number;\n anchor?: PIXI.Point;\n}\n\n/**\n * @memberof PUXI\n * @interface\n * @property {number} width\n * @property {number} height\n * @property {number} x\n * @property {number} y\n * @property {PIXI.Point} anchor\n */\n\n/**\n * `PUXI.FastLayoutOptions` is an extension to `PUXI.LayoutOptions` that also\n * defines the x & y coordinates. It is accepted by the stage and `PUXI.FastLayout`.\n *\n * If x or y is between -1 and 1, then that dimension will be interpreted as a\n * percentage of the parent's width or height.\n *\n * @memberof PUXI\n * @extends PUXI.LayoutOptions\n * @class\n */\nexport class FastLayoutOptions extends LayoutOptions\n{\n static DEFAULT_ANCHOR = new PIXI.Point(0, 0);\n static CENTER_ANCHOR = new PIXI.Point(0.5, 0.5);// fragile, shouldn't be modified\n\n x: number;\n y: number;\n anchor: PIXI.Point;\n\n constructor(options: IFastLayoutParams)\n {\n super(options.width, options.height);\n\n /**\n * X-coordinate of the widget in its parent's reference frame. If it is\n * absolutely less than 1, then it will be interpreted as a percent of\n * the parent's width.\n * @member {number}\n * @default 0\n */\n this.x = options.x || 0;\n\n /**\n * Y-coordinate of the widget in its parent's reference frame. If it is\n * absolutely less than 1, then it will be interpreted as a percent of\n * the parent's height.\n * @member {number}\n * @default 0\n */\n this.y = options.y || 0;\n\n /**\n * The anchor is a normalized point telling where the (x,y) position of the\n * widget lies inside of it. By default, it is (0, 0), which means that the\n * top-left corner of the widget will be at (x,y); however, setting it to\n * (.5,.5) will make the _center of the widget_ be at (x,y) in the parent's\n * reference frame.\n * @member {PIXI.Point}\n * @default PUXI.FastLayoutOptions.DEFAULT_ANCHOR\n */\n this.anchor = options.anchor || FastLayoutOptions.DEFAULT_ANCHOR.clone();\n }\n}\n","import { LayoutOptions } from './LayoutOptions';\nimport { ALIGN } from './Align';\n\nexport interface IBorderLayoutParams\n{\n width?: number;\n height?: number;\n region?: number;\n horizontalAlign?: ALIGN;\n verticalAlign?: ALIGN;\n}\n\n/**\n * @memberof PUXI\n * @interface IBorderLayoutParams\n * @property {number} width\n * @property {number} height\n * @property {number} region\n * @property {number} horizontalAlign\n * @property {number} verticalAlign\n */\n\n/**\n * `PUXI.BorderLayoutOptions` defines a simple layout with five regions - the center and\n * four regions along each border. The top and bottom regions span the full width of\n * the parent widget-group. The left and right regions span the height of the layout\n * minus the top and bottom region heights.\n *\n * ```\n * ------------------------------------------------\n * | TOP REGION |\n * ------------------------------------------------\n * | | | |\n * | LEFT | CENTER | RIGHT |\n * | REGION | REGION | REGION |\n * | | | |\n * ------------------------------------------------\n * | BOTTOM REGION |\n * ------------------------------------------------\n * ```\n *\n * The height of the layout is measured as the sum of the heights of the top, center, and bottom\n * regions. Similarly, the width of the layout is measured as the width of the left, center, and\n * right regions.\n *\n * As of now, border layout doesn't support percent widths and heights.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.LayoutOptions\n */\nexport class BorderLayoutOptions extends LayoutOptions\n{\n /**\n * Positions a widget inside the left border of the layout.\n * @static\n * @member {number}\n */\n static REGION_LEFT = 0xeff1;\n\n /**\n * Positions a widget below the top border of the layout.\n * @static\n * @member {number}\n */\n static REGION_TOP = 0xeff2;\n\n /**\n * Positions a widget below the right border of the layout.\n * @static\n * @member {number}\n */\n static REGION_RIGHT = 0xeff3;\n\n /**\n * Positions a widget below the top border of the layout.\n * @static\n * @member {number}\n */\n static REGION_BOTTOM = 0xeff4;\n\n /**\n * Positions a widget in the center of the layout. The main content of the layout\n * should be in the center.\n * @static\n * @member {number}\n */\n static REGION_CENTER = 0xeff5;\n\n region: number;\n horizontalAlign: number;\n verticalAlign: number;\n\n constructor(options: IBorderLayoutParams)\n {\n super(options.width, options.height);\n\n /**\n * The border along which the widget is to be placed. This can be one of `POS_LEFT`,\n * `POS_TOP`, `POS_RIGHT`, `POS_BOTTOM`.\n * @member {number}\n * @default {PUXI.BorderLayoutOptions#REGION_CENTER}\n */\n this.region = options.region || BorderLayoutOptions.REGION_CENTER;\n\n /**\n * Alignment of the widget horizontally in its region.\n * @member {PUXI.ALIGN}\n * @default {PUXI.ALIGN.LEFT}\n */\n this.horizontalAlign = options.horizontalAlign || ALIGN.LEFT;\n\n /**\n * Alignment of the widget vertically in its region.\n * @member {PUXI.ALIGN}\n * @default {PUXI.ALIGN.TOP}\n */\n this.verticalAlign = options.verticalAlign || ALIGN.TOP;\n }\n}\n","import { MeasureMode } from '../IMeasurable';\nimport { ILayoutManager } from './ILayoutManager';\nimport { LayoutOptions, FastLayoutOptions } from '../layout-options';\nimport { WidgetGroup } from '../WidgetGroup';\n\n/**\n * `PUXI.FastLayout` is used in conjunction with `PUXI.FastLayoutOptions`. It is the\n * default layout for most widget groups.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.ILayoutManager\n * @example\n * ```\n * parent.useLayout(new PUXI.FastLayout())\n * ```\n */\nexport class FastLayout implements ILayoutManager\n{\n private host: WidgetGroup;\n private _measuredWidth: number;\n private _measuredHeight: number;\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n }\n\n onLayout(): void\n {\n const parent = this.host;\n const { contentWidth: width, contentHeight: height, widgetChildren: children } = parent;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n\n let x = lopt.x ? lopt.x : 0;\n let y = lopt.y ? lopt.y : 0;\n\n if (Math.abs(x) < 1)\n {\n x *= width;\n }\n if (Math.abs(y) < 1)\n {\n y *= height;\n }\n\n const anchor = lopt.anchor || FastLayoutOptions.DEFAULT_ANCHOR;\n\n const l = x - (anchor.x * widget.getMeasuredWidth());\n const t = y - (anchor.y * widget.getMeasuredHeight());\n\n widget.layout(l, t,\n l + widget.getMeasuredWidth(),\n t + widget.getMeasuredHeight());\n }\n }\n\n onMeasure(maxWidth: number, maxHeight: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n // TODO: Passthrough optimization pass, if there is only one child with FILL_PARENT width or height\n // then don't measure twice.\n\n this._measuredWidth = maxWidth;\n this._measuredHeight = maxHeight;\n\n const children = this.host.widgetChildren;\n\n // Measure children\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n\n const loptWidth = (Math.abs(lopt.width) < 1) ? lopt.width * maxWidth : lopt.width;\n const loptHeight = (Math.abs(lopt.height) < 1) ? lopt.height * maxHeight : lopt.height;\n const widthMeasureMode = this.getChildMeasureMode(lopt.width, widthMode);\n const heightMeasureMode = this.getChildMeasureMode(lopt.height, heightMode);\n\n widget.measure(loptWidth, loptHeight, widthMeasureMode, heightMeasureMode);\n }\n\n this._measuredWidth = this.measureWidthReach(maxWidth, widthMode);\n this._measuredHeight = this.measureHeightReach(maxHeight, heightMode);\n\n this.measureChildFillers();\n }\n\n private getChildMeasureMode(dimen: number, parentMeasureMode: MeasureMode): MeasureMode\n {\n if (dimen === LayoutOptions.WRAP_CONTENT)\n {\n // No MeasureMode.EXACTLY!\n return parentMeasureMode === MeasureMode.UNBOUNDED ? MeasureMode.UNBOUNDED : MeasureMode.AT_MOST;\n }\n\n return parentMeasureMode;\n }\n\n private measureWidthReach(parentWidthLimit: number, widthMode: MeasureMode): number\n {\n if (widthMode === MeasureMode.EXACTLY)\n {\n return parentWidthLimit;\n }\n\n const children = this.host.widgetChildren;\n let measuredWidth = 0;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const childWidth = widget.getMeasuredWidth();\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n const x = lopt.x ? lopt.x : 0;\n const anchor = lopt.anchor ? lopt.anchor : FastLayoutOptions.DEFAULT_ANCHOR;\n\n // If lopt.x is %, then (1 - lopt.x)% of parent width should be as large\n // as (1 - anchor.x)% child's width.\n const minr = (Math.abs(x) < 1 ? (1 - anchor.x) * childWidth / (1 - x) : x + childWidth);\n\n measuredWidth = Math.max(measuredWidth, minr);\n }\n\n if (widthMode === MeasureMode.AT_MOST)\n {\n measuredWidth = Math.min(parentWidthLimit, measuredWidth);\n }\n\n return measuredWidth;\n }\n\n private measureHeightReach(parentHeightLimit: number, heightMode: MeasureMode): number\n {\n if (heightMode === MeasureMode.EXACTLY)\n {\n return parentHeightLimit;\n }\n\n const children = this.host.widgetChildren;\n let measuredHeight = 0;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const childHeight = widget.getMeasuredHeight();\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n const y = lopt.y ? lopt.y : 0;\n const anchor = lopt.anchor ? lopt.anchor : FastLayoutOptions.DEFAULT_ANCHOR;\n\n const minb = (Math.abs(y) < 1 ? (1 - anchor.y) * childHeight / (1 - y) : y + childHeight);\n\n measuredHeight = Math.max(measuredHeight, minb);\n }\n\n if (heightMode === MeasureMode.AT_MOST)\n {\n measuredHeight = Math.min(parentHeightLimit, measuredHeight);\n }\n\n return measuredHeight;\n }\n\n private measureChildFillers(): void\n {\n const children = this.host.widgetChildren;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n let loptWidth = (Math.abs(lopt.width) < 1) ? lopt.width * this._measuredWidth : lopt.width;\n let loptHeight = (Math.abs(lopt.height) < 1) ? lopt.height * this._measuredHeight : lopt.height;\n\n if (loptWidth === LayoutOptions.WRAP_CONTENT)\n {\n loptWidth = widget.getMeasuredWidth();\n }\n if (loptHeight === LayoutOptions.WRAP_CONTENT)\n {\n loptHeight = widget.getMeasuredHeight();\n }\n\n if (lopt.width === LayoutOptions.FILL_PARENT || lopt.height === LayoutOptions.FILL_PARENT)\n {\n widget.measure(\n lopt.width === LayoutOptions.FILL_PARENT ? this._measuredWidth : loptWidth,\n lopt.height === LayoutOptions.FILL_PARENT ? this._measuredHeight : loptHeight,\n MeasureMode.EXACTLY,\n MeasureMode.EXACTLY,\n );\n }\n }\n }\n\n getMeasuredWidth(): number\n {\n return this._measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this._measuredHeight;\n }\n}\n","import { Widget } from './Widget';\nimport { ILayoutManager } from './layout-manager/ILayoutManager';\nimport { MeasureMode } from './IMeasurable';\nimport { FastLayout } from './layout-manager/FastLayout';\n\n/**\n * A widget group is a layout owner that can position its children according\n * to the layout given to it.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n * @example\n * ```\n * const group = new PUXI.InteractiveGroup();\n *\n * group.useLayout(new PUXI.AnchorLayout());\n *\n * group.addChild(new PUXI.Button({ text: \"Hey\" })\n * .setLayoutOptions(\n * new PUXI.AnchorLayoutOptions({\n * anchorLeft: 100,\n * anchorTop: 300,\n * anchorRight: .4,\n * anchorBottom: 500,\n * horizontalAlign: PUXI.ALIGN.CENTER\n * })\n * )\n * )\n * ```\n */\nexport class WidgetGroup extends Widget\n{\n public layoutMgr: ILayoutManager;// lazily initialized (via useLayout(), useDefaultLayout())\n\n /**\n * Will set the given layout-manager to be used for positioning child widgets.\n *\n * @param {PUXI.ILayoutManager} layoutMgr\n */\n useLayout(layoutMgr: ILayoutManager): WidgetGroup\n {\n if (this.layoutMgr)\n {\n this.layoutMgr.onDetach();\n }\n\n this.layoutMgr = layoutMgr;\n\n if (layoutMgr)\n {\n this.layoutMgr.onAttach(this);\n }\n\n return this;\n }\n\n /**\n * Sets the widget-recommended layout manager. By default (if not overriden by widget\n * group class), this is a fast-layout.\n */\n useDefaultLayout(): void\n {\n this.useLayout(new FastLayout());\n }\n\n onMeasure(width: number, height: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n super.onMeasure(width, height, widthMode, heightMode);\n\n if (this.widgetChildren.length === 0)\n {\n return;\n }\n if (!this.layoutMgr)\n {\n this.useDefaultLayout();\n }\n\n this.layoutMgr.onMeasure(width - this.paddingHorizontal, height - this.paddingVertical, widthMode, heightMode);\n\n this._measuredWidth = Math.max(this.measuredWidth, this.layoutMgr.getMeasuredWidth());\n this._measuredHeight = Math.max(this.measuredHeight, this.layoutMgr.getMeasuredHeight());\n }\n\n onLayout(l: number, t: number, r: number, b: number, dirty = true): void\n {\n super.onLayout(l, t, r, b, dirty);\n\n if (this.widgetChildren.length === 0)\n {\n return;\n }\n if (!this.layoutMgr)\n {\n this.useDefaultLayout();\n }\n\n this.layoutMgr.onLayout();// layoutMgr is attached to this\n }\n}\n","import { WidgetGroup } from './WidgetGroup';\nimport * as PIXI from 'pixi.js';\n\n/**\n * An interactive container.\n *\n * @class\n * @extends PUXI.WidgetGroup\n * @memberof PUXI\n */\nexport class InteractiveGroup extends WidgetGroup\n{\n private hitArea: PIXI.Rectangle;\n\n constructor()\n {\n super();\n this.hitArea = new PIXI.Rectangle();\n this.insetContainer.hitArea = this.hitArea;\n }\n\n update(): void\n {\n super.update();\n }\n\n layout(l: number, t: number, r: number, b: number, dirty: boolean): void\n {\n super.layout(l, t, r, b, dirty);\n\n this.hitArea.width = this.width;\n this.hitArea.height = this.height;\n }\n}\n\n","import * as PIXI from 'pixi.js';\nimport { TabGroup, FocusController } from './ctl/FocusController';\nimport { InteractiveGroup } from './InteractiveGroup';\nimport { IFocusable } from './IFocusable';\n\n/**\n * @namespace PUXI\n * @interface\n * @property {PIXI.Container}[background]\n * @property {number}[tabIndex]\n * @property {PUXI.TabGroup}[tabGroup]\n */\nexport interface IFocusableOptions\n{\n background?: PIXI.Container;\n tabIndex?: number;\n tabGroup?: any;\n focusController?: FocusController;\n}\n\n/**\n * Represents a view that can gain or loose focus. It is primarily subclassed by\n * input/form widgets.\n *\n * Generally, it is a good idea not use layouts on these types of widgets.\n *\n * @class\n * @extends PUXI.Widget\n * @memberof PUXI\n */\nexport abstract class FocusableWidget extends InteractiveGroup implements IFocusable\n{\n _isFocused: boolean;\n _isMousePressed: boolean;\n _focusController: FocusController;\n\n tabIndex: number;\n tabGroup: TabGroup;\n\n\n /**\n * @param {PUXI.IInputBaseOptions} options\n * @param {PIXI.Container}[options.background]\n * @param {number}[options.tabIndex]\n * @param {any}[options.tabGroup]\n */\n constructor(options: IFocusableOptions = {})\n {\n super();\n\n if (options.background)\n {\n super.setBackground(options.background);\n }\n\n // for detached context (from stage)\n if (options.focusController)\n {\n this._focusController = options.focusController\n }\n\n // Prevents double focusing/blurring.\n this._isFocused = false;\n\n // Used to lose focus when mouse-down outside widget.\n this._isMousePressed = false;\n\n this.interactive = true;\n\n /**\n * @member {number}\n * @readonly\n */\n this.tabIndex = options.tabIndex;\n\n /**\n * The name of the tab group in which this widget's focus will move on\n * pressing tab.\n * @member {PUXI.TabGroup}\n * @readonly\n */\n this.tabGroup = options.tabGroup;\n\n this.insetContainer.on('pointerdown', (ev: PIXI.interaction.InteractionEvent) =>\n {\n this.focus(ev);\n this._isMousePressed = true;\n });\n\n this.insetContainer.on('pointerup', () => { this._isMousePressed = false; });\n this.insetContainer.on('pointerupoutside', () => { this._isMousePressed = false; });\n }\n\n /**\n * Brings this widget into focus.\n */\n focus(ev?: PIXI.interaction.InteractionEvent): void\n {\n if (this.isFocused)\n {\n return;\n }\n\n this.focusController.notifyFocus(this);\n\n this._isFocused = true;\n this.bindEvents();\n\n this.emit('focusChanged', true);\n this.emit('focus');\n }\n\n /**\n * Brings this widget out of focus.\n */\n blur(): void\n {\n if (!this._isFocused)\n {\n return;\n }\n\n this.focusController.notifyBlur();\n\n this._isFocused = false;\n this.clearEvents();\n\n this.emit('focusChanged', false);\n this.emit('blur');\n }\n\n /**\n * Whether this widget is in focus.\n * @member {boolean}\n * @readonly\n */\n get isFocused(): boolean\n {\n return this._isFocused;\n }\n\n private bindEvents = (): void =>\n {\n this.stage.on('pointerdown', this.onDocumentPointerDownImpl);\n document.addEventListener('keydown', this.onKeyDownImpl);\n };\n\n private clearEvents = (): void =>\n {\n this.stage.off('pointerdown', this.onDocumentPointerDownImpl);\n document.removeEventListener('keydown', this.onKeyDownImpl);\n };\n\n protected onKeyDownImpl = (e: any): void =>\n {\n const focusCtl = this.stage.focusController;\n\n if (e.which === 9 && focusCtl.useTab)\n {\n focusCtl.onTab();\n e.preventDefault();\n }\n else if (e.which === 38 && focusCtl.useBack)\n {\n focusCtl.onBack();\n e.preventDefault();\n }\n else if (e.which === 40 && focusCtl.useForward)\n {\n focusCtl.onForward();\n e.preventDefault();\n }\n\n this.emit('keydown');\n };\n\n private onDocumentPointerDownImpl = (): void =>\n {\n if (!this._isMousePressed)\n {\n this.blur();\n }\n };\n\n initialize(): void\n {\n super.initialize();\n this.focusController.in(this, this.tabIndex, this.tabGroup);\n }\n\n /**\n * Fired when the widget comes into focus.\n * @event focus\n */\n\n /**\n * Fired when the widget goes out of focus.\n * @event blur\n */\n\n /**\n * Fired when the widgets comes into or goes out of focus.\n * @event focusChanged\n * @param {boolean} isFocused - whether the widget is in focus.\n */\n\n protected get focusController() {\n return this._focusController || this.stage.focusController\n }\n}\n","import { Widget, TEXT_STYLE_PROPERTIES } from './Widget';\nimport * as PIXI from 'pixi.js';\nimport { Style } from './Style';\n\n/**\n * A static text widget. It cannot retain children.\n *\n * @memberof PUXI\n * @public\n */\nexport class TextWidget extends Widget\n{\n public textDisplay: PIXI.Text;\n\n /**\n * @param {string} text - text content\n * @param {PIXI.TextStyle} textStyle - styled used for text\n */\n constructor(text: string, textStyle?: PIXI.TextStyle)\n {\n super();\n\n this.textDisplay = new PIXI.Text(text, textStyle);\n this.contentContainer.addChild(this.textDisplay);\n }\n\n update(): void\n {\n super.update();\n\n const fill = this.textDisplay.style.fill\n if (!this.tint && typeof(fill) == \"string\" && fill.startsWith(\"#\")) {\n this.tint = parseInt(fill.slice(1), 16)\n }\n\n if (this.tint !== null)\n {\n this.textDisplay.tint = this.tint;\n this.textDisplay.style.fill = this.tint;\n }\n\n if (this.blendMode !== null)\n {\n this.textDisplay.blendMode = this.blendMode;\n }\n }\n\n /**\n * @deprecated\n */\n get value(): string\n {\n return this.textDisplay.text;\n }\n set value(val: string)\n {\n this.textDisplay.text = val;\n }\n\n get text(): string\n {\n return this.value;\n }\n set text(val: string)\n {\n this.value = val;\n }\n\n /**\n * Get the text style. You can set properties directly on the style.\n */\n getTextStyle(): PIXI.TextStyle\n {\n return this.textDisplay.style;\n }\n\n /**\n * Set the text style directly\n *\n * @param textStyle\n * @example\n * textWidget.setTextStyle({\n * fontFamily: 'Roboto',\n * fontSize: 14\n * })\n */\n setTextStyle(textStyle: PIXI.TextStyle): this\n {\n this.textDisplay.style = textStyle;\n\n return this;\n }\n\n protected onStyleChange(style: Style): void\n {\n super.onStyleChange(style);\n\n const styleData = style.getProperties(...TEXT_STYLE_PROPERTIES);\n const textStyle = this.textDisplay.style;\n\n TEXT_STYLE_PROPERTIES.forEach((propName: string) =>\n {\n if (styleData[propName] !== undefined)\n {\n textStyle[propName] = styleData[propName];\n }\n });\n }\n}\n","import { ClickManager } from './event/ClickManager';\nimport { FocusableWidget, IFocusableOptions } from './FocusableWidget';\nimport { TextWidget } from './TextWidget';\nimport * as PIXI from 'pixi.js';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { Style } from './Style';\n\n/**\n * @memberof PUXI\n * @interface\n * @extends PUXI.IFocusableOptions\n * @property {PUXI.TextWidget | string} text\n */\nexport interface IButtonOptions extends IFocusableOptions\n{\n background?: PIXI.Container;\n text?: TextWidget | string;\n tabIndex?: number;\n tabGroup?: any;\n}\n\n/**\n * Button that can be clicked.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.FocusableWidget\n */\nexport class Button extends FocusableWidget\n{\n isHover: boolean;\n\n protected textWidget: TextWidget;\n\n click: () => void;\n /**\n * @param [options.background}] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for Button\n * @param [options.text=null] {PIXI.UI.Text} optional text\n * @param [options.tabIndex=0] {Number} input tab index\n * @param [options.tabGroup=0] {Number|String} input tab group\n * @param [options.width=options.background.width] {Number|String} width\n * @param [options.height=options.background.height] {Number|String} height\n */\n constructor(options: IButtonOptions)\n {\n super(options);\n\n this.isHover = false;\n\n if (typeof options.text === 'string')\n {\n options.text = new TextWidget(options.text, new PIXI.TextStyle());\n }\n\n this.textWidget = options.text.setLayoutOptions(\n new FastLayoutOptions({\n width: LayoutOptions.WRAP_CONTENT,\n height: LayoutOptions.WRAP_CONTENT,\n x: 0.5,\n y: 0.5,\n anchor: FastLayoutOptions.CENTER_ANCHOR,\n }),\n ) as TextWidget;\n\n if (this.textWidget)\n {\n this.addChild(this.textWidget);\n }\n\n this.contentContainer.buttonMode = true;\n }\n\n onClick(e: PIXI.InteractionEvent): void\n {\n super.onClick(e);\n\n this.emit('click', e);\n }\n\n onDoubleClick(e: PIXI.InteractionEvent): void\n {\n super.onDoubleClick(e);\n\n this.emit('doubleclick', e);\n }\n\n update(): void\n {\n super.update();\n // No update needed\n }\n\n initialize(): void\n {\n super.initialize();\n\n this.insetContainer.interactiveChildren = false;\n // lazy to make sure all children is initialized (trying to get the bedst hitArea possible)\n }\n\n /**\n * Label for this button.\n * @member {string}\n */\n get value(): string\n {\n if (this.textWidget)\n {\n return this.textWidget.text;\n }\n\n return '';\n }\n set value(val: string)\n {\n if (this.textWidget)\n {\n this.textWidget.text = val;\n }\n }\n\n get text(): any\n {\n return this.textWidget;\n }\n set text(val: any)\n {\n this.value = val;\n }\n\n onStyleChange(style: Style): void\n {\n // eslint-disable-next-line\n // @ts-ignore\n this.textWidget.onStyleChange(style);\n }\n}\n\n/*\n * Features:\n * Button, radio button (checkgroups)\n *\n * Methods:\n * blur()\n * focus()\n *\n * Properties:\n * checked: get/set Button checked\n * value: get/set Button value\n *\n * Events:\n * \"hover\" param: [bool]isHover (hover/leave)\n * \"press\" param: [bool]isPressed (pointerdown/pointerup)\n * \"click\"\n * \"blur\"\n * \"focus\"\n * \"focusChanged\" param: [bool]isFocussed\n *\n */\n","import { FocusableWidget, IFocusableOptions } from './FocusableWidget';\nimport { ClickManager } from './event/ClickManager';\nimport { InteractiveGroup } from './InteractiveGroup';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { CheckGroup } from './ctl';\nimport { TextWidget } from './TextWidget';\n\ninterface ICheckBoxOptions extends IFocusableOptions\n{\n checked?: boolean;\n background: PIXI.Container;\n checkmark?: PIXI.Container;\n checkGroup?: CheckGroup;\n value?: string;\n tabIndex?: number;\n tabGroup?: number;\n}\n\n/**\n * @memberof PUXI\n * @extends PUXI.IFocusableOptions\n * @member {boolean} checked\n * @member {PIXI.Container}[checkmark]\n * @member {PUXI.CheckGroup}[checkGroup]\n * @member {string}[value]\n */\n\n/**\n * A checkbox is a button can be selected (checked). It has a on/off state that\n * can be controlled by the user.\n *\n * When used in a checkbox group, the group will control whether the checkbox can\n * be selected or not.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.FocusableWidget\n */\nexport class CheckBox extends FocusableWidget\n{\n private _checked: boolean;\n private _value: string;\n\n private label: TextWidget;\n private checkmark: InteractiveGroup;\n\n checkGroup: CheckGroup;\n\n /**\n * @param {PUXI.ICheckBoxOptions} options\n * @param [options.checked=false] {bool} is checked\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for CheckBox\n * @param options.checkmark {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as checkmark for CheckBox\n * @param {PUXI.CheckGroup}[options.checkGroup=null] CheckGroup name\n * @param options.value {String} mostly used along with checkgroup\n * @param [options.tabIndex=0] {Number} input tab index\n * @param [options.tabGroup=0] {Number|String} input tab group\n */\n constructor(options: ICheckBoxOptions)\n {\n super(options);\n this._checked = options.checked !== undefined ? options.checked : false;\n this._value = options.value || '';\n this.checkGroup = options.checkGroup || null;\n\n this.checkmark = new InteractiveGroup();\n this.checkmark.contentContainer.addChild(options.checkmark);\n this.checkmark.setLayoutOptions(\n new FastLayoutOptions({\n width: LayoutOptions.WRAP_CONTENT,\n height: LayoutOptions.WRAP_CONTENT,\n x: 0.5,\n y: 0.5,\n anchor: FastLayoutOptions.CENTER_ANCHOR,\n }),\n );\n this.checkmark.alpha = this._checked ? 1 : 0;\n this.addChild(this.checkmark);\n\n this.contentContainer.buttonMode = true;\n }\n\n update(): void\n {\n // No need for updating\n }\n\n get checked(): boolean\n {\n return this._checked;\n }\n set checked(val: boolean)\n {\n if (val !== this._checked)\n {\n if (this.checkGroup !== null && val)\n {\n this.stage.checkBoxGroupController.notifyCheck(this);\n }\n\n this._checked = val;\n this.change(val);\n }\n }\n\n get value(): string\n {\n return this._value;\n }\n set value(val: string)\n {\n this._value = val;\n\n if (this.checked)\n {\n this.stage.checkBoxGroupController.notifyCheck(this);\n }\n }\n\n get selectedValue(): string\n {\n return this.stage\n ?.checkBoxGroupController\n .getSelected(this.checkGroup)\n .value;\n }\n\n initialize(): void\n {\n super.initialize();\n\n const clickMgr = (this.eventBroker.click as ClickManager);\n\n clickMgr.onHover = (_, over): void =>\n {\n this.emit('hover', over);\n };\n\n clickMgr.onPress = (e, isPressed): void =>\n {\n if (isPressed)\n {\n this.focus();\n e.data.originalEvent.preventDefault();\n }\n\n this.emit('press', isPressed);\n };\n\n clickMgr.onClick = (): void =>\n {\n this.click();\n };\n\n if (this.checkGroup !== null)\n {\n this.stage.checkBoxGroupController.in(this, this.checkGroup);\n }\n }\n\n protected change = (val: boolean): void =>\n {\n if (this.checkmark)\n {\n this.checkmark.alpha = val ? 1 : 0;\n }\n };\n\n protected click = (): void =>\n {\n this.emit('click');\n\n if (this.checkGroup !== null && this.checked)\n {\n return;\n }\n\n this.checked = !this.checked;\n this.emit('changed', this.checked);\n };\n\n /**\n * This event is fired when the user's cursor hovers over this checkbox.\n * @event hover\n */\n\n /**\n * This event is fired when the user clicks on the checkbox, regardless of whether\n * the checkbox was selected or deselected.\n * @event click\n */\n\n /**\n * This event is fired when the user selects/deselects the checkbox, i.e. the \"value\"\n * of the checkbox changes. This is also fired when setting the `checked` property\n * directly.\n * @event changed\n * @param {boolean} checked - whether the checkbox is checked\n */\n}\n\n/*\n * Features:\n * checkbox, radio button (checkgroups)\n *\n * Methods:\n * blur()\n * focus()\n * change(checked) //only exposed to overwrite (if you dont want to hard toggle alpha of checkmark)\n *\n * Properties:\n * checked: get/set checkbox checked\n * value: get/set checkbox value\n * selectedValue: get/set selected value for checkgroup\n *\n * Events:\n * \"hover\" param: [bool]isHover (hover/leave)\n * \"press\" param: [bool]isPressed (pointerdown/pointerup)\n * \"click\"\n * \"blur\"\n * \"focus\"\n * \"focusChanged\" param: [bool]isFocussed\n * \"change\" param: [bool]isChecked\n *\n */\n","class EaseBase\n{\n getPosition(p)\n {\n return p;\n }\n}\n\nexport { EaseBase };\n","import { EaseBase } from './EaseBase';\n\nfunction ExponentialEase(power, easeIn, easeOut)\n{\n const pow = power;\n const t = easeIn && easeOut ? 3 : easeOut ? 1 : 2;\n\n this.getPosition = function (p)\n {\n let r = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n\n if (pow === 1)\n {\n r *= r;\n }\n else if (pow === 2)\n {\n r *= r * r;\n }\n else if (pow === 3)\n {\n r *= r * r * r;\n }\n else if (pow === 4)\n {\n r *= r * r * r * r;\n }\n\n return (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\n };\n}\n\nExponentialEase.prototype = Object.create(EaseBase.prototype);\nExponentialEase.prototype.constructor = ExponentialEase;\n\nexport { ExponentialEase };\n\n","import { EaseBase } from './EaseBase';\nimport { ExponentialEase } from './ExponentialEase';\n\nconst Ease = {};\n\nconst HALF_PI = Math.PI * 0.5;\n\nexport function create(fn)\n{\n const e = Object.create(EaseBase.prototype);\n\n e.getPosition = fn;\n\n return e;\n}\n\nconst Linear = new EaseBase();\n\n// Liear\nEase.Linear = Linear;\n\n// Exponetial Eases\nexport function wrapEase(easeInFunction, easeOutFunction, easeInOutFunction)\n{\n return {\n easeIn: easeInFunction,\n easeOut: easeOutFunction,\n easeInOut: easeInOutFunction,\n };\n}\n\nEase.Power0 = {\n easeNone: Linear,\n};\n\nEase.Power1 = Ease.Quad = wrapEase(\n new ExponentialEase(1, 1, 0),\n new ExponentialEase(1, 0, 1),\n new ExponentialEase(1, 1, 1));\n\nEase.Power2 = Ease.Cubic = wrapEase(\n new ExponentialEase(2, 1, 0),\n new ExponentialEase(2, 0, 1),\n new ExponentialEase(2, 1, 1));\n\nEase.Power3 = Ease.Quart = wrapEase(\n new ExponentialEase(3, 1, 0),\n new ExponentialEase(3, 0, 1),\n new ExponentialEase(3, 1, 1));\n\nEase.Power4 = Ease.Quint = wrapEase(\n new ExponentialEase(4, 1, 0),\n new ExponentialEase(4, 0, 1),\n new ExponentialEase(4, 1, 1));\n\n// Bounce\nEase.Bounce = {\n BounceIn: create(function (p)\n {\n if ((p = 1 - p) < 1 / 2.75)\n {\n return 1 - (7.5625 * p * p);\n }\n else if (p < 2 / 2.75)\n {\n return 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\n }\n else if (p < 2.5 / 2.75)\n {\n return 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\n }\n\n return 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\n }),\n BounceOut: create(function (p)\n {\n if (p < 1 / 2.75)\n {\n return 7.5625 * p * p;\n }\n else if (p < 2 / 2.75)\n {\n return 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n }\n else if (p < 2.5 / 2.75)\n {\n return 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n }\n\n return 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n }),\n BounceInOut: create(function (p)\n {\n const invert = (p < 0.5);\n\n if (invert)\n {\n p = 1 - (p * 2);\n }\n else\n {\n p = (p * 2) - 1;\n }\n if (p < 1 / 2.75)\n {\n p = 7.5625 * p * p;\n }\n else if (p < 2 / 2.75)\n {\n p = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\n }\n else if (p < 2.5 / 2.75)\n {\n p = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\n }\n else\n {\n p = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\n }\n\n return invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\n }),\n};\n\n// Circ\nEase.Circ = {\n CircIn: create(function (p)\n {\n return -(Math.sqrt(1 - (p * p)) - 1);\n }),\n CircOut: create(function (p)\n {\n return Math.sqrt(1 - (p = p - 1) * p);\n }),\n CircInOut: create(function (p)\n {\n return ((p *= 2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\n }),\n};\n\n// Expo\nEase.Expo = {\n ExpoIn: create(function (p)\n {\n return Math.pow(2, 10 * (p - 1)) - 0.001;\n }),\n ExpoOut: create(function (p)\n {\n return 1 - Math.pow(2, -10 * p);\n }),\n ExpoInOut: create(function (p)\n {\n return ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n }),\n};\n\n// Sine\nEase.Sine = {\n SineIn: create(function (p)\n {\n return -Math.cos(p * HALF_PI) + 1;\n }),\n SineOut: create(function (p)\n {\n return Math.sin(p * HALF_PI);\n }),\n SineInOut: create(function (p)\n {\n return -0.5 * (Math.cos(Math.PI * p) - 1);\n }),\n};\n\nexport { Ease };\n","export const Helpers = {\n Lerp(start: number, stop: number, amt: number): number\n {\n if (amt > 1) amt = 1;\n else if (amt < 0) amt = 0;\n\n return start + (stop - start) * amt;\n },\n Round(number: number, decimals: number): number\n {\n const pow = Math.pow(10, decimals);\n\n return Math.round(number * pow) / pow;\n },\n componentToHex(c: any): string\n {\n const hex = c.toString(16);\n\n return hex.length == 1 ? `0${hex}` : hex;\n },\n rgbToHex(r: number, g: number, b: number): string\n {\n return `#${this.componentToHex(r)}${this.componentToHex(g)}${this.componentToHex(b)}`;\n },\n rgbToNumber(r: number, g: number, b: number): number\n {\n return r * 65536 + g * 256 + b;\n },\n numberToRgb(c: number): any\n {\n return {\n r: Math.floor(c / (256 * 256)),\n g: Math.floor(c / 256) % 256,\n b: c % 256,\n };\n },\n hexToRgb(hex: any): any\n {\n if (hex === null)\n {\n hex = 0xffffff;\n }\n if (!isNaN(hex))\n {\n return this.numberToRgb(hex);\n }\n\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n\n hex = hex.replace(shorthandRegex, function (m, r, g, b)\n {\n return r + r + g + g + b + b;\n });\n\n const result = (/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i).exec(hex);\n\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n } : null;\n },\n};\n","import { Widget } from './Widget';\nimport * as PIXI from 'pixi.js';\n\n/**\n * An UI sprite object\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n */\nexport class Sprite extends Widget\n{\n private spriteDisplay: PIXI.Sprite;\n\n constructor(texture: PIXI.Texture)\n {\n super();\n\n this.spriteDisplay = new PIXI.Sprite(texture);\n this.contentContainer.addChild(this.spriteDisplay);\n }\n\n update(): void\n {\n if (this.tint !== null)\n {\n this.spriteDisplay.tint = this.tint;\n }\n\n if (this.blendMode !== null)\n {\n this.spriteDisplay.blendMode = this.blendMode;\n }\n }\n\n static fromImage(imageUrl): Sprite\n {\n return new Sprite(new PIXI.Texture(new PIXI.BaseTexture(imageUrl)));\n }\n}\n\nexport type ImageWidget = Sprite;\nexport const ImageWidget = Sprite;\n","import { ILayoutManager } from './ILayoutManager';\nimport { Widget } from '../Widget';\nimport { AnchorLayoutOptions, ALIGN, LayoutOptions } from '../layout-options';\nimport { MeasureMode } from '../IMeasurable';\nimport { WidgetGroup } from '../WidgetGroup';\n\ninterface IAnchorCache {\n remeasure: boolean;\n}\n\n/**\n * `AnchorLayout` is used in conjunction with `AnchorLayoutOptions`.\n *\n * @memberof PUXI\n * @class\n * @example\n * ```\n * parent.useLayout(new PUXI.AnchorLayout());\n * ```\n */\nexport class AnchorLayout implements ILayoutManager\n{\n private measuredWidth: number;\n private measuredHeight: number;\n\n private host: WidgetGroup;\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n }\n\n onLayout(): void\n {\n const parent = this.host;\n const { widgetChildren } = parent;\n\n const parentWidth = parent.contentWidth;\n const parentHeight = parent.contentHeight;\n\n for (let i = 0; i < widgetChildren.length; i++)\n {\n const child = widgetChildren[i];\n const layoutOptions = (child.layoutOptions || {}) as AnchorLayoutOptions;\n\n const childWidth = child.getMeasuredWidth();\n const childHeight = child.getMeasuredHeight();\n const anchorLeft = this.calculateAnchor(layoutOptions.anchorLeft || 0, parentWidth, false);\n const anchorTop = this.calculateAnchor(layoutOptions.anchorTop || 0, parentHeight, false);\n const anchorRight = this.calculateAnchor(layoutOptions.anchorRight || 0, parentWidth, true);\n const anchorBottom = this.calculateAnchor(layoutOptions.anchorBottom || 0, parentHeight, true);\n\n let x = anchorLeft;\n let y = anchorTop;\n\n switch (layoutOptions.horizontalAlign)\n {\n case ALIGN.MIDDLE:\n x = (anchorRight + anchorLeft - childWidth) / 2;\n break;\n case ALIGN.RIGHT:\n x = anchorRight - childWidth;\n break;\n }\n\n switch (layoutOptions.verticalAlign)\n {\n case ALIGN.MIDDLE:\n y = (anchorBottom + anchorTop - childHeight) / 2;\n break;\n case ALIGN.BOTTOM:\n y = anchorBottom - childHeight;\n break;\n }\n\n child.layout(x, y, x + childWidth, y + childHeight);\n }\n }\n\n onMeasure(widthLimit: number, heightLimit: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n const children = this.host.widgetChildren;\n\n let naturalWidth = 0;\n let naturalHeight = 0;\n\n const baseWidthMode = widthMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n const baseHeightMode = heightMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : heightMode;\n\n let hasFillers = false;\n\n // First pass: measure children and find our natural width/height. If we have a upper\n // limit, then pass that on.\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as AnchorLayoutOptions;\n\n if (lopt.width === LayoutOptions.FILL_PARENT)\n {\n throw new Error('AnchorLayout does not support width = FILL_PARENT. Use anchorLeft = 0 & anchorRight = 0');\n }\n if (lopt.height === LayoutOptions.FILL_PARENT)\n {\n throw new Error('AnchorLayout does not support height = FILL_PARENT. Use anchorTop = 0 & anchorBottom = 0');\n }\n\n const anchorLeft = this.calculateAnchor(lopt.anchorLeft || 0, widthLimit, false);\n const anchorTop = this.calculateAnchor(lopt.anchorTop || 0, heightLimit, false);\n const anchorRight = this.calculateAnchor(lopt.anchorRight || 0, widthLimit, true);\n const anchorBottom = this.calculateAnchor(lopt.anchorBottom || 0, heightLimit, true);\n\n // Does child have a pre-determined width or height?\n const widthConst = lopt.isWidthPredefined;\n const heightConst = lopt.isHeightPredefined;\n const widgetWidthLimit = widthConst ? lopt.width : anchorRight - anchorLeft;\n const widgetHeightLimit = heightConst ? lopt.height : anchorBottom - anchorTop;\n\n const widgetWidthMode = widthConst ? MeasureMode.EXACTLY : baseWidthMode;\n const widgetHeightMode = heightConst ? MeasureMode.EXACTLY : baseHeightMode;\n\n // Fillers need to be remeasured using EXACTLY.\n hasFillers = hasFillers || lopt.width === 0 || lopt.height === 0;\n\n widget.measure(widgetWidthLimit, widgetHeightLimit, widgetWidthMode, widgetHeightMode);\n\n const horizontalReach = this.calculateReach(\n lopt.anchorLeft || 0, lopt.anchorRight || 0, widget.getMeasuredWidth());\n const verticalReach = this.calculateReach(\n lopt.anchorTop || 0, lopt.anchorBottom || 0, widget.getMeasuredHeight());\n\n naturalWidth = Math.max(naturalWidth, horizontalReach);\n naturalHeight = Math.max(naturalHeight, verticalReach);\n }\n\n this.measuredWidth = Widget.resolveMeasuredDimen(naturalWidth, widthLimit, widthMode);\n this.measuredHeight = Widget.resolveMeasuredDimen(naturalHeight, heightLimit, heightMode);\n\n if (!hasFillers)\n {\n return;\n }\n\n // Handle fillers.\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as AnchorLayoutOptions;\n\n if (lopt.width === 0 || lopt.height === 0)\n {\n const anchorLeft = this.calculateAnchor(lopt.anchorLeft || 0, this.measuredWidth, false);\n const anchorTop = this.calculateAnchor(lopt.anchorTop || 0, this.measuredHeight, false);\n const anchorRight = this.calculateAnchor(lopt.anchorRight || 0, this.measuredWidth, true);\n const anchorBottom = this.calculateAnchor(lopt.anchorBottom || 0, this.measuredHeight, true);\n\n widget.measure(\n lopt.isWidthPredefined ? lopt.width : anchorRight - anchorLeft,\n lopt.isHeightPredefined ? lopt.height : anchorBottom - anchorTop,\n lopt.width === 0 || lopt.isWidthPredefined ? MeasureMode.EXACTLY : MeasureMode.AT_MOST,\n lopt.height === 0 || lopt.isHeightPredefined ? MeasureMode.EXACTLY : MeasureMode.AT_MOST,\n );\n }\n }\n }\n\n getMeasuredWidth(): number\n {\n return this.measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this.measuredHeight;\n }\n\n /**\n * Calculates the actual value of the anchor, given the parent's dimension.\n *\n * @param {number} anchor - anchor as given in layout options\n * @param {number} limit - parent's dimension\n * @param {boolean} limitSubtract - true for right/bottom anchors, false for left/top\n */\n protected calculateAnchor(anchor: number, limit: number, limitSubtract: boolean): number\n {\n const offset = Math.abs(anchor) < 1 ? anchor * limit : anchor;\n\n return limitSubtract ? limit - offset : offset;\n }\n\n /**\n * Calculates the \"reach\" of a child widget, which is the minimum dimension of\n * the parent required to fully fit the child.\n *\n * @param {number} startAnchor - left or top anchor as given in layout options\n * @param {number} endAnchor - right or bottom anchor as given in layout options\n * @param {number} dimen - measured dimension of the widget (width or height)\n */\n protected calculateReach(startAnchor: number, endAnchor: number, dimen: number): number\n {\n if (Math.abs(startAnchor) < 1 && Math.abs(endAnchor) < 1)\n {\n return dimen / (1 - endAnchor - startAnchor);\n }\n else if (Math.abs(startAnchor) < 1)\n {\n return (endAnchor + dimen) / (1 - startAnchor);\n }\n else if (Math.abs(endAnchor) < 1)\n {\n return (startAnchor + dimen) / (1 - endAnchor);\n }\n\n return startAnchor + dimen + endAnchor;\n }\n}\n","import { ILayoutManager } from './ILayoutManager';\nimport { WidgetGroup } from '../WidgetGroup';\nimport { Widget } from '../Widget';\nimport { LayoutOptions, ALIGN } from '../layout-options';\nimport { BorderLayoutOptions } from '../layout-options/BorderLayoutOptions';\nimport { MeasureMode } from '../IMeasurable';\n\nconst {\n REGION_LEFT,\n REGION_TOP,\n REGION_RIGHT,\n REGION_BOTTOM,\n REGION_CENTER,\n} = BorderLayoutOptions;\n\nconst {\n FILL_PARENT,\n} = LayoutOptions;\n\nconst {\n EXACTLY,\n AT_MOST,\n} = MeasureMode;\n\n/**\n * `PUXI.BorderLayout` is used in conjunction with `PUXI.BorderLayoutOptions`.\n *\n * This layout guarantees that the \"center\" region will always be in the center of\n * the widget-group.\n *\n * WARNING: This layout may have some bugs in edge cases that haven't been reported.\n *\n * @memberof PUXI\n * @class\n * @implements PUXI.ILayoutManager\n */\nexport class BorderLayout implements ILayoutManager\n{\n protected host: WidgetGroup;\n\n protected leftWidgets: Widget[];\n protected topWidgets: Widget[];\n protected rightWidgets: Widget[];\n protected bottomWidgets: Widget[];\n protected centerWidgets: Widget[];\n\n protected measuredLeftWidth: number;\n protected measuredRightWidth: number;\n protected measuredCenterWidth: number;\n protected measuredWidth: number;\n\n protected measuredTopHeight: number;\n protected measuredBottomHeight: number;\n protected measuredCenterHeight: number;\n protected measuredHeight: number;\n\n constructor()\n {\n this.leftWidgets = [];\n this.topWidgets = [];\n this.rightWidgets = [];\n this.bottomWidgets = [];\n this.centerWidgets = [];\n }\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n this.clearMeasureCache();\n this.clearRegions();\n }\n\n onLayout(): void\n {\n this.layoutChildren(\n this.leftWidgets,\n 0,\n this.measuredTopHeight,\n this.measuredLeftWidth,\n this.measuredCenterHeight);\n this.layoutChildren(this.topWidgets, 0, 0, this.measuredWidth, this.measuredTopHeight);\n this.layoutChildren(\n this.rightWidgets,\n this.measuredWidth - this.measuredRightWidth,\n this.measuredTopHeight,\n this.measuredRightWidth,\n this.measuredCenterHeight,\n );\n this.layoutChildren(\n this.bottomWidgets,\n 0,\n this.measuredTopHeight + this.measuredCenterHeight,\n this.measuredWidth,\n this.measuredBottomHeight,\n );\n this.layoutChildren(\n this.centerWidgets,\n this.measuredLeftWidth,\n this.measuredTopHeight,\n this.measuredCenterWidth,\n this.measuredCenterHeight,\n );\n }\n\n layoutChildren(\n widgets: Widget[],\n regionX: number,\n regionY: number,\n regionWidth: number,\n regionHeight: number,\n ): void\n {\n for (let i = 0, j = widgets.length; i < j; i++)\n {\n const widget = widgets[i];\n\n let x = 0;\n let y = 0;\n\n switch ((widget.layoutOptions as BorderLayoutOptions)?.horizontalAlign)\n {\n case ALIGN.CENTER: x = (regionWidth - widget.getMeasuredWidth()) / 2; break;\n case ALIGN.RIGHT: x = regionWidth - widget.getMeasuredWidth(); break;\n default: x = 0; break;\n }\n\n switch ((widget.layoutOptions as BorderLayoutOptions)?.verticalAlign)\n {\n case ALIGN.CENTER: y = (regionHeight - widget.getMeasuredHeight()) / 2; break;\n case ALIGN.BOTTOM: y = regionHeight - widget.getMeasuredHeight(); break;\n default: y = 0; break;\n }\n\n x += regionX;\n y += regionY;\n\n widget.layout(x, y, x + widget.getMeasuredWidth(), y + widget.getMeasuredHeight(), true);\n }\n }\n\n /**\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n * @override\n */\n onMeasure(maxWidth: number, maxHeight: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n this.indexRegions();\n this.clearMeasureCache();\n\n // Children can be aligned inside region if smaller\n const childWidthMode = widthMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n const childHeightMode = heightMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n\n // Measure top, bottom, and center. The max. of each row's width will be our \"reference\".\n let [tw, th, , thmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.topWidgets,\n maxWidth,\n maxHeight,\n childWidthMode, childHeightMode,\n );\n let [bw, bh,, bhmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.bottomWidgets,\n maxWidth,\n maxHeight,\n childWidthMode, childHeightMode,\n );\n let [cw, ch, cwmin, chmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.centerWidgets,\n maxWidth,\n maxHeight,\n childWidthMode,\n heightMode);\n\n // Measure left & right regions. Their heights will equal center's height.\n let [lw, , lwmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.leftWidgets,\n maxWidth,\n ch,\n childWidthMode, MeasureMode.AT_MOST);\n let [rw, , rwmin] = this.measureChildren(// eslint-disable-line prefer-const\n this.rightWidgets,\n maxWidth,\n ch,\n childWidthMode, MeasureMode.AT_MOST);\n\n // Check if total width/height is greater than our limit. If so, then downscale\n // each row's height or each column's (in middle row) width.\n\n const middleRowWidth = lw + rw + cw;\n const netWidth = Math.max(tw, bw, middleRowWidth);\n const netHeight = th + bh + ch;\n\n // Resolve our limits.\n if (widthMode === MeasureMode.EXACTLY)\n {\n this.measuredWidth = maxWidth;\n }\n else if (widthMode === MeasureMode.AT_MOST)\n {\n this.measuredWidth = Math.min(netWidth, maxWidth);\n }\n else\n {\n this.measuredWidth = netWidth;\n }\n\n if (heightMode === MeasureMode.EXACTLY)\n {\n this.measuredHeight = maxHeight;\n }\n else if (heightMode === MeasureMode.AT_MOST)\n {\n this.measuredHeight = Math.min(netHeight, maxHeight);\n }\n else\n {\n this.measuredHeight = netHeight;\n }\n\n tw = this.measuredWidth;\n bw = this.measuredWidth;\n\n if (netHeight > this.measuredHeight)\n {\n const hmin = (thmin + chmin + bhmin);\n\n // Redistribute heights minus min-heights.\n if (hmin < this.measuredHeight)\n {\n const downscale = (this.measuredHeight - hmin) / (netHeight - hmin);\n\n th = thmin + ((th - thmin) * downscale);\n bh = bhmin + ((bh - bhmin) * downscale);\n ch = chmin + ((ch - chmin) * downscale);\n }\n // Redistribute full heights.\n else\n {\n const downscale = this.measuredHeight / netHeight;\n\n th *= downscale;\n bh *= downscale;\n ch *= downscale;\n }\n }\n\n if (netWidth > this.measuredWidth)\n {\n const wmin = lwmin + cwmin + rwmin;\n\n // Redistribute widths minus min. widths\n if (wmin < this.measuredWidth)\n {\n const downscale = (this.measuredWidth - wmin) / (netWidth - wmin);\n\n lw = lwmin + ((lw - lwmin) * downscale);\n cw = cwmin + ((cw - cwmin) * downscale);\n rw = rwmin + ((rw - rwmin) * downscale);\n }\n // Redistribute full widths\n else\n {\n const downscale = this.measuredWidth / netWidth;\n\n lw *= downscale;\n cw *= downscale;\n rw *= downscale;\n }\n }\n\n // Useful to know!\n this.measuredLeftWidth = lw;\n this.measuredRightWidth = rw;\n this.measuredCenterWidth = cw;\n this.measuredTopHeight = th;\n this.measuredBottomHeight = bh;\n this.measuredCenterHeight = ch;\n\n this.fitChildren(this.leftWidgets, this.measuredLeftWidth, this.measuredCenterHeight);\n this.fitChildren(this.topWidgets, this.measuredWidth, this.measuredTopHeight);\n this.fitChildren(this.rightWidgets, this.measuredRightWidth, this.measuredCenterHeight);\n this.fitChildren(this.bottomWidgets, this.measuredWidth, this.measuredBottomHeight);\n this.fitChildren(this.centerWidgets, this.measuredCenterWidth, this.measuredCenterHeight);\n }\n\n /**\n * This measures the list of widgets given the constraints. The max width and\n * height amongst the children is returned.\n *\n * @param {PUXI.Widget[]} list\n * @param {number} maxWidth\n * @param {number} maxHeight\n * @param {PUXI.MeasureMode} widthMode\n * @param {PUXI.MeasureMode} heightMode\n * @returns {number[]} - [width, height, widthFixedLowerBound, heightFixedLowerBound] -\n * the max. width and height amongst children. Also, the minimum required width/height\n * for the region (as defined in layout-options).\n */\n protected measureChildren(\n list: Widget[],\n maxWidth: number,\n maxHeight: number,\n widthMode: MeasureMode,\n heightMode: MeasureMode,\n ): number[]\n {\n let width = 0;\n let height = 0;\n let widthFixedLowerBound = 0;\n let heightFixedLowerBound = 0;\n\n for (let i = 0, j = list.length; i < j; i++)\n {\n const widget = list[i];\n const lopt = widget.layoutOptions || LayoutOptions.DEFAULT;\n\n let w = maxWidth;\n let h = maxHeight;\n let wmd = widthMode;\n let hmd = heightMode;\n\n if (lopt.width <= LayoutOptions.MAX_DIMEN)\n {\n w = lopt.width;\n wmd = EXACTLY;\n\n widthFixedLowerBound = Math.max(widthFixedLowerBound, w);\n }\n if (lopt.height <= LayoutOptions.MAX_DIMEN)\n {\n h = lopt.height;\n hmd = EXACTLY;\n\n heightFixedLowerBound = Math.max(heightFixedLowerBound, h);\n }\n\n widget.measure(w, h, wmd, hmd);\n\n width = Math.max(width, widget.getMeasuredWidth());\n height = Math.max(height, widget.getMeasuredHeight());\n }\n\n return [width, height, widthFixedLowerBound, heightFixedLowerBound];\n }\n\n /**\n * Ensures all widgets in the list measured their dimensions below the region\n * width & height. Widgets that are too large are remeasured in the those\n * limits (using `MeasureMode.AT_MOST`).\n *\n * This will handle widgets that have \"FILL_PARENT\" width or height.\n *\n * @param {PUXI.Widget[]} list\n * @param {number} measuredRegionWidth\n * @param {number} measuredRegionHeight\n */\n protected fitChildren(\n list: Widget[],\n measuredRegionWidth: number,\n measuredRegionHeight: number,\n ): void\n {\n for (let i = 0, j = list.length; i < j; i++)\n {\n const widget = list[i];\n\n if (widget.getMeasuredWidth() <= measuredRegionWidth\n && widget.getMeasuredHeight() <= measuredRegionHeight\n && widget.getMeasuredWidth() > 0\n && widget.getMeasuredHeight() > 0\n && widget.layoutOptions?.width !== FILL_PARENT\n && widget.layoutOptions?.height !== FILL_PARENT)\n {\n continue;\n }\n\n if (measuredRegionWidth > 0 && measuredRegionHeight > 0)\n {\n const wm = widget.layoutOptions?.width === FILL_PARENT ? EXACTLY : AT_MOST;\n const hm = widget.layoutOptions?.height === FILL_PARENT ? EXACTLY : AT_MOST;\n\n widget.measure(measuredRegionWidth, measuredRegionHeight, wm, hm);\n }\n }\n }\n\n /**\n * Indexes the list of left, top, right, bottom, and center widget lists.\n */\n protected indexRegions(): void\n {\n this.clearRegions();\n const { widgetChildren: children } = this.host;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as BorderLayoutOptions;\n\n const region = lopt.region || REGION_CENTER;\n\n switch (region)\n {\n case REGION_LEFT: this.leftWidgets.push(widget); break;\n case REGION_TOP: this.topWidgets.push(widget); break;\n case REGION_RIGHT: this.rightWidgets.push(widget); break;\n case REGION_BOTTOM: this.bottomWidgets.push(widget); break;\n default: this.centerWidgets.push(widget);\n }\n }\n }\n\n /**\n * Clears the left, top, right, bottom, and center widget lists.\n */\n protected clearRegions(): void\n {\n this.leftWidgets.length = 0;\n this.topWidgets.length = 0;\n this.rightWidgets.length = 0;\n this.bottomWidgets.length = 0;\n }\n\n /**\n * Zeros the measured dimensions.\n */\n protected clearMeasureCache(): void\n {\n this.measuredLeftWidth = 0;\n this.measuredRightWidth = 0;\n this.measuredCenterWidth = 0;\n this.measuredTopHeight = 0;\n this.measuredBottomHeight = 0;\n this.measuredCenterHeight = 0;\n }\n\n getMeasuredWidth(): number\n {\n return this.measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this.measuredHeight;\n }\n}\n","import { ILayoutManager } from './ILayoutManager';\nimport { WidgetGroup } from '../WidgetGroup';\nimport { MeasureMode } from '../IMeasurable';\nimport { LayoutOptions } from '../layout-options';\n\ntype Gravity = 'left' | 'center' | 'right' | 'top' | 'middle' | 'bottom';\n\nexport class LinearLayout implements ILayoutManager\n{\n private host: WidgetGroup;\n private orientation: 'vertical' | 'horizontal';\n private gravity: Gravity;\n private measuredWidth: number;\n private measuredHeight: number;\n\n constructor(orientation: 'vertical' | 'horizontal' = 'vertical', gravity: Gravity = 'center')\n {\n this.orientation = orientation;\n this.gravity = gravity;\n }\n\n onAttach(host: WidgetGroup): void\n {\n this.host = host;\n }\n\n onDetach(): void\n {\n this.host = null;\n }\n\n onLayout(): void\n {\n let position = 0;\n const children = this.host.widgetChildren;\n const breadth = this.orientation === 'vertical'\n ? this.measuredWidth\n : this.measuredHeight;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n\n // along axis\n const u = this.orientation === 'vertical'\n ? widget.getMeasuredWidth()\n : widget.getMeasuredHeight();\n const v = this.orientation === 'vertical'\n ? widget.getMeasuredHeight()\n : widget.getMeasuredWidth();\n\n let p = 0;\n\n if (u < breadth)\n {\n switch (this.gravity)\n {\n case 'center':\n case 'middle':\n p = (breadth - u) / 2;\n break;\n case 'right':\n case 'bottom':\n p = breadth - u;\n break;\n }\n }\n\n if (this.orientation === 'vertical')\n {\n widget.layout(p, position, p + u, position + v);\n }\n else\n {\n widget.layout(position, p, position + v, p + u);\n }\n\n position += v;\n }\n }\n\n onMeasure(widthLimit: number, heightLimit: number, widthMode: MeasureMode, heightMode: MeasureMode): void\n {\n const children = this.host.widgetChildren;\n const baseWidthMode = widthMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : widthMode;\n const baseHeightMode = heightMode === MeasureMode.EXACTLY ? MeasureMode.AT_MOST : heightMode;\n\n let length = 0;\n let breadth = 0;\n\n for (let i = 0, j = children.length; i < j; i++)\n {\n const widget = children[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT);\n\n const widgetWidthLimit = lopt.isWidthPredefined ? lopt.width : widthLimit;\n const widgetHeightLimit = lopt.isHeightPredefined ? lopt.height : heightLimit;\n const widgetWidthMode = lopt.isWidthPredefined ? MeasureMode.EXACTLY : baseWidthMode;\n const widgetHeightMode = lopt.isHeightPredefined ? MeasureMode.EXACTLY : baseHeightMode;\n\n widget.measure(widgetWidthLimit, widgetHeightLimit, widgetWidthMode, widgetHeightMode);\n\n if (this.orientation === 'vertical')\n {\n breadth = Math.max(breadth, widget.getMeasuredWidth());\n length += widget.getMeasuredHeight();\n }\n else\n {\n breadth = Math.max(breadth, widget.getMeasuredHeight());\n length += widget.getMeasuredWidth();\n }\n }\n\n if (this.orientation === 'vertical')\n {\n this.measuredWidth = breadth;\n this.measuredHeight = length;\n }\n else\n {\n this.measuredWidth = length;\n this.measuredHeight = breadth;\n }\n }\n\n getMeasuredWidth(): number\n {\n return this.measuredWidth;\n }\n\n getMeasuredHeight(): number\n {\n return this.measuredHeight;\n }\n}\n","import { IButtonOptions, Button } from './Button';\nimport { ImageWidget } from './Sprite';\nimport { Texture } from 'pixi.js';\nimport { LinearLayout } from './layout-manager';\n\nexport interface IImageButtonOptions extends IButtonOptions\n{\n icon: string | Texture | ImageWidget;\n}\n\nexport class ImageButton extends Button\n{\n iconWidget: ImageWidget;\n\n constructor(options: IImageButtonOptions)\n {\n super(options);\n\n if (!(options.icon instanceof ImageWidget))\n {\n const texture = options.icon instanceof Texture ? options.icon\n : Texture.from(options.icon);\n\n options.icon = new ImageWidget(texture);\n }\n\n this.textWidget.setLayoutOptions(null);// a little redundant maybe?\n this.iconWidget = options.icon;\n\n this.removeChild(this.textWidget);\n this.addChild(this.iconWidget);\n this.addChild(this.textWidget);\n\n this.useLayout(new LinearLayout('vertical'));\n }\n}\n","import { Widget } from './Widget';\nimport { DragManager } from './event/DragManager';\nimport { Tween } from './Tween';\nimport { Ease } from './Ease/Ease';\nimport { Helpers } from './Helpers';\nimport { Sprite } from './Sprite';\nimport * as PIXI from 'pixi.js';\nimport { MeasureMode } from './IMeasurable';\n\nexport interface ISliderOptions\n{\n track?: PIXI.Container | Widget;\n handle?: PIXI.Container | Widget;\n fill?: Sprite;\n orientation?: number;\n value?: number;\n minValue?: number;\n maxValue?: number;\n decimals?: number;\n onValueChange?: () => void;\n onValueChanging?: () => void;\n}\n\n/**\n * @memberof PUXI\n * @interface ISliderOptions\n * @property {PIXI.Container}[track]\n * @property {PIXI.Container}[handle]\n */\n\n/**\n * These options are used to configure a `PUXI.Slider`.\n *\n * @memberof PUXI\n * @interface ISliderOptions\n * @property {PIXI.Container}[track]\n * @property {PIXI.Container}[fill]\n * @property {boolean}[vertical]\n * @property {number}[value]\n * @property {number}[minValue]\n * @property {number}[maxValue]\n * @property {number}[decimals]\n * @property {Function}[onValueChange]\n * @property {Function}[onValueChanging]\n */\n\n/**\n * A slider is a form of input to set a variable to a value in a continuous\n * range. It cannot have its own children.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n */\nexport class Slider extends Widget\n{\n protected _disabled: boolean;\n\n track: Widget;\n handle: Widget;\n fill: Sprite;\n\n public readonly orientation: number;\n\n protected percentValue: number;\n protected _minValue: number;\n protected _maxValue: number;\n\n private _localCursor: PIXI.Point;\n\n decimals: number;\n vertical: boolean;\n\n _lastChange: number;\n _lastChanging: number;\n\n onValueChange: (n: number) => void;\n onValueChanging: (n: number) => void;\n\n /**\n * @param options {Object} Slider settings\n * @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the slider track\n * @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as slider handle\n * @param [options.fill=null] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used for slider fill\n * @param [options.vertical=false] {boolean} Direction of the slider\n * @param [options.value=0] {number} value of the slider\n * @param [options.minValue=0] {number} minimum value\n * @param [options.maxValue=100] {number} max value\n * @param [options.decimals=0] {boolean} the decimal precision (use negative to round tens and hundreds)\n * @param [options.onValueChange=null] {callback} Callback when the value has changed\n * @param [options.onValueChanging=null] {callback} Callback while the value is changing\n */\n constructor(options: ISliderOptions)\n {\n super();\n\n /**\n * The value expressed as a percentage from min. to max. This will always\n * be between 0 and 1.\n *\n * The actual value is: `this.minValue + this.percentValue * (this.maxValue - this.minValue`).\n *\n * @member {number}\n */\n this.percentValue = 0;\n this._disabled = false;\n\n this.fill = options.fill || null;\n this.percentValue = this._minValue;\n this._minValue = options.minValue || 0;\n this._maxValue = options.maxValue || 100;\n this.decimals = options.decimals || 0;\n this.orientation = options.orientation || Slider.HORIZONTAL;\n this.onValueChange = options.onValueChange || null;\n this.onValueChanging = options.onValueChanging || null;\n this.value = options.value || 50;\n\n // set options\n this.track = Widget.fromContent(options.track\n || (this.orientation === Slider.HORIZONTAL\n ? Slider.DEFAULT_HORIZONTAL_TRACK.clone()\n : Slider.DEFAULT_VERTICAL_TRACK.clone()));\n this.handle = Widget.fromContent(options.handle || Slider.DEFAULT_HANDLE.clone());\n\n this.addChild(this.track, this.handle);// initialize(), update() usage\n\n this._localCursor = new PIXI.Point();\n this.handle.contentContainer.buttonMode = true;\n }\n\n initialize(): void\n {\n super.initialize();\n\n let startValue = 0;\n let trackSize;\n\n const triggerValueChange = (): void =>\n {\n this.emit('change', this.value);\n\n if (this._lastChange != this.value)\n {\n this._lastChange = this.value;\n\n if (typeof this.onValueChange === 'function')\n {\n this.onValueChange(this.value);\n }\n }\n };\n\n const triggerValueChanging = (): void =>\n {\n this.emit('changing', this.value);\n\n if (this._lastChanging != this.value)\n {\n this._lastChanging = this.value;\n\n if (typeof this.onValueChanging === 'function')\n {\n this.onValueChanging(this.value);\n }\n }\n };\n\n const updatePositionToMouse = (mousePosition, soft): void =>\n {\n this.percentValue = this.getValueAtPhysicalPosition(mousePosition);\n this.layoutHandle();\n triggerValueChanging();\n };\n\n // Handles dragging\n const handleDrag: DragManager = this.handle.eventBroker.dnd as DragManager;\n\n handleDrag.onPress = (event: PIXI.interaction.InteractionEvent): void =>\n {\n event.stopPropagation();\n };\n\n handleDrag.onDragStart = (): void =>\n {\n startValue = this.percentValue;\n trackSize = this.orientation === Slider.HORIZONTAL\n ? this.track.width\n : this.track.height;\n };\n\n handleDrag.onDragMove = (event, offset: PIXI.Point): void =>\n {\n this.percentValue = Math.max(0, Math.min(\n 1,\n startValue + ((this.orientation === Slider.HORIZONTAL ? offset.x : offset.y) / trackSize\n )));\n\n triggerValueChanging();\n this.layoutHandle();\n };\n\n handleDrag.onDragEnd = (): void =>\n {\n triggerValueChange();\n this.layoutHandle();\n };\n\n // Bar pressing/dragging\n const trackDrag: DragManager = this.track.eventBroker.dnd as DragManager;\n\n trackDrag.onPress = (event, isPressed): void =>\n {\n if (isPressed)\n {\n updatePositionToMouse(event.data.global, true);\n }\n\n event.stopPropagation();\n };\n\n trackDrag.onDragMove = (event: PIXI.interaction.InteractionEvent): void =>\n {\n updatePositionToMouse(event.data.global, false);\n };\n\n trackDrag.onDragEnd = (): void =>\n {\n triggerValueChange();\n };\n\n this.layoutHandle();\n }\n\n get value(): number\n {\n return Helpers.Round(Helpers.Lerp(this._minValue, this._maxValue, this.percentValue), this.decimals);\n }\n set value(val: number)\n {\n if (val === this.value)\n {\n return;\n }\n if (isNaN(val))\n {\n throw new Error('Cannot use NaN as a value');\n }\n\n this.percentValue = (Math.max(this._minValue, Math.min(this._maxValue, val)) - this._minValue) / (this._maxValue - this._minValue);\n\n if (typeof this.onValueChange === 'function')\n {\n this.onValueChange(this.value);\n }\n if (typeof this.onValueChanging === 'function')\n {\n this.onValueChanging(this.value);\n }\n\n if (this.handle && this.initialized)\n {\n this.layoutHandle();\n }\n }\n\n get minValue(): number\n {\n return this._minValue;\n }\n set minValue(val: number)\n {\n this._minValue = val;\n this.update();\n }\n\n get maxValue(): number\n {\n return this._maxValue;\n }\n set maxValue(val: number)\n {\n this._maxValue = val;\n this.update();\n }\n\n get disabled(): boolean\n {\n return this._disabled;\n }\n set disabled(val: boolean)\n {\n if (val !== this._disabled)\n {\n this._disabled = val;\n this.handle.contentContainer.buttonMode = !val;\n this.handle.contentContainer.interactive = !val;\n this.track.contentContainer.interactive = !val;\n }\n }\n\n /**\n * @protected\n * @returns the amount of the freedom that handle has in physical units, i.e. pixels. This\n * is the width of the track minus the handle's size.\n */\n protected getPhysicalRange(): number\n {\n return this.orientation === Slider.HORIZONTAL\n ? this.contentWidth - this.handle.getMeasuredWidth()\n : this.contentHeight - this.handle.getMeasuredHeight();\n }\n\n /**\n * @protected\n * @param {PIXI.Point} cursor\n * @returns the value of the slider if the handle's center were (globally)\n * positioned at the given point.\n */\n protected getValueAtPhysicalPosition(cursor: PIXI.Point): number\n {\n // Transform position\n const localCursor = this.contentContainer.toLocal(cursor, null, this._localCursor, true);\n\n let offset: number;\n let range: number;\n\n if (this.orientation === Slider.HORIZONTAL)\n {\n const handleWidth = this.handle.getMeasuredWidth();\n\n offset = localCursor.x - this.paddingLeft - (handleWidth / 4);\n range = this.contentWidth - handleWidth;\n }\n else\n {\n const handleHeight = this.handle.getMeasuredHeight();\n\n offset = localCursor.y - this.paddingTop - (handleHeight / 4);\n range = this.contentHeight - handleHeight;\n }\n\n return offset / range;\n }\n\n /**\n * Re-positions the handle. This should be called after `_value` has been changed.\n */\n protected layoutHandle(): void\n {\n const handle = this.handle;\n\n const handleWidth = handle.getMeasuredWidth();\n const handleHeight = handle.getMeasuredHeight();\n let width = this.width - this.paddingHorizontal;\n let height = this.height - this.paddingVertical;\n\n let handleX: number;\n let handleY: number;\n\n if (this.orientation === Slider.HORIZONTAL)\n {\n width -= handleWidth;\n\n handleY = (height - handleHeight) / 2;\n handleX = (width * this.percentValue);\n }\n else\n {\n height -= handleHeight;\n\n handleX = (width - handleWidth) / 2;\n handleY = (height * this.percentValue);\n }\n\n handle.layout(handleX, handleY, handleX + handleWidth, handleY + handleHeight);\n }\n\n /**\n * Slider measures itself using the track's natural dimensions in its non-oriented\n * direction. The oriented direction will be the equal the range's size times\n * the track's resolution.\n *\n * @param width\n * @param height\n * @param widthMode\n * @param heightMode\n */\n onMeasure(width: number, height: number, widthMode: number, heightMode: number): void\n {\n const naturalWidth = ((this.orientation === Slider.HORIZONTAL)\n ? this._maxValue - this._minValue\n : Math.max(this.handle.contentContainer.width, this.track.contentContainer.width))\n + this.paddingHorizontal;\n const naturalHeight = ((this.orientation === Slider.VERTICAL)\n ? this._maxValue - this._minValue\n : Math.max(this.handle.contentContainer.height, this.track.contentContainer.height))\n + this.paddingVertical;\n\n switch (widthMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredWidth = width;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredWidth = naturalWidth;\n break;\n case MeasureMode.AT_MOST:\n this._measuredWidth = Math.min(width, naturalWidth);\n break;\n }\n\n switch (heightMode)\n {\n case MeasureMode.EXACTLY:\n this._measuredHeight = height;\n break;\n case MeasureMode.UNBOUNDED:\n this._measuredHeight = naturalHeight;\n break;\n case MeasureMode.AT_MOST:\n this._measuredHeight = Math.min(height, naturalHeight);\n break;\n }\n }\n\n /**\n * `Slider` lays the track to fill all of its width and height. The handle is aligned\n * in the middle in the non-oriented direction.\n *\n * @param l\n * @param t\n * @param r\n * @param b\n * @param dirty\n * @override\n */\n onLayout(l: number, t: number, r: number, b: number, dirty: boolean): void\n {\n super.onLayout(l, t, r, b, dirty);\n const { handle, track } = this;\n\n track.layout(0, 0, this.width - this.paddingHorizontal, this.height - this.paddingVertical);\n\n // Layout doesn't scale the widget\n // TODO: Create a Track widget, this won't work for custom tracks that don't wanna\n // scale (and it looks ugly.)\n track.insetContainer.width = track.width;\n track.insetContainer.height = track.height;\n\n handle.measure(this.width, this.height, MeasureMode.AT_MOST, MeasureMode.AT_MOST);\n\n this.layoutHandle();\n }\n\n /**\n * The default track for horizontally oriented sliders.\n * @static\n */\n static DEFAULT_HORIZONTAL_TRACK: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0xffffff, 1)\n .drawRect(0, 0, 16, 16) // natural width & height = 16\n .endFill()\n .lineStyle(1, 0x000000, 0.7, 1, true) // draw line in middle\n .moveTo(1, 8)\n .lineTo(15, 8);\n\n /**\n * The default track for vertically oriented sliders.\n * @static\n */\n static DEFAULT_VERTICAL_TRACK: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0xffffff, 1)\n .drawRect(0, 0, 16, 16) // natural width & height = 16\n .endFill()\n .lineStyle(1, 0x000000, 0.7, 1, true) // draw line in middle\n .moveTo(8, 1)\n .lineTo(8, 15);\n\n /**\n * @static\n */\n static DEFAULT_HANDLE: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0x000000)\n .drawCircle(16, 16, 8)\n .endFill()\n .beginFill(0x000000, 0.5)\n .drawCircle(16, 16, 16)\n .endFill();\n /**\n * Horizontal orientation\n * @static\n */\n static HORIZONTAL = 0xff5;\n\n /**\n * Vertical orientation\n * @static\n */\n static VERTICAL = 0xffe;\n}\n","import { Helpers } from './Helpers';\nconst _tweenItemCache = [];\nconst _callbackItemCache = [];\nconst _tweenObjects = {};\nconst _activeTweenObjects = {};\nlet _currentId = 1;\n\nclass TweenObject\n{\n public object: T;\n public tweens: Record;\n public active: boolean;\n public onUpdate: () => void;\n\n constructor(object: T)\n {\n this.object = object;\n this.tweens = {};\n this.active = false;\n this.onUpdate = null;\n }\n}\n\nclass CallbackItem\n{\n key: string;\n obj: any;\n parent: any;\n time: number;\n callback: Function;\n currentTime: number;\n\n private _ready: boolean;\n\n constructor()\n {\n this._ready = false;\n this.obj = null;\n this.parent = null;\n this.key = '';\n this.time = 0;\n this.callback = null;\n this.currentTime = 0;\n }\n\n remove(): void\n {\n this._ready = true;\n delete this.parent.tweens[this.key];\n if (!Object.keys(this.parent.tweens).length)\n {\n this.parent.active = false;\n this.parent.onUpdate = null;\n delete _activeTweenObjects[this.obj._tweenObjectId];\n }\n }\n\n set(obj, callback, time): void\n {\n this.obj = obj.object;\n\n if (!this.obj._currentCallbackID)\n { this.obj._currentCallbackID = 1; }\n else\n { this.obj._currentCallbackID++; }\n\n this.time = time;\n this.parent = obj;\n this.callback = callback;\n this._ready = false;\n this.key = `cb_${this.obj._currentCallbackID}`;\n this.currentTime = 0;\n if (!this.parent.active)\n {\n this.parent.active = true;\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\n }\n }\n\n update(delta: number): void\n {\n this.currentTime += delta;\n if (this.currentTime >= this.time)\n {\n this.remove();\n this.callback.call(this.parent);\n }\n }\n}\n\nclass TweenItem\n{\n key: string;\n parent: any;\n obj: any;\n\n from: any;\n to: any;\n time: number;\n ease: any;\n currentTime: number;\n t: number;\n isColor: boolean;\n currentColor: any;\n surfix: any;\n\n _ready: boolean;\n\n constructor()\n {\n this._ready = false;\n this.parent = null;\n this.obj = null;\n this.key = '';\n this.from = 0;\n this.to = 0;\n this.time = 0;\n this.ease = 0;\n this.currentTime = 0;\n this.t = 0;\n this.isColor = false;\n }\n\n remove(): void\n {\n this._ready = true;\n delete this.parent.tweens[this.key];\n if (!Object.keys(this.parent.tweens).length)\n {\n this.parent.active = false;\n delete _activeTweenObjects[this.obj._tweenObjectId];\n }\n }\n\n set(obj: any, key: string, from: any, to: any, time: number, ease: any): void\n {\n this.isColor = isNaN(from) && from[0] === '#' || isNaN(to) && to[0] === '#';\n this.parent = obj;\n this.obj = obj.object;\n this.key = key;\n this.surfix = getSurfix(to);\n\n if (this.isColor)\n {\n this.to = Helpers.hexToRgb(to);\n this.from = Helpers.hexToRgb(from);\n this.currentColor = { r: this.from.r, g: this.from.g, b: this.from.b };\n }\n else\n {\n this.to = getToValue(to);\n this.from = getFromValue(from, to, this.obj, key);\n }\n\n this.time = time;\n this.currentTime = 0;\n this.ease = ease;\n this._ready = false;\n\n if (!this.parent.active)\n {\n this.parent.active = true;\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\n }\n }\n\n update(delta: number): void\n {\n this.currentTime += delta;\n this.t = Math.min(this.currentTime, this.time) / this.time;\n if (this.ease)\n { this.t = this.ease.getPosition(this.t); }\n\n if (this.isColor)\n {\n this.currentColor.r = Math.round(Helpers.Lerp(this.from.r, this.to.r, this.t));\n this.currentColor.g = Math.round(Helpers.Lerp(this.from.g, this.to.g, this.t));\n this.currentColor.b = Math.round(Helpers.Lerp(this.from.b, this.to.b, this.t));\n this.obj[this.key] = Helpers.rgbToNumber(this.currentColor.r, this.currentColor.g, this.currentColor.b);\n }\n else\n {\n const val = Helpers.Lerp(this.from, this.to, this.t);\n\n this.obj[this.key] = this.surfix ? val + this.surfix : val;\n }\n\n if (this.currentTime >= this.time)\n {\n this.remove();\n }\n }\n}\n\nconst widthKeys = ['width', 'minWidth', 'maxWidth', 'anchorLeft', 'anchorRight', 'left', 'right', 'x'];\nconst heightKeys = ['height', 'minHeight', 'maxHeight', 'anchorTop', 'anchorBottom', 'top', 'bottom', 'y'];\n\nfunction getFromValue(from, to, obj, key): number\n{\n // both number\n if (!isNaN(from) && !isNaN(to))\n { return from; }\n\n // both percentage\n if (isNaN(from) && isNaN(to) && from.indexOf('%') !== -1 && to.indexOf('%') !== -1)\n { return parseFloat(from.replace('%', '')); }\n\n // convert from to px\n if (isNaN(from) && !isNaN(to) && from.indexOf('%') !== -1)\n {\n if (widthKeys.indexOf(key) !== -1)\n { return obj.parent._width * (parseFloat(from.replace('%', '')) * 0.01); }\n else if (heightKeys.indexOf(key) !== -1)\n { return obj.parent._height * (parseFloat(from.replace('%', '')) * 0.01); }\n\n return 0;\n }\n\n // convert from to percentage\n if (!isNaN(from) && isNaN(to) && to.indexOf('%') !== -1)\n {\n if (widthKeys.indexOf(key) !== -1)\n { return from / obj.parent._width * 100; }\n else if (heightKeys.indexOf(key) !== -1)\n { return from / obj.parent._height * 100; }\n\n return 0;\n }\n\n return 0;\n}\n\nfunction getSurfix(to: number | string): any\n{\n if (isNaN(to) && to.indexOf('%') !== -1)\n { return '%'; }\n}\n\nfunction getToValue(to: number | string): any\n{\n if (!isNaN(to))\n { return to; }\n if (isNaN(to) && to.indexOf('%') !== -1)\n { return parseFloat(to.replace('%', '')); }\n}\n\nfunction getObject(obj: any): any\n{\n if (!obj._tweenObjectId)\n {\n obj._tweenObjectId = _currentId;\n _currentId++;\n }\n let object = _tweenObjects[obj._tweenObjectId];\n\n if (!object)\n {\n object = _tweenObjects[obj._tweenObjectId] = new TweenObject(obj);\n }\n\n return object;\n}\n\nfunction getTweenItem(): TweenItem\n{\n for (let i = 0; i < _tweenItemCache.length; i++)\n {\n if (_tweenItemCache[i]._ready)\n { return _tweenItemCache[i]; }\n }\n\n const tween = new TweenItem();\n\n _tweenItemCache.push(tween);\n\n return tween;\n}\n\nfunction getCallbackItem(): CallbackItem\n{\n for (let i = 0; i < _callbackItemCache.length; i++)\n {\n if (_callbackItemCache[i]._ready)\n { return _callbackItemCache[i]; }\n }\n\n const cb = new CallbackItem();\n\n _callbackItemCache.push(cb);\n\n return cb;\n}\n\nexport const Tween = {\n to(obj, time, params, ease?)\n {\n const object = getObject(obj);\n let onUpdate = null;\n\n for (const key in params)\n {\n if (key === 'onComplete')\n {\n const cb = getCallbackItem();\n\n cb.set(object, params[key], time);\n object.tweens[cb.key] = cb;\n continue;\n }\n\n if (key === 'onUpdate')\n {\n onUpdate = params[key];\n continue;\n }\n\n if (time)\n {\n const match = params[key] === obj[key];\n\n if (typeof obj[key] === 'undefined') continue;\n\n if (match)\n {\n if (object.tweens[key]) object.tweens[key].remove();\n }\n else\n {\n if (!object.tweens[key])\n { object.tweens[key] = getTweenItem(); }\n object.tweens[key].set(object, key, obj[key], params[key], time, ease);\n }\n }\n }\n\n if (time)\n { object.onUpdate = onUpdate; }\n else this.set(obj, params);\n },\n from(obj, time, params, ease)\n {\n const object = getObject(obj);\n let onUpdate = null;\n\n for (const key in params)\n {\n if (key === 'onComplete')\n {\n const cb = getCallbackItem();\n\n cb.set(object, params[key], time);\n object.tweens[cb.key] = cb;\n continue;\n }\n\n if (key === 'onUpdate')\n {\n onUpdate = params[key];\n continue;\n }\n\n if (time)\n {\n const match = params[key] == obj[key];\n\n if (typeof obj[key] === 'undefined') continue;\n\n if (match)\n {\n if (object.tweens[key]) object.tweens[key].remove();\n }\n else\n {\n if (!object.tweens[key])\n { object.tweens[key] = getTweenItem(); }\n object.tweens[key].set(object, key, params[key], obj[key], time, ease);\n }\n }\n }\n\n if (time)\n { object.onUpdate = onUpdate; }\n else this.set(obj, params);\n },\n fromTo(obj, time, paramsFrom, paramsTo, ease)\n {\n const object = getObject(obj);\n let onUpdate = null;\n\n for (const key in paramsTo)\n {\n if (key === 'onComplete')\n {\n const cb = getCallbackItem();\n\n cb.set(object, paramsTo[key], time);\n object.tweens[cb.key] = cb;\n continue;\n }\n\n if (key === 'onUpdate')\n {\n onUpdate = paramsTo[key];\n continue;\n }\n\n if (time)\n {\n const match = paramsFrom[key] == paramsTo[key];\n\n if (typeof obj[key] === 'undefined' || typeof paramsFrom[key] === 'undefined') continue;\n\n if (match)\n {\n if (object.tweens[key]) object.tweens[key].remove();\n obj[key] = paramsTo[key];\n }\n else\n {\n if (!object.tweens[key])\n {\n object.tweens[key] = getTweenItem();\n }\n object.tweens[key].set(object, key, paramsFrom[key], paramsTo[key], time, ease);\n }\n }\n }\n\n if (time)\n { object.onUpdate = onUpdate; }\n else this.set(obj, paramsTo);\n },\n set(obj, params)\n {\n const object = getObject(obj);\n\n for (const key in params)\n {\n if (typeof obj[key] === 'undefined') continue;\n if (object.tweens[key]) object.tweens[key].remove();\n obj[key] = params[key];\n }\n },\n _update(delta)\n {\n for (const id in _activeTweenObjects)\n {\n const object = _activeTweenObjects[id];\n\n for (const key in object.tweens)\n {\n object.tweens[key].update(delta);\n }\n if (object.onUpdate)\n {\n object.onUpdate.call(object.object, delta);\n }\n }\n },\n};\n","import { Slider, ISliderOptions } from './Slider';\nimport { Tween } from './Tween';\nimport { Sprite } from './Sprite';\nimport { ScrollWidget } from './ScrollWidget';\nimport * as PIXI from 'pixi.js';\n\ninterface IScrollBarOptions extends ISliderOptions\n{\n track?: Sprite;\n handle?: Sprite;\n scrollingContainer: ScrollWidget;\n orientation: number;\n autohide?: boolean;\n}\n\n/**\n * @memberof PUXI\n * @interface IScrollBarOptions\n * @property {PUXI.Sprite} track\n * @property {PUXI.Sprite} handle\n */\n\n/**\n * An UI scrollbar to control a ScrollingContainer\n *\n * @class\n * @extends PUXI.Slider\n * @memberof PUXI\n * @param options {Object} ScrollBar settings\n * @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the scrollbar track\n * @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as scrollbar handle\n * @param options.scrollingContainer {PIXI.UI.ScrollingContainer} The container to control\n * @param [options.vertical=false] {boolean} Direction of the scrollbar\n * @param [options.autohide=false] {boolean} Hides the scrollbar when not needed\n */\nexport class ScrollBar extends Slider\n{\n scrollingContainer: ScrollWidget;\n autohide: boolean;\n _hidden: boolean;\n\n constructor(options: IScrollBarOptions)\n {\n super({\n track: options.track || ScrollBar.DEFAULT_TRACK.clone(),\n handle: options.handle || ScrollBar.DEFAULT_HANDLE.clone(),\n fill: null,\n orientation: options.orientation,\n minValue: 0,\n maxValue: 1,\n });\n\n this.scrollingContainer = options.scrollingContainer;\n this.autohide = options.autohide;\n this._hidden = false;\n }\n\n initialize(): void\n {\n super.initialize();\n this.decimals = 3; // up decimals to trigger ValueChanging more often\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n this.on('changing', (): void =>\n {\n this.scrollingContainer.forcePctPosition(\n this.orientation === Slider.HORIZONTAL ? 'x' : 'y',\n this.percentValue);\n });\n\n this.on('change', (): void =>\n {\n this.scrollingContainer.setScrollPosition();\n });\n }\n\n toggleHidden(hidden: boolean): void\n {\n if (this.autohide)\n {\n if (hidden && !this._hidden)\n {\n Tween.to(this, 0.2, { alpha: 0 });\n this._hidden = true;\n }\n else if (!hidden && this._hidden)\n {\n Tween.to(this, 0.2, { alpha: 1 });\n this._hidden = false;\n }\n }\n }\n\n /**\n * @static\n */\n static DEFAULT_TRACK = new PIXI.Graphics()\n .beginFill(0xffffff)\n .drawRect(0, 0, 8, 8)\n .endFill();\n\n /**\n * @static\n */\n static DEFAULT_HANDLE: PIXI.Graphics = new PIXI.Graphics()\n .beginFill(0x000000)\n .drawCircle(8, 8, 4)\n .endFill()\n .beginFill(0x000000, 0.5)\n .drawCircle(8, 8, 8)\n .endFill();\n}\n\n","import { InteractiveGroup } from './InteractiveGroup';\nimport { Helpers } from './Helpers';\nimport { DragManager } from './event/DragManager';\nimport { ScrollManager } from './event/ScrollManager';\nimport * as PIXI from 'pixi.js';\nimport { Widget } from './Widget';\nimport { WidgetGroup } from './WidgetGroup';\nimport { BorderLayout } from './layout-manager';\nimport { ScrollBar } from './ScrollBar';\nimport { ALIGN, BorderLayoutOptions, LayoutOptions } from './layout-options';\nimport { Slider } from './Slider';\n\n/**\n * @namespace PUXI\n * @interface\n */\ninterface IScrollingContainerOptions\n{\n scrollX?: boolean;\n scrollY?: boolean;\n dragScrolling?: boolean;\n softness?: number;\n radius?: number;\n expandMask?: number;\n overflowY?: number;\n overflowX?: number;\n scrollBars?: boolean;\n}\n\n/**\n * `ScrollWidget` masks its contents to its layout bounds and translates\n * its children when scrolling. It uses the anchor layout.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.InteractiveGroup\n */\nexport class ScrollWidget extends InteractiveGroup\n{\n private mask: PIXI.Graphics;\n public readonly innerContainer: WidgetGroup;\n private innerBounds: PIXI.Rectangle;\n\n scrollX: boolean;\n scrollY: boolean;\n dragScrolling: boolean;\n softness: number;\n radius: number;\n expandMask: number;\n overflowY: number;\n overflowX: number;\n\n animating: boolean;\n scrolling: boolean;\n\n protected scrollBars: ScrollBar[];\n protected scrollPosition: PIXI.Point;\n protected scrollVelocity: PIXI.Point;\n protected targetPosition: PIXI.Point;\n protected lastPosition: PIXI.Point;\n protected stop: boolean;\n\n private boundCached: number;\n private lastWidth: number;\n private lastHeight: number;\n\n /**\n * @param {PUXI.IScrollingContainerOptions} options\n * @param [options.scrollX=false] {Boolean} Enable horizontal scrolling\n * @param [options.scrollY=false] {Boolean} Enable vertical scrolling\n * @param [options.dragScrolling=true] {Boolean} Enable mousedrag scrolling\n * @param [options.softness=0.5] {Number} (0-1) softness of scrolling\n * @param [options.width=0] {Number|String} container width\n * @param [options.height=0] {Number} container height\n * @param [options.radius=0] {Number} corner radius of clipping mask\n * @param [options.expandMask=0] {Number} mask expand (px)\n * @param [options.overflowY=0] {Number} how much can be scrolled past content dimensions\n * @param [options.overflowX=0] {Number} how much can be scrolled past content dimensions\n */\n constructor(options: IScrollingContainerOptions = {})\n {\n super();\n\n this.mask = new PIXI.Graphics();\n this.innerContainer = new InteractiveGroup();\n this.innerBounds = new PIXI.Rectangle();\n super.addChild(this.innerContainer);\n this.contentContainer.addChild(this.mask);\n this.contentContainer.mask = this.mask;\n\n this.scrollX = options.scrollX !== undefined ? options.scrollX : false;\n this.scrollY = options.scrollY !== undefined ? options.scrollY : false;\n this.dragScrolling = options.dragScrolling !== undefined ? options.dragScrolling : true;\n this.softness = options.softness !== undefined ? Math.max(Math.min(options.softness || 0, 1), 0) : 0.5;\n this.radius = options.radius || 0;\n this.expandMask = options.expandMask || 0;\n this.overflowY = options.overflowY || 0;\n this.overflowX = options.overflowX || 0;\n\n this.scrollVelocity = new PIXI.Point();\n\n /**\n * Widget's position in a scroll.\n * @member {PIXI.Point}\n * @private\n */\n this.scrollPosition = new PIXI.Point();\n\n /**\n * Position that the cursor is at, i.e. our scroll \"target\".\n * @member {PIXI.Point}\n * @private\n */\n this.targetPosition = new PIXI.Point();\n this.lastPosition = new PIXI.Point();\n\n this.useLayout(new BorderLayout());\n\n this.animating = false;\n this.scrolling = false;\n this.scrollBars = [];\n\n if (options.scrollBars && this.scrollX)\n {\n const horizontalScrollBar: ScrollBar = new ScrollBar({\n orientation: ScrollBar.HORIZONTAL,\n scrollingContainer: this,\n minValue: 0,\n maxValue: 1,\n })\n .setLayoutOptions(\n new BorderLayoutOptions({\n width: LayoutOptions.FILL_PARENT,\n height: LayoutOptions.WRAP_CONTENT,\n region: BorderLayoutOptions.REGION_BOTTOM,\n horizontalAlign: ALIGN.CENTER,\n verticalAlign: ALIGN.BOTTOM,\n }),\n )\n .setBackground(0xff)\n .setBackgroundAlpha(0.8) as ScrollBar;\n\n super.addChild(horizontalScrollBar);\n this.scrollBars.push(horizontalScrollBar);\n }\n if (options.scrollBars && this.scrollY)\n {\n const verticalScrollBar: ScrollBar = new ScrollBar({\n orientation: ScrollBar.VERTICAL,\n scrollingContainer: this,\n minValue: 0,\n maxValue: 1,\n })\n .setLayoutOptions(\n new BorderLayoutOptions({\n width: LayoutOptions.WRAP_CONTENT,\n height: LayoutOptions.FILL_PARENT,\n region: BorderLayoutOptions.REGION_RIGHT,\n horizontalAlign: ALIGN.RIGHT,\n verticalAlign: ALIGN.CENTER,\n }),\n )\n .setBackground(0xff)\n .setBackgroundAlpha(0.8) as ScrollBar;\n\n super.addChild(verticalScrollBar);\n this.scrollBars.push(verticalScrollBar);\n }\n\n this.boundCached = 0;\n }\n\n /**\n * Updates the mask and scroll position before rendering.\n *\n * @override\n */\n update(): void\n {\n super.update();\n\n if (this.lastWidth !== this.width || this.lastHeight !== this.height)\n {\n const of = this.expandMask;\n\n this.mask.clear();\n this.mask.lineStyle(0);\n this.mask.beginFill(0xFFFFFF, 1);\n\n if (this.radius === 0)\n {\n this.mask.drawRect(-of, -of, this.width + of, this.height + of);\n }\n else\n {\n this.mask.drawRoundedRect(-of, -of, this.width + of, this.height + of, this.radius);\n }\n\n this.mask.endFill();\n\n this.lastWidth = this.width;\n this.lastHeight = this.height;\n }\n }\n\n /**\n * Adds this scrollbar. It is expected that the given scrollbar has been\n * given proper border-layout options.\n *\n * @todo This only works for TOP, LEFT scrollbars as BOTTOM, RIGHT are occupied.\n * @param {PUXI.ScrollBar} scrollBar\n */\n addScrollBar(scrollBar: ScrollBar): ScrollWidget\n {\n super.addChild(scrollBar);\n this.scrollBars.push(scrollBar);\n\n return this;\n }\n\n /**\n * @param {PUXI.Widget[]} newChildren\n * @returns {ScrollWidget} this widget\n */\n addChild(...newChildren: Widget[]): Widget\n {\n for (let i = 0; i < newChildren.length; i++)\n {\n this.innerContainer.addChild(newChildren[i]);\n }\n\n this.getInnerBounds(true); // make sure bounds is updated instantly when a child is added\n\n return this;\n }\n\n /**\n * Updates the scroll bar values, and should be called when scrolled.\n */\n updateScrollBars(): void\n {\n for (let i = 0, j = this.scrollBars.length; i < j; i++)\n {\n const scrollBar = this.scrollBars[i];\n\n if (scrollBar.orientation === Slider.HORIZONTAL)\n {\n const x = this.getPercentPosition('x');\n\n scrollBar.value = x;\n }\n else if (scrollBar.orientation === Slider.VERTICAL)\n {\n const y = this.getPercentPosition('y');\n\n scrollBar.value = y;\n }\n }\n }\n\n getInnerBounds(force?: boolean): PIXI.Rectangle\n {\n // this is a temporary fix, because we cant rely on innercontainer height if the children is positioned > 0 y.\n if (force || performance.now() - this.boundCached > 1000)\n {\n this.innerContainer.insetContainer.getLocalBounds(this.innerBounds);\n\n this.innerBounds.height = this.innerBounds.y + this.innerContainer.height || 0;\n this.innerBounds.width = this.innerBounds.x + this.innerContainer.width || 0;\n this.boundCached = performance.now();\n }\n\n return this.innerBounds;\n }\n\n /**\n * @override\n */\n initialize(): void\n {\n super.initialize();\n\n if (this.scrollX || this.scrollY)\n {\n this.initScrolling();\n }\n }\n\n private initScrolling(): void\n {\n const container = this.innerContainer.insetContainer;\n const realPosition = new PIXI.Point();\n const {\n scrollPosition,\n targetPosition,\n } = this;\n\n // Drag scroll\n if (this.dragScrolling)\n {\n const drag: DragManager = this.eventBroker.dnd as DragManager;\n\n drag.onDragStart = (e): void =>\n {\n if (!this.scrolling)\n {\n realPosition.copyFrom(container.position);\n scrollPosition.copyFrom(container.position);\n this.scrolling = true;\n this.setScrollPosition();\n\n this.emit('scrollstart', e);\n }\n };\n\n drag.onDragMove = (_, offset): void =>\n {\n if (this.scrollX)\n {\n targetPosition.x = realPosition.x + offset.x;\n }\n if (this.scrollY)\n {\n targetPosition.y = realPosition.y + offset.y;\n }\n\n this.setScrollPosition();\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n drag.onDragEnd = (e): void =>\n {\n if (this.scrolling)\n {\n this.scrolling = false;\n this.emit('scrollend', e);\n }\n };\n }\n\n // Mouse scroll\n const scrollSpeed = new PIXI.Point();\n const scroll = new ScrollManager(this, true);\n\n scroll.onMouseScroll = (e, delta: PIXI.Point): void =>\n {\n scrollSpeed.set(-delta.x * 0.2, -delta.y * 0.2);\n this.setScrollPosition(scrollSpeed);\n };\n\n this.updateScrollBars();\n }\n\n /**\n * @param {string} direction - `'x'` or `'y'`\n * @returns {number} a value between 0 and 1 indicating how scrolling\n * has occured in that direction (called percent position).\n */\n getPercentPosition(direction: 'x' | 'y'): number\n {\n const bounds = this.getInnerBounds();\n const container = this.innerContainer.insetContainer;\n\n if (direction === 'x')\n {\n return container.x / (this.width - bounds.width);\n }\n else if (direction === 'y')\n {\n return container.y / (this.height - bounds.height);\n }\n\n return 0;\n }\n\n forcePctPosition = (direction: string, pct: number): void =>\n {\n const bounds = this.getInnerBounds();\n const container = this.innerContainer.insetContainer;\n\n if (this.scrollX && direction === 'x')\n {\n container.position[direction] = -((bounds.width - this.width) * pct);\n }\n if (this.scrollY && direction === 'y')\n {\n container.position[direction] = -((bounds.height - this.height) * pct);\n }\n\n this.scrollPosition[direction] = this.targetPosition[direction] = container.position[direction];\n };\n\n focusPosition = (pos: PIXI.Point): void =>\n {\n const bounds = this.getInnerBounds();\n const container = this.innerContainer.insetContainer;\n\n let dif;\n\n if (this.scrollX)\n {\n const x = Math.max(0, (Math.min(bounds.width, pos.x)));\n\n if (x + container.x > this.width)\n {\n dif = x - this.width;\n container.x = -dif;\n }\n else if (x + container.x < 0)\n {\n dif = x + container.x;\n container.x -= dif;\n }\n }\n if (this.scrollY)\n {\n const y = Math.max(0, (Math.min(bounds.height, pos.y)));\n\n if (y + container.y > this.height)\n {\n dif = y - this.height;\n container.y = -dif;\n }\n else if (y + container.y < 0)\n {\n dif = y + container.y;\n container.y -= dif;\n }\n }\n\n this.lastPosition.copyFrom(container.position);\n this.targetPosition.copyFrom(container.position);\n this.scrollPosition.copyFrom(container.position);\n\n this.updateScrollBars();\n };\n\n /**\n * @param {PIXI.Point}[velocity]\n */\n setScrollPosition = (velocity?: PIXI.Point): void =>\n {\n if (velocity)\n {\n this.scrollVelocity.copyFrom(velocity);\n }\n\n const container = this.innerContainer.insetContainer;\n\n if (!this.animating)\n {\n this.animating = true;\n this.lastPosition.copyFrom(container.position);\n this.targetPosition.copyFrom(container.position);\n\n PIXI.Ticker.shared.add(this.updateScrollPosition);\n }\n };\n\n /**\n * @param {number} delta\n * @protected\n */\n protected updateScrollPosition = (delta: number): void =>\n {\n this.stop = true;\n\n if (this.scrollX)\n {\n this.updateDirection('x', delta);\n }\n if (this.scrollY)\n {\n this.updateDirection('y', delta);\n }\n\n if (this.stop)\n {\n PIXI.Ticker.shared.remove(this.updateScrollPosition);\n this.animating = false;\n }\n\n this.updateScrollBars();\n };\n\n /**\n * @param {'x' | 'y'} direction\n * @param {number} delta\n * @protected\n */\n protected updateDirection = (direction: string, delta: number): void =>\n {\n const bounds = this.getInnerBounds();\n const {\n scrollPosition,\n scrollVelocity,\n targetPosition,\n lastPosition,\n } = this;\n const container = this.innerContainer.insetContainer;\n\n let min;\n\n if (direction === 'y')\n {\n min = Math.round(Math.min(0, this.height - bounds.height));\n }\n else\n {\n min = Math.round(Math.min(0, this.width - bounds.width));\n }\n\n if (!this.scrolling && Math.round(scrollVelocity[direction]) !== 0)\n {\n targetPosition[direction] += scrollVelocity[direction];\n scrollVelocity[direction] = Helpers.Lerp(\n scrollVelocity[direction],\n 0,\n (5 + 2.5 / Math.max(this.softness, 0.01)) * delta);\n\n if (targetPosition[direction] > 0)\n {\n targetPosition[direction] = 0;\n }\n else if (targetPosition[direction] < min)\n {\n targetPosition[direction] = min;\n }\n }\n\n if (!this.scrolling\n && Math.round(scrollVelocity[direction]) === 0\n && (container[direction] > 0\n || container[direction] < min))\n {\n const target = this.scrollPosition[direction] > 0 ? 0 : min;\n\n scrollPosition[direction] = Helpers.Lerp(\n scrollPosition[direction],\n target,\n (40 - (30 * this.softness)) * delta);\n this.stop = false;\n }\n else if (this.scrolling || Math.round(scrollVelocity[direction]) !== 0)\n {\n if (this.scrolling)\n {\n scrollVelocity[direction] = this.scrollPosition[direction] - lastPosition[direction];\n lastPosition.copyFrom(scrollPosition);\n }\n if (targetPosition[direction] > 0)\n {\n scrollVelocity[direction] = 0;\n scrollPosition[direction] = 100 * this.softness * (1 - Math.exp(targetPosition[direction] / -200));\n }\n else if (targetPosition[direction] < min)\n {\n scrollVelocity[direction] = 0;\n scrollPosition[direction] = min - (100 * this.softness * (1 - Math.exp((min - targetPosition[direction]) / -200)));\n }\n else\n {\n scrollPosition[direction] = targetPosition[direction];\n }\n\n this.stop = false;\n }\n\n container.position[direction] = Math.round(scrollPosition[direction]);\n };\n\n /**\n * This is fired when the user starts scrolling.\n * @event scrollstart\n */\n\n /**\n * This is fired when the user stops scrolling.\n * @event scrollend\n */\n}\n","import { InteractiveGroup } from './InteractiveGroup';\nimport { Tween } from './Tween';\nimport { EaseBase } from './Ease/EaseBase';\nimport { Widget } from './Widget';\n\n/**\n * An UI Container object\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Widget\n * @param desc {Boolean} Sort the list descending\n * @param tweenTime {Number} if above 0 the sort will be animated\n * @param tweenEase {PIXI.UI.Ease} ease method used for animation\n */\nexport class SortableList extends InteractiveGroup\n{\n desc: boolean;\n tweenTime: number;\n tweenEase: EaseBase;\n items: any[];\n\n _sortTimeout: NodeJS.Timeout;\n\n constructor(desc, tweenTime, tweenEase)\n {\n super(0, 0);\n\n this.desc = typeof desc !== 'undefined' ? desc : false;\n this.tweenTime = tweenTime || 0;\n this.tweenEase = tweenEase;\n this.items = [];\n }\n\n addChild(UIObject: any, fnValue?, fnThenBy?): void\n {\n super.addChild(UIObject);\n\n if (this.items.indexOf(UIObject) === -1)\n {\n this.items.push(UIObject);\n }\n\n if (typeof fnValue === 'function')\n {\n UIObject._sortListValue = fnValue;\n }\n\n if (typeof fnThenBy === 'function')\n {\n UIObject._sortListThenByValue = fnThenBy;\n }\n\n if (!UIObject._sortListRnd)\n {\n UIObject._sortListRnd = Math.random();\n }\n\n this.sort();\n }\n\n removeChild(UIObject): void\n {\n if (arguments.length > 1)\n {\n for (let i = 0; i < arguments.length; i++)\n {\n this.removeChild(arguments[i]);\n }\n }\n else\n {\n super.removeChild(UIObject);\n const index = this.items.indexOf(UIObject);\n\n if (index !== -1)\n {\n this.items.splice(index, 1);\n }\n\n this.sort();\n }\n }\n\n sort(instant = false): void\n {\n clearTimeout(this._sortTimeout);\n\n if (instant)\n {\n this._sort();\n\n return;\n }\n\n this._sortTimeout = setTimeout(() => { this._sort(); }, 0);\n }\n\n _sort()\n {\n const desc = this.desc;\n let y = 0;\n let alt = true;\n\n this.items.sort(function (a, b)\n {\n let res = a._sortListValue() < b._sortListValue() ? desc ? 1 : -1\n : a._sortListValue() > b._sortListValue() ? desc ? -1 : 1 : 0;\n\n if (res === 0 && a._sortListThenByValue && b._sortListThenByValue)\n {\n res = a._sortListThenByValue() < b._sortListThenByValue() ? desc ? 1 : -1\n : a._sortListThenByValue() > b._sortListThenByValue() ? desc ? -1 : 1 : 0;\n }\n if (res === 0)\n {\n res = a._sortListRnd > b._sortListRnd ? 1\n : a._sortListRnd < b._sortListRnd ? -1 : 0;\n }\n\n return res;\n });\n\n for (let i = 0; i < this.items.length; i++)\n {\n const item = this.items[i];\n\n alt = !alt;\n\n if (this.tweenTime > 0)\n {\n Tween.fromTo(item, this.tweenTime, { x: item.x, y: item.y }, { x: 0, y }, this.tweenEase);\n }\n else\n {\n item.x = 0;\n item.y = y;\n }\n y += item.height;\n if (typeof item.altering === 'function')\n { item.altering(alt); }\n }\n\n // force it to update parents when sort animation is done (prevent scrolling container bug)\n if (this.tweenTime > 0)\n {\n setTimeout(() =>\n {\n this.updatesettings(false, true);\n }, this.tweenTime * 1000);\n }\n }\n}\n\n","import { Widget } from './Widget';\nimport * as PIXI from 'pixi.js';\n\n/**\n * A sliced sprite with dynamic width and height.\n *\n * @class\n * @memberof PUXI\n * @param Texture {PIXI.Texture} the texture for this SliceSprite\n * @param BorderWidth {Number} Width of the sprite borders\n * @param horizontalSlice {Boolean} Slice the sprite horizontically\n * @param verticalSlice {Boolean} Slice the sprite vertically\n * @param [tile=false] {Boolean} tile or streach\n */\nexport class SliceSprite extends Widget\n{\n ftl: PIXI.Rectangle;\n ftr: PIXI.Rectangle;\n\n fbl: PIXI.Rectangle;\n fbr: PIXI.Rectangle;\n\n ft: PIXI.Rectangle;\n fb: PIXI.Rectangle;\n fr: PIXI.Rectangle;\n fl: PIXI.Rectangle;\n ff: PIXI.Rectangle;\n\n stl: PIXI.Sprite;\n str: PIXI.Sprite;\n sbl: PIXI.Sprite;\n sbr: PIXI.Sprite;\n\n st: PIXI.Sprite;\n sb: PIXI.Sprite;\n sl: PIXI.Sprite;\n sr: PIXI.Sprite;\n\n sf: PIXI.Sprite;\n\n bw: number;\n vs: boolean;\n hs: boolean;\n t: PIXI.BaseTexture;\n f: PIXI.Rectangle;\n\n tile: any;\n\n constructor(texture: PIXI.Texture, borderWidth, horizontalSlice, verticalSlice, tile)\n {\n super(texture.width, texture.height);\n\n this.bw = borderWidth || 5;\n this.vs = typeof verticalSlice !== 'undefined' ? verticalSlice : true;\n this.hs = typeof horizontalSlice !== 'undefined' ? horizontalSlice : true;\n this.t = texture.baseTexture;\n this.f = texture.frame;\n this.tile = tile;\n\n if (this.hs)\n {\n this.setting.minWidth = borderWidth * 2;\n }\n if (this.vs)\n {\n this.setting.minHeight = borderWidth * 2;\n }\n\n /**\n * Updates the sliced sprites position and size\n *\n * @private\n */\n this.update = function ()\n {\n if (!this.initialized) return;\n if (vs && hs)\n {\n str.x = sbr.x = sr.x = this._width - bw;\n sbl.y = sbr.y = sb.y = this._height - bw;\n sf.width = st.width = sb.width = this._width - bw * 2;\n sf.height = sl.height = sr.height = this._height - bw * 2;\n }\n else if (hs)\n {\n sr.x = this._width - bw;\n sl.height = sr.height = sf.height = this._height;\n sf.width = this._width - bw * 2;\n }\n else\n { // vs\n sb.y = this._height - bw;\n st.width = sb.width = sf.width = this._width;\n sf.height = this._height - bw * 2;\n }\n\n if (this.tint !== null)\n {\n sf.tint = this.tint;\n if (vs && hs) stl.tint = str.tint = sbl.tint = sbr.tint = this.tint;\n if (hs) sl.tint = sr.tint = this.tint;\n if (vs) st.tint = sb.tint = this.tint;\n }\n\n if (this.blendMode !== null)\n {\n sf.blendMode = this.blendMode;\n if (vs && hs) stl.blendMode = str.blendMode = sbl.blendMode = sbr.blendMode = this.blendMode;\n if (hs) sl.blendMode = sr.blendMode = this.blendMode;\n if (vs) st.blendMode = sb.blendMode = this.blendMode;\n }\n };\n }\n\n initialize()\n {\n super.initialize();\n const { f, bw } = this;\n\n // get frames\n if (this.vs && this.hs)\n {\n this.ftl = new PIXI.Rectangle(f.x, f.y, bw, bw);\n this.ftr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, bw);\n this.fbl = new PIXI.Rectangle(f.x, f.y + f.height - bw, bw, bw);\n this.fbr = new PIXI.Rectangle(f.x + f.width - bw, f.y + f.height - bw, bw, bw);\n this.ft = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, bw);\n this.fb = new PIXI.Rectangle(f.x + bw, f.y + f.height - bw, f.width - bw * 2, bw);\n this.fl = new PIXI.Rectangle(f.x, f.y + bw, bw, f.height - bw * 2);\n this.fr = new PIXI.Rectangle(f.x + f.width - bw, f.y + bw, bw, f.height - bw * 2);\n this.ff = new PIXI.Rectangle(f.x + bw, f.y + bw, f.width - bw * 2, f.height - bw * 2);\n }\n else if (this.hs)\n {\n this.fl = new PIXI.Rectangle(this.f.x, f.y, bw, f.height);\n this.fr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, f.height);\n this.ff = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, f.height);\n }\n else\n { // vs\n this.ft = new PIXI.Rectangle(f.x, f.y, f.width, bw);\n this.fb = new PIXI.Rectangle(f.x, f.y + f.height - bw, f.width, bw);\n this.ff = new PIXI.Rectangle(f.x, f.y + bw, f.width, f.height - bw * 2);\n }\n\n // TODO: swap frames if rotation\n\n const { t, ff, fl, fr, ft, fb } = this;\n\n // make sprites\n this.sf = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, ff))\n : new PIXI.Sprite(new PIXI.Texture(t, ff));\n this.contentContainer.addChildAt(this.sf, 0);\n\n if (this.vs && this.hs)\n {\n this.stl = new PIXI.Sprite(new PIXI.Texture(t, this.ftl));\n this.str = new PIXI.Sprite(new PIXI.Texture(t, this.ftr));\n this.sbl = new PIXI.Sprite(new PIXI.Texture(t, this.fbl));\n this.sbr = new PIXI.Sprite(new PIXI.Texture(t, this.fbr));\n this.contentContainer.addChildAt(this.stl, 0);\n this.contentContainer.addChildAt(this.str, 0);\n this.contentContainer.addChildAt(this.sbl, 0);\n this.contentContainer.addChildAt(this.sbr, 0);\n }\n if (hs)\n {\n this.sl = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, fl))\n : new PIXI.Sprite(new PIXI.Texture(t, fl));\n this.sr = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, fr))\n : new PIXI.Sprite(new PIXI.Texture(t, fr));\n\n this.contentContainer.addChildAt(this.sl, 0);\n this.contentContainer.addChildAt(this.sr, 0);\n }\n if (this.vs)\n {\n this.st = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, ft))\n : new PIXI.Sprite(new PIXI.Texture(t, ft));\n this.sb = this.tile\n ? new PIXI.TilingSprite(new PIXI.Texture(t, fb))\n : new PIXI.Sprite(new PIXI.Texture(t, fb));\n this.contentContainer.addChildAt(this.st, 0);\n this.contentContainer.addChildAt(this.sb, 0);\n }\n\n // set constant position and sizes\n if (this.vs && this.hs)\n {\n this.st.x = bw;\n this.sb.x = bw;\n this.sl.y = bw;\n this.sr.y = bw;\n this.stl.width = bw;\n this.str.width = bw;\n this.sbl.width = bw;\n this.sbr.width = bw;\n this.stl.height = bw;\n this.str.height = bw;\n this.sbl.height = bw;\n this.sbr.height = bw;\n }\n\n if (this.hs)\n {\n this.sf.x = this.sl.width = this.sr.width = bw;\n }\n if (this.vs)\n {\n this.sf.y = this.st.height = this.sb.height = bw;\n }\n }\n\n update(): void\n {\n // NO updates\n }\n}\n\n","import { Stage } from '../Stage';\nimport { Widget } from '../Widget';\nimport * as PIXI from 'pixi.js';\n\nexport abstract class Controller extends PIXI.utils.EventEmitter\n{\n stage: Stage;\n\n constructor(stage: Stage)\n {\n super();\n this.stage = stage;\n }\n\n abstract in(widget: T): any;\n\n abstract out(widget: T): any;\n}\n\n/**\n * A controller handles a stage-level state that can be held by wigets. For example,\n * `PUXI.FocusController` handles which widget is focused.\n *\n * @memberof PUXI\n * @class Controller\n */\n\n/**\n * Enables the widget to enter the controller's state.\n *\n * @memberof PUXI.Controller#\n * @method in\n * @param {PUXI.Widget} widget\n */\n\n/**\n * Disables the widget from the controller's state.\n *\n * @memberof PUXI.Controller#\n * @method out\n * @param {PUXI.Widget} widget\n */\n","import { Controller } from './Controller';\nimport { CheckBox } from '../CheckBox';\nimport { Stage } from '../Stage';\n\nexport type CheckGroup = string;\n\n/**\n * @memberof PUXI\n * @typedef {string} CheckGroup\n */\n\ninterface CBGroup\n{\n checks: Array;\n selected: CheckBox;\n}\n\n/**\n * Check boxes use this controller to deselect other checkboxes in the group when\n * they are selected.\n *\n * @memberof PUXI\n * @class\n * @extends PUXI.Controller\n */\nexport class CheckBoxGroupController extends Controller\n{\n protected checkGroups: Map;\n\n constructor(stage: Stage)\n {\n super(stage);\n this.checkGroups = new Map();\n }\n\n /**\n * @param {PUXI.CheckBox} widget\n * @param {PUXI.CheckGroup} checkGroup\n * @override\n */\n in(widget: CheckBox, checkGroup?: CheckGroup): void\n {\n if (!checkGroup)\n {\n throw new Error('Default check groups don\\'t exist!');\n }\n\n const group = this.checkGroups.get(checkGroup) || this.initGroup(checkGroup);\n\n group.checks.push(widget);\n widget.checkGroup = checkGroup;\n }\n\n /**\n * @override\n */\n out(widget: CheckBox): void\n {\n const group = this.checkGroups.get(widget.checkGroup);\n const i = group.checks.indexOf(widget);\n\n if (i > 0)\n {\n group.checks.splice(i, 1);\n }\n\n widget.checkGroup = null;\n }\n\n /**\n * Called when a checkbox is selected. Do not call from outside.\n *\n * @param {CheckBox} widget\n */\n notifyCheck(widget: CheckBox): void\n {\n const group = this.checkGroups.get(widget.checkGroup);\n\n if (!group)\n {\n return;\n }\n\n const { checks } = group;\n\n for (let i = 0, j = checks.length; i < j; i++)\n {\n if (checks[i] !== widget)\n {\n checks[i].checked = false;\n }\n }\n\n group.selected = widget;\n }\n\n /**\n * @param {PUXI.CheckGroup} group\n * @returns {CheckBox} the selected checkbox in the group\n */\n getSelected(group: CheckGroup): CheckBox\n {\n return this.checkGroups.get(group)?.selected;\n }\n\n /**\n * Ensures that the check group exists in `this.checkGroups`.\n *\n * @param {PUXI.CheckGroup} id\n * @protected\n */\n protected initGroup(id: CheckGroup): CBGroup\n {\n const cgroup: CBGroup = {\n checks: [],\n selected: null,\n };\n\n this.checkGroups.set(id, cgroup);\n\n return cgroup;\n }\n}\n","import { Controller } from './Controller';\nimport { Stage } from '../Stage';\nimport { IFocusable } from '../IFocusable';\n\nexport type TabGroup = string;\n\n/**\n * Pressing tab on a focused widget will make the next widget its tab group\n * focused. If no tab group is specified for a focusable widget, then it\n * has the `'default'` tab group.\n *\n * @memberof PUXI\n * @typedef {string} TabGroup\n */\n\n/**\n * @memberof PUXI\n * @class\n * @extends PUXI.Controller\n */\nexport class FocusController extends Controller\n{\n stage: Stage;\n\n protected tabGroups: Map;\n protected currentItem: IFocusable;\n\n useTab: boolean;\n useForward: boolean;\n useBack: boolean;\n\n constructor(stage: Stage)\n {\n super(stage);\n\n /**\n * Map of tab-group names to the widgets in those groups.\n * @member {Map}\n * @protected\n */\n this.tabGroups = new Map();\n\n /**\n * Whether to enable tab-based focus movement.\n * @member {boolean}\n */\n this.useTab = true;\n\n /**\n * Whether to enable forward arrow key focus movement.\n * @member {boolean}\n */\n this.useForward = true;\n\n /**\n * Whether to enable back arrow key focus movement.\n * @member {boolean}\n */\n this.useBack = true;\n }\n\n /**\n * Adds the (focusable) widget to the tab group so that pressing tab repeatedly\n * will eventually bring it into focus.\n *\n * @param {PUXI.IFocusable} widget - the widget to add\n * @param {number}[tabIndex=0] - unique index for the widget in tab group used for ordering\n * @param {PUXI.TabGroup}[tabGroup='default'] - tab group name\n */\n in(widget: IFocusable, tabIndex = 0, tabGroup = 'default'): void\n {\n let widgets = this.tabGroups.get(tabGroup);\n\n if (!widgets)\n {\n widgets = [];\n this.tabGroups.set(tabGroup, widgets);\n }\n\n const i = widgets.indexOf(widget);\n\n // Push widget into tab group list if not present already.\n if (i === -1)\n {\n widget.tabIndex = tabIndex !== undefined ? tabIndex : -1;\n widget.tabGroup = tabGroup;\n\n widgets.push(widget);\n widgets.sort((a, b) => a.tabIndex - b.tabIndex);\n }\n }\n\n /**\n * @param {PUXI.IFocusable} widget\n * @override\n */\n out(widget: IFocusable): void\n {\n const widgets = this.tabGroups.get(widget.tabGroup);\n\n if (!widgets)\n {\n return;\n }\n\n const i = widgets.indexOf(widget);\n\n if (i !== -1)\n {\n // Widgets should already be sorted & so deleting should not unsort it.\n widgets.splice(i, 1);\n }\n }\n\n /**\n * Called when a widget comes into focus. Do not call this yourself.\n *\n * @param {IFocusable} widget\n */\n notifyFocus(widget: IFocusable): void\n {\n const lastItem = this.currentItem;\n\n if (lastItem)\n {\n lastItem.blur();\n this.emit('blur', lastItem);\n }\n\n this.currentItem = widget;\n\n this.emit('focus', widget);\n this.emit('focusChanged', widget, lastItem);\n }\n\n /**\n * Clears the currently focused item without blurring it. It is called\n * when a widget goes out of focus.\n */\n notifyBlur(): void\n {\n this.emit('blur', this.currentItem);\n this.emit('focusChanged', null, this.currentItem);\n\n this.currentItem = null;\n }\n\n /**\n * Brings the widget into focus.\n *\n * @param {IFocusable} item\n */\n focus(item: IFocusable): void\n {\n const lastItem = this.currentItem;\n\n if (lastItem)\n {\n lastItem.blur();\n this.emit('blur', lastItem);\n }\n\n item.focus();\n\n this.emit('focus', item);\n this.emit('focusChanged', item, lastItem);\n }\n\n /**\n * Blurs the currently focused widget out of focus.\n */\n blur(): void\n {\n if (this.currentItem)\n {\n this.currentItem.blur();\n\n this.emit('blur', this.currentItem);\n this.emit('focusChanged', null, this.currentItem);\n\n this.currentItem = null;\n }\n }\n\n /**\n * Called when tab is pressed on a focusable widget.\n */\n onTab(): void\n {\n const { tabGroups, currentItem } = this;\n\n if (currentItem)\n {\n const tabGroup = tabGroups.get(currentItem.tabGroup);\n\n let i = tabGroup.indexOf(currentItem) + 1;\n\n if (i >= tabGroup.length)\n {\n i = 0;\n }\n\n this.focus(tabGroup[i]);\n }\n }\n\n /**\n * Focuses the next item without wrapping, i.e. it does not go to the first\n * item if the current one is the last item. This is called when the user\n * presses the forward arrow key.\n */\n onForward(): void\n {\n if (!this.useForward)\n {\n return;\n }\n\n const { currentItem, tabGroups } = this;\n\n if (currentItem)\n {\n const tabGroup = tabGroups.get(currentItem.tabGroup);\n\n let i = tabGroup.indexOf(currentItem) + 1;\n\n if (i >= tabGroup.length)\n {\n i = tabGroup.length - 1;\n }\n\n this.focus(tabGroup[i]);\n }\n }\n\n /**\n * Focuses the last item without wrapping, i.e. it does not go to the last\n * item if the current item is the first one. This is called when the user\n * presses the back arrow button.\n */\n onBack(): void\n {\n const { currentItem, tabGroups } = this;\n\n if (currentItem)\n {\n const tabGroup = tabGroups.get(currentItem.tabGroup);\n let i = tabGroup.indexOf(currentItem) - 1;\n\n if (i < 0) i = 0;\n\n this.focus(tabGroup[i]);\n }\n }\n\n /**\n * Fired when a widget gains focus.\n * @event focus\n * @param {PUXI.IFocusable} widget - the widget that gained focus.\n */\n\n /**\n * Fired when a widget looses focus.\n * @event blur\n * @param {PUXI.IFocusable} widget - the widget that lost focus.\n */\n\n /**\n * Fired when a new widget comes into focus or one looses focus.\n * @event focusChanged\n * @param {PUXI.IFocusable}[newFocus] - the widget that came into focus. It may\n * be null if only a blur occured.\n * @param {PUXI.IFocusable}[oldFocus] - the widget that lost focus. It may be\n * null if a widget gained focused for the first time.\n */\n}\n","import { Widget } from './Widget';\nimport * as PIXI from 'pixi.js';\nimport { MeasureMode } from './IMeasurable';\nimport { LayoutOptions, FastLayoutOptions } from './layout-options';\nimport { FocusController, Controller, CheckBoxGroupController } from './ctl';\n\n/**\n * The stage is the root node in the PUXI scene graph. It does not provide a\n * sophisticated layout model; however, it will accept constraints defined by\n * `PUXI.FastLayoutOptions` or `PUXI.LayoutOptions` in its children.\n *\n * The stage is not a `PUXI.Widget` and its dimensions are always fixed.\n *\n * @memberof PUXI\n * @class\n * @extends PIXI.Container\n */\nexport class Stage extends PIXI.Container\n{\n __width: number;\n __height: number;\n minWidth: number;\n minHeight: number;\n initialized: boolean;\n widgetChildren: Widget[];\n\n stage: any;\n\n private _checkBoxGroupCtl: CheckBoxGroupController;\n private _focusCtl: FocusController;\n\n protected background: PIXI.Container;\n\n /**\n * @param {number} width - width of the stage\n * @param {number} height - height of the stage\n */\n constructor(width: number, height: number)\n {\n super();\n\n this.__width = width;\n this.__height = height;\n this.minWidth = 0;\n this.minHeight = 0;\n\n this.widgetChildren = [];\n this.interactive = true;\n this.stage = this;\n this.hitArea = new PIXI.Rectangle(0, 0, 0, 0);\n this.initialized = true;\n this.resize(width, height);\n\n this._checkBoxGroupCtl = new Stage.CHECK_BOX_GROUP_CONTROLLER(this);\n this._focusCtl = new Stage.FOCUS_CONTROLLER(this);\n }\n\n public measureAndLayout(): void\n {\n if (this.background)\n {\n this.background.width = this.width;\n this.background.height = this.height;\n }\n\n for (let i = 0, j = this.widgetChildren.length; i < j; i++)\n {\n const widget = this.widgetChildren[i];\n const lopt = (widget.layoutOptions || LayoutOptions.DEFAULT) as FastLayoutOptions;\n\n const widthMeasureMode = lopt.width < LayoutOptions.MAX_DIMEN\n ? MeasureMode.EXACTLY\n : MeasureMode.AT_MOST;\n const heightMeasureMode = lopt.height < LayoutOptions.MAX_DIMEN\n ? MeasureMode.EXACTLY\n : MeasureMode.AT_MOST;\n const loptWidth = (Math.abs(lopt.width) < 1) ? lopt.width * this.width : lopt.width;\n const loptHeight = (Math.abs(lopt.height) < 1) ? lopt.height * this.height : lopt.height;\n\n widget.measure(\n widthMeasureMode === MeasureMode.EXACTLY ? loptWidth : this.width,\n heightMeasureMode === MeasureMode.EXACTLY ? loptHeight : this.height,\n widthMeasureMode,\n heightMeasureMode);\n\n let x = lopt.x ? lopt.x : 0;\n let y = lopt.y ? lopt.y : 0;\n\n if (Math.abs(x) < 1)\n {\n x *= this.width;\n }\n if (Math.abs(y) < 1)\n {\n y *= this.height;\n }\n\n const anchor = lopt.anchor || FastLayoutOptions.DEFAULT_ANCHOR;\n const l = x - (anchor.x * widget.getMeasuredWidth());\n const t = y - (anchor.y * widget.getMeasuredHeight());\n\n widget.layout(l, t,\n l + widget.getMeasuredWidth(),\n t + widget.getMeasuredHeight(),\n true);\n }\n }\n\n getBackground(): PIXI.Container\n {\n return this.background;\n }\n\n setBackground(bg: PIXI.Container): void\n {\n if (this.background)\n {\n super.removeChild(this.background);\n }\n\n this.background = bg;\n\n if (bg)\n {\n super.addChildAt(bg, 0);\n\n this.background.width = this.width;\n this.background.height = this.height;\n }\n }\n\n private update(widgets: Widget[]): void\n {\n this.emit('preupdate', this);\n\n for (let i = 0, j = widgets.length; i < j; i++)\n {\n const widget = widgets[i];\n\n widget.stage = this;\n\n if (!widget.initialized)\n {\n widget.initialize();\n }\n\n this.update(widget.widgetChildren);\n widget.update();\n }\n\n this.emit('postupdate', this);\n }\n\n render(renderer: PIXI.Renderer): void\n {\n this.update(this.widgetChildren);\n super.render(renderer);\n }\n\n addChild(UIObject: Widget): void\n {\n const argumentLenght = arguments.length;\n\n if (argumentLenght > 1)\n {\n for (let i = 0; i < argumentLenght; i++)\n {\n this.addChild(arguments[i]);\n }\n }\n else\n {\n if (UIObject.parent)\n {\n UIObject.parent.removeChild(UIObject);\n }\n\n UIObject.parent = this;\n this.widgetChildren.push(UIObject);\n super.addChild(UIObject.insetContainer);\n // UIObject.updatesettings(true);\n }\n\n this.measureAndLayout();\n }\n\n removeChild(UIObject: Widget): void\n {\n const argumentLenght = arguments.length;\n\n if (argumentLenght > 1)\n {\n for (let i = 0; i < argumentLenght; i++)\n {\n this.removeChild(arguments[i]);\n }\n }\n else\n {\n super.removeChild(UIObject.insetContainer);\n\n const index = this.widgetChildren.indexOf(UIObject);\n\n if (index !== -1)\n {\n this.children.splice(index, 1);\n UIObject.parent = null;\n }\n }\n\n this.measureAndLayout();\n }\n\n resize(width?: number, height?: number): void\n {\n this.width = width;\n this.height = height;\n\n if (this.hitArea)\n {\n (this.hitArea as PIXI.Rectangle).width = this.__width;\n (this.hitArea as PIXI.Rectangle).height = this.__height;\n }\n\n this.measureAndLayout();\n }\n\n get width(): number\n {\n return this.__width;\n }\n set width(val: number)\n {\n if (!isNaN(val))\n {\n this.__width = val;\n this.resize();\n }\n }\n\n get height(): number\n {\n return this.__height;\n }\n set height(val: number)\n {\n if (!isNaN(val))\n {\n this.__height = val;\n this.resize();\n }\n }\n\n /**\n * The check box group controller for check boxes in this stage.\n *\n * @member {PUXI.CheckBoxGroupController}\n */\n get checkBoxGroupController(): CheckBoxGroupController\n {\n return this._checkBoxGroupCtl;\n }\n\n /**\n * The focus controller for widgets in this stage. You can use this to bring a\n * widget into focus.\n *\n * @member {PUXI.FocusController}\n */\n get focusController(): FocusController\n {\n return this._focusCtl;\n }\n\n /**\n * Use this to override which class is used for the check box group controller. It\n * should extend from `PUXI.CheckBoxGroupController`.\n *\n * @static\n */\n static CHECK_BOX_GROUP_CONTROLLER: typeof CheckBoxGroupController = CheckBoxGroupController;\n\n /**\n * Use this to override which class is used for the focus controller. It should\n * extend from `PUXI.FocusController`.\n *\n * @static\n */\n static FOCUS_CONTROLLER: typeof FocusController = FocusController;\n}\n","import * as PIXI from 'pixi.js';\n\nexport type StyleData = {\n [id: string]: any;\n backgroundColor?: string | number;\n background?: PIXI.Container;\n fontFamily?: string;\n fontSize?: number;\n paddingLeft?: number;\n paddingTop?: number;\n paddingRight?: number;\n paddingBottom?: number;\n padding?: number;\n\n// [':hover']?: StyleData;\n// [':focus']?: StyleData;\n};\n\n/**\n * A StyleSheet provides a mechansim to style widgets in a shared fashion.\n */\nexport class Style extends PIXI.utils.EventEmitter\n{\n public dirtyID: number;\n\n private data: StyleData;\n private extends: Style[];\n\n private computedData: StyleData;\n private computedDirty: boolean;\n\n constructor(data: StyleData = {})\n {\n super();\n\n this.dirtyID = 0;\n\n this.data = data;\n this.extends = [];\n\n this.computedData = data;\n this.computedDirty = false;\n }\n\n /**\n * @param prop\n */\n getProperty(prop: string): any\n {\n if (this.computedDirty)\n {\n this.compute();\n }\n\n return this.computedData[prop];\n }\n\n /**\n * @param props\n * @example\n * style.getProperties('paddingLeft', 'paddingRight')\n */\n getProperties(...props: string[]): Record\n {\n if (this.computedDirty)\n {\n this.compute();\n }\n\n const result = { };\n\n for (let i = 0, j = props.length; i < j; i++)\n {\n result[props[i]] = this.computedData[props[i]];\n }\n\n return result;\n }\n\n /**\n * @param prop\n * @param value\n */\n setProperty(prop: string, value: any): void\n {\n // Ensure computedData is up-to-date to ensure child styles get the correct information.\n if (this.computedDirty)\n {\n this.compute();\n }\n\n this.data[prop] = value;\n this.computedData[prop] = value;\n this.emit('setProperty', prop, value, this);\n\n ++this.dirtyID;\n }\n\n /**\n * Extend the given style so that properties not set on this style are derived from it. If multiple styles\n * are extended, the ones extended later have a higher priority.\n *\n * @param style\n */\n extend(style: Style): void\n {\n this.extends.push(style);\n this.computedDirty = true;\n\n ++this.dirtyID;\n\n // Recompute the set-property for this style\n style.on('setProperty', this.onParentSetProperty);\n }\n\n /**\n * Recomputes the style data\n */\n private compute(): void\n {\n const superStyles = this.extends;\n\n this.computedData = {};\n\n for (let i = 0, j = superStyles.length; i < j; i++)\n {\n Object.assign(this.computedData, superStyles[i].computedData);\n }\n\n this.computedDirty = false;\n }\n\n private onParentSetProperty = (propertyName: string, value: any, style: Style): void =>\n {\n const superStyles = this.extends;\n const superIndex = superStyles.indexOf(style);\n\n if (superIndex === -1)\n {\n throw new Error('onParentSetProperty triggered when by a non-super style.');\n }\n\n const thisValue = this.computedData[propertyName];\n\n for (let i = superIndex, j = superStyles.length; i < j; i++)\n {\n const superStyle = superStyles[i];\n\n if (superStyle.computedData[propertyName])\n {\n this.computedData[propertyName] = superStyle.computedData[propertyName];\n }\n }\n\n if (this.data[propertyName])\n {\n this.computedData[propertyName] = this.data[propertyName];\n }\n\n if (thisValue !== this.computedData[propertyName])\n {\n this.emit('setProperty', propertyName, this.computedData[propertyName], this);\n }\n };\n\n /**\n * @param data\n * @example\n * Style.create({\n * backgroundColor: 0xabcdef,\n * padding: 8\n * })\n */\n static create(data: StyleData): Style\n {\n return new Style(data);\n }\n}\n","import { Style, StyleData } from './Style';\n\nexport class StyleSheet\n{\n [id: string]: Style;\n\n static create(sheetData: { [id: string]: StyleData }): StyleSheet\n {\n const sheet = new StyleSheet();\n\n for (const key in sheetData)\n {\n sheet[key] = Style.create(sheetData[key]);\n }\n\n return sheet;\n }\n}\n","import { FocusableWidget, IFocusableOptions } from './FocusableWidget';\nimport { ScrollWidget } from './ScrollWidget';\nimport * as PIXI from 'pixi.js';\nimport { LayoutOptions } from './layout-options';\nimport { DragManager } from './event/DragManager';\n\n/**\n * @memberof PUXI\n * @interface\n */\ninterface ITextInputOptions extends IFocusableOptions\n{\n multiLine?: boolean;\n style?: PIXI.TextStyle;\n background?: PIXI.Container;\n selectedColor?: string | number[];\n selectedBackgroundColor?: string;\n width?: number;\n height?: number;\n padding?: number;\n paddingTop?: number;\n paddingBottom?: number;\n paddingLeft?: number;\n paddingRight?: number;\n tabIndex?: number;\n tabGroup?: number;\n maxLength?: number;\n caretWidth?: number;\n lineHeight?: number;\n value?: string;\n}\n\n// Dummy element created for mobile keyboards\nlet mockDOMInput: any;\n\nfunction initMockDOMInput(): void\n{\n // create temp input (for mobile keyboard)\n if (typeof mockDOMInput === 'undefined')\n {\n mockDOMInput = document.createElement('INPUT');\n mockDOMInput.setAttribute('type', 'text');\n mockDOMInput.setAttribute('id', '_pui_tempInput');\n mockDOMInput.setAttribute('style', 'position:fixed; left:-10px; top:-10px; width:0px; height: 0px;');\n document.body.appendChild(mockDOMInput);\n }\n}\n\n/**\n * An UI text object\n *\n * @class\n * @extends PIXI.UI.InputBase\n * @memberof PIXI.UI\n */\nexport class TextInput extends FocusableWidget\n{\n protected options: ITextInputOptions;\n\n protected _listeners: any;\n protected _dirtyText: boolean;\n protected _value: string;\n protected _lastValue: string;\n\n protected _lastWidth: number;\n protected _lastHeight: number;\n\n protected selection: PIXI.Graphics;\n protected textContainer: ScrollWidget;\n\n public maxLength: number;\n\n protected chars: any[];\n protected multiLine: boolean;\n protected color: string;\n protected selectedColor: string;\n protected selectedBackgroundColor: string;\n protected tempText: PIXI.Text;\n protected textHeight: number;\n protected lineHeight: number;\n\n protected caret: PIXI.Graphics;\n protected caretInterval: NodeJS.Timeout;\n protected si: number; // startIndex\n protected sie: boolean; // startIndexEnd\n protected ei: number; // endIndex\n protected eie: boolean; // endIndexEnd\n protected sp: PIXI.Point; // startposition\n protected ds: PIXI.Point; // dragStart\n protected de: PIXI.Point; // dragend\n protected rdd: boolean; // Reverse drag direction\n protected vrdd: boolean; // vertical Reverse drag direction\n\n protected selectionStart: number;\n protected selectionEnd: number;\n protected hasSelection: boolean;\n protected t: number; // timestamp\n protected cc: number; // click counter\n protected textLengthPX: number;\n protected textHeightPX: number;\n protected lineIndexMax: number;\n\n protected ctrlDown: boolean;\n protected shiftDown: boolean;\n protected shiftKey: number;\n protected ctrlKey: number;\n protected cmdKey: number;\n\n protected _sp: PIXI.Point;\n\n /**\n * @param {PUXI.ITextInputOptions} options\n * @param {string} options.value Text content\n * @param {boolean} [options.multiLine=false] Multiline input\n * @param options.style {PIXI.TextStyle} Style used for the Text\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\n * @param [options.selectedColor='#ffffff'] {String|Array} Fill color of selected text\n * @param [options.selectedBackgroundColor='#318cfa'] {String} BackgroundColor of selected text\n * @param [options.width=150] {Number} width of input\n * @param [options.height=20] {Number} height of input\n * @param [options.padding=3] {Number} input padding\n * @param [options.paddingTop=0] {Number} input padding\n * @param [options.paddingBottom=0] {Number} input padding\n * @param [options.paddingLeft=0] {Number} input padding\n * @param [options.paddingRight=0] {Number} input padding\n * @param [options.tabIndex=0] {Number} input tab index\n * @param [options.tabGroup=0] {Number|String} input tab group\n * @param [options.maxLength=0] {Number} 0 = unlimited\n * @param [options.caretWidth=1] {Number} width of the caret\n * @param [options.lineHeight=0] {Number} 0 = inherit from text\n */\n constructor(options: ITextInputOptions)\n {\n super(options);\n initMockDOMInput();\n\n this.options = options;\n\n this._listeners = {};\n this._dirtyText = true;\n this.maxLength = options.maxLength || 0;\n this._value = this._lastValue = options.value || '';\n\n if (this.maxLength)\n {\n this._value = this._value.slice(0, this.maxLength);\n }\n\n this.chars = [];\n this.multiLine = options.multiLine !== undefined ? options.multiLine : false;\n this.color = options.style && options.style.fill ? options.style.fill : '#000000';\n this.selectedColor = options.selectedColor || '#ffffff';\n this.selectedBackgroundColor = options.selectedBackgroundColor || '#318cfa';\n this.tempText = new PIXI.Text('1', options.style);\n this.textHeight = this.tempText.height;\n this.lineHeight = options.lineHeight || this.textHeight || this._height;\n\n this.tempText.destroy();\n\n // set cursor\n // this.container.cursor = \"text\";\n\n // selection graphics\n this.selection = new PIXI.Graphics();\n this.selection.visible = false;\n this.selection._startIndex = 0;\n this.selection._endIndex = 0;\n\n // caret graphics\n this.caret = new PIXI.Graphics();\n this.caret.visible = false;\n this.caret._index = 0;\n this.caret.lineStyle(\n options.caretWidth || 1,\n typeof(this.color) == \"number\" ? this.color : parseInt(this.color.slice(1), 16),\n 1\n );\n this.caret.moveTo(0, 0);\n this.caret.lineTo(0, this.textHeight);\n\n // var padding\n const paddingLeft = options.paddingLeft !== undefined ? options.paddingLeft : options.padding;\n const paddingRight = options.paddingRight !== undefined ? options.paddingRight : options.padding;\n const paddingBottom = options.paddingBottom !== undefined ? options.paddingBottom : options.padding;\n const paddingTop = options.paddingTop !== undefined ? options.paddingTop : options.padding;\n\n // insert text container (scrolling container)\n this.textContainer = new ScrollWidget({\n scrollX: !this.multiLine,\n scrollY: this.multiLine,\n dragScrolling: this.multiLine,\n expandMask: 2,\n softness: 0.2,\n overflowX: 40,\n overflowY: 40,\n }).setPadding(\n paddingLeft || 3,\n paddingTop || 3,\n paddingRight || 3,\n paddingBottom || 3,\n ).setLayoutOptions(\n new LayoutOptions(\n LayoutOptions.FILL_PARENT,\n LayoutOptions.FILL_PARENT,\n ),\n ) as ScrollWidget;\n\n this.addChild(this.textContainer);\n\n if (this.multiLine)\n {\n this._useNext = this._usePrev = false;\n this.textContainer.dragRestrictAxis = 'y';\n this.textContainer.dragThreshold = 5;\n this.dragRestrictAxis = 'x';\n this.dragThreshold = 5;\n }\n\n // selection Vars\n this.sp = new PIXI.Point(); // startposition\n this._sp = new PIXI.Point();\n this.ds = new PIXI.Point(); // dragStart\n this.de = new PIXI.Point(); // dragend\n this.rdd = false; // Reverse drag direction\n this.vrdd = false; // vertical Reverse drag direction\n this.selectionStart = -1;\n this.selectionEnd = -1;\n this.hasSelection = false;\n this.t = performance.now(); // timestamp\n this.cc = 0; // click counter\n this.textLengthPX = 0;\n this.textHeightPX = 0;\n this.lineIndexMax = 0;\n this.ctrlDown = false;\n this.shiftDown = false;\n this.shiftKey = 16;\n this.ctrlKey = 17;\n this.cmdKey = 91;\n\n this.setupDrag();\n }\n\n setupDrag(): void\n {\n const event = new DragManager(this);\n\n event.onPress = (e, mouseDown): void =>\n {\n if (mouseDown)\n {\n const timeSinceLast = performance.now() - this.t;\n\n this.t = performance.now();\n if (timeSinceLast < 250)\n {\n this.cc++;\n if (this.cc > 1)\n {\n this.select();\n }\n else\n {\n this.innerContainer.toLocal(this.sp, undefined, this.ds, true);\n this.updateClosestIndex(this.ds, true);\n const c = this.chars[this.si];\n\n if (c)\n {\n if (c.wordIndex != -1)\n {\n this.selectWord(c.wordIndex);\n }\n else\n {\n this.selectRange(this.si, this.si);\n }\n }\n }\n }\n else\n {\n this.cc = 0;\n this.sp.copyFrom(e.data.global);\n this.innerContainer.toLocal(this.sp, undefined, this.ds, true);\n\n if (this.chars.length)\n {\n this.updateClosestIndex(this.ds, true);\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n }\n }\n e.data.originalEvent.preventDefault();\n };\n\n event.onDragMove = (e, offset: PIXI.Point): void =>\n {\n if (!this.chars.length || !this._isFocused)\n {\n return;\n }\n\n this.de.x = this.sp.x + offset.x;\n this.de.y = this.sp.y + offset.y;\n this.innerContainer.toLocal(this.de, undefined, this.de, true);\n this.updateClosestIndex(this.de, false);\n\n if (this.si < this.ei)\n {\n this.selectRange(this.sie ? this.si + 1 : this.si, this.eie ? this.ei : this.ei - 1);\n this.caret._index = this.eie ? this.ei : this.ei - 1;\n }\n else if (this.si > this.ei)\n {\n this.selectRange(this.ei, this.sie ? this.si : this.si - 1);\n this.caret._index = this.ei;\n }\n else if (this.sie === this.eie)\n {\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n else\n {\n this.selectRange(this.si, this.ei);\n this.caret._index = this.ei;\n }\n\n this.caret._forward = this.si <= this.ei;\n this.caret._down = offset.y > 0;\n\n this.scrollToPosition(this.de);\n };\n }\n\n protected get innerContainer(): PIXI.Container\n {\n return this.textContainer.innerContainer.insetContainer;\n }\n\n update(): void\n {\n if (this.width !== this._lastWidth)\n {\n this._lastWidth = this._width;\n\n if (this.multiLine)\n {\n this.updateText();\n\n if (this.caret.visible)\n {\n this.setCaretIndex(this.caret._index);\n }\n if (this.hasSelection)\n {\n this.updateSelectionGraphics();\n }\n }\n }\n\n // update text\n if (this._dirtyText)\n {\n this.updateText();\n this._dirtyText = false;\n }\n }\n\n updateText(): void\n {\n this.textLengthPX = 0;\n this.textHeightPX = 0;\n this.lineIndexMax = 0;\n\n let lineIndex = 0;\n const length = this._value.length;\n let x = 0;\n let y = (this.lineHeight - this.textHeight) * 0.5;\n let i = 0;\n\n // destroy excess chars\n if (this.chars.length > length)\n {\n for (i = this.chars.length - 1; i >= length; i--)\n {\n this.innerContainer.removeChild(this.chars[i]);\n this.chars[i].destroy();\n }\n\n this.chars.splice(length, this.chars.length - length);\n }\n\n // update and add chars\n let whitespace = false;\n let newline = false;\n let wordIndex = 0;\n let lastWordIndex = -1;\n let wrap = false;\n\n for (i = 0; i < this._value.length; i++)\n {\n if (whitespace || newline)\n {\n lastWordIndex = i;\n wordIndex++;\n }\n\n let c = this._value[i];\n\n whitespace = c === ' ';\n newline = c === '\\n';\n\n if (newline)\n { // newline \"hack\". webgl render errors if \\n is passed to text\n c = '';\n }\n\n let charText = this.chars[i];\n\n if (!charText)\n {\n charText = new PIXI.Text(c, this.options.style);\n this.innerContainer.addChild(charText);\n this.chars.push(charText);\n }\n else\n {\n charText.text = c;\n }\n\n charText.scale.x = newline ? 0 : 1;\n charText.wrapped = wrap;\n wrap = false;\n\n if (newline || (this.multiLine && x + charText.width >= this._width - this.paddingLeft - this.paddingRight))\n {\n lineIndex++;\n x = 0;\n y += this.lineHeight;\n\n if (lastWordIndex !== -1 && !newline)\n {\n i = lastWordIndex - 1;\n lastWordIndex = -1;\n wrap = true;\n continue;\n }\n }\n\n charText.lineIndex = lineIndex;\n charText.x = x;\n charText.y = y;\n charText.wordIndex = whitespace || newline ? -1 : wordIndex;\n x += charText.width;\n\n if (x > this.textLengthPX)\n {\n this.textLengthPX = x;\n }\n if (y > this.textHeightPX)\n {\n this.textHeightPX = y;\n }\n }\n\n this.lineIndexMax = lineIndex;\n\n // put caret on top\n this.innerContainer.addChild(this.caret);\n\n // recache\n if (this.innerContainer.cacheAsBitmap)\n {\n this.innerContainer.cacheAsBitmap = false;\n this.innerContainer.cacheAsBitmap = true;\n }\n\n this.textContainer.update();\n }\n\n updateClosestIndex(point: PIXI.Point, start: boolean): void\n {\n let currentDistX = 99999;\n let currentIndex = -1;\n let atEnd = false;\n\n let closestLineIndex = 0;\n\n if (this.lineIndexMax > 0)\n {\n closestLineIndex = Math.max(0, Math.min(\n this.lineIndexMax,\n Math.floor(point.y / this.lineHeight)));\n }\n\n for (let i = 0; i < this.chars.length; i++)\n {\n const char = this.chars[i];\n\n if (char.lineIndex !== closestLineIndex)\n {\n continue;\n }\n\n const distX = Math.abs(point.x - (char.x + (char.width * 0.5)));\n\n if (distX < currentDistX)\n {\n currentDistX = distX;\n currentIndex = i;\n atEnd = point.x > char.x + (char.width * 0.5);\n }\n }\n\n if (start)\n {\n this.si = currentIndex;\n this.sie = atEnd;\n }\n else\n {\n this.ei = currentIndex;\n this.eie = atEnd;\n }\n }\n\n deleteSelection(): boolean\n {\n if (this.hasSelection)\n {\n this.value = this.value.slice(0, this.selectionStart) + this.value.slice(this.selectionEnd + 1);\n this.setCaretIndex(this.selectionStart);\n\n return true;\n }\n\n return false;\n }\n\n updateSelectionColors(): void\n {\n // Color charecters\n for (let i = 0; i < this.chars.length; i++)\n {\n if (i >= this.selectionStart && i <= this.selectionEnd)\n {\n this.chars[i].style.fill = this.selectedColor;\n }\n else\n {\n this.chars[i].style.fill = this.color;\n }\n }\n }\n\n scrollToPosition(pos: PIXI.Point): void\n {\n this._sp.x = pos.x;\n this._sp.y = pos.y;\n\n if (this.multiLine && this._sp.y >= this.lineHeight)\n {\n this._sp.y += this.lineHeight;\n }\n\n this.textContainer.focusPosition(this._sp);\n }\n\n resetScrollPosition(): void\n {\n this._sp.set(0, 0);\n this.textContainer.focusPosition(this._sp);\n }\n\n hideCaret(): void\n {\n this.caret.visible = false;\n clearInterval(this.caretInterval);\n }\n\n showCaret(): void\n {\n this.clearSelection();\n clearInterval(this.caretInterval);\n\n this.caret.alpha = 1;\n this.caret.visible = true;\n\n this.caretInterval = setInterval(() =>\n {\n this.caret.alpha = this.caret.alpha === 0 ? 1 : 0;\n }, 500);\n }\n\n insertTextAtCaret(c: string): void\n {\n if (!this.multiLine && c.indexOf('\\n') !== -1)\n {\n c = c.replace(/\\n/g, '');\n }\n\n if (this.hasSelection)\n {\n this.deleteSelection();\n }\n\n if (!this.maxLength || this.chars.length < this.maxLength)\n {\n if (this.caret._atEnd)\n {\n this.valueEvent += c;\n this.setCaretIndex(this.chars.length);\n }\n else\n {\n const index = Math.min(this.chars.length - 1, this.caret._index);\n\n this.valueEvent = this.value.slice(0, index) + c + this.value.slice(index);\n this.setCaretIndex(index + c.length);\n }\n }\n }\n\n public onKeyDown(e) {\n if (e.which === this.ctrlKey || e.which === this.cmdKey)\n {\n this.ctrlDown = true;\n }\n if (e.which === this.shiftKey)\n {\n this.shiftDown = true;\n }\n\n // FocusableWidget.onKeyDownImpl should've been called before this.\n\n if (e.defaultPrevented)\n {\n return;\n }\n\n if (e.which === 13)\n { // enter\n this.insertTextAtCaret('\\n');\n e.preventDefault();\n\n return;\n }\n\n if (this.ctrlDown)\n {\n // Handle Ctrl+ commands\n\n if (e.which === 65)\n {\n // Ctrl+A (Select all)\n this.select();\n e.preventDefault();\n\n return;\n }\n else if (e.which === 90)\n {\n // Ctrl+Z (Undo)\n if (this.value != this._lastValue)\n {\n this.valueEvent = this._lastValue;\n }\n\n this.setCaretIndex(this._lastValue.length + 1);\n e.preventDefault();\n\n return;\n }\n }\n if (e.which === 8)\n {\n // Handle backspace\n if (!this.deleteSelection())\n {\n if (this.caret._index > 0 || (this.chars.length === 1 && this.caret._atEnd))\n {\n if (this.caret._atEnd)\n {\n this.valueEvent = this.value.slice(0, this.chars.length - 1);\n this.setCaretIndex(this.caret._index);\n }\n else\n {\n this.valueEvent = this.value.slice(0, this.caret._index - 1) + this.value.slice(this.caret._index);\n this.setCaretIndex(this.caret._index - 1);\n }\n }\n }\n\n e.preventDefault();\n\n return;\n }\n\n if (e.which === 46)\n {\n // Delete selection\n if (!this.deleteSelection())\n {\n if (!this.caret._atEnd)\n {\n this.valueEvent = this.value.slice(0, this.caret._index) + this.value.slice(this.caret._index + 1);\n this.setCaretIndex(this.caret._index);\n }\n }\n\n e.preventDefault();\n\n return;\n }\n else if (e.which === 37 || e.which === 39)\n {\n this.rdd = e.which === 37;\n\n if (this.shiftDown)\n {\n if (this.hasSelection)\n {\n const caretAtStart = this.selectionStart === this.caret._index;\n\n if (caretAtStart)\n {\n if (this.selectionStart === this.selectionEnd && this.rdd === this.caret._forward)\n {\n this.setCaretIndex(this.caret._forward ? this.caret._index : this.caret._index + 1);\n }\n else\n {\n const startindex = this.rdd ? this.caret._index - 1 : this.caret._index + 1;\n\n this.selectRange(startindex, this.selectionEnd);\n this.caret._index = Math.min(this.chars.length - 1, Math.max(0, startindex));\n }\n }\n else\n {\n const endIndex = this.rdd ? this.caret._index - 1 : this.caret._index + 1;\n\n this.selectRange(this.selectionStart, endIndex);\n this.caret._index = Math.min(this.chars.length - 1, Math.max(0, endIndex));\n }\n }\n else\n {\n const _i = this.caret._atEnd ? this.caret._index + 1 : this.caret._index;\n const selectIndex = this.rdd ? _i - 1 : _i;\n\n this.selectRange(selectIndex, selectIndex);\n this.caret._index = selectIndex;\n this.caret._forward = !this.rdd;\n }\n }\n else\n {\n // Navigation\n // eslint-disable-next-line no-lonely-if\n if (this.hasSelection)\n {\n this.setCaretIndex(this.rdd ? this.selectionStart : this.selectionEnd + 1);\n }\n else\n {\n this.setCaretIndex(this.caret._index + (this.rdd ? this.caret._atEnd ? 0 : -1 : 1));\n }\n }\n\n e.preventDefault();\n\n return;\n }\n else if (this.multiLine && (e.which === 38 || e.which === 40))\n {\n this.vrdd = e.which === 38;\n\n if (this.shiftDown)\n {\n if (this.hasSelection)\n {\n this.de.y = Math.max(0, Math.min(\n this.textHeightPX,\n this.de.y + (this.vrdd ? -this.lineHeight : this.lineHeight)));\n this.updateClosestIndex(this.de, false);\n\n // console.log(si, ei);\n if (Math.abs(this.si - this.ei) <= 1)\n {\n // console.log(si, ei);\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n else\n {\n this.caret._index = (this.eie ? this.ei + 1 : this.ei) + (this.caret._down ? -1 : 0);\n this.selectRange(this.caret._down ? this.si : this.si - 1, this.caret._index);\n }\n }\n else\n {\n this.si = this.caret._index;\n this.sie = false;\n this.de.copyFrom(this.caret);\n this.de.y = Math.max(0, Math.min(\n this.textHeightPX,\n this.de.y + (this.vrdd ? -this.lineHeight : this.lineHeight)));\n this.updateClosestIndex(this.de, false);\n\n this.caret._index = (this.eie ? this.ei + 1 : ei) - (this.vrdd ? 0 : 1);\n this.selectRange(this.vrdd ? this.si - 1 : this.si, this.caret._index);\n this.caret._down = !this.vrdd;\n }\n }\n else if (this.hasSelection)\n {\n this.setCaretIndex(this.vrdd ? this.selectionStart : this.selectionEnd + 1);\n }\n else\n {\n this.ds.copyFrom(this.caret);\n this.ds.y += this.vrdd ? -this.lineHeight : this.lineHeight;\n this.ds.x += 1;\n this.updateClosestIndex(this.ds, true);\n this.setCaretIndex(this.sie ? this.si + 1 : this.si);\n }\n e.preventDefault();\n\n return;\n }\n };\n\n public keyUpEvent(e) {\n if (e.which === this.ctrlKey || e.which === this.cmdKey) this.ctrlDown = false;\n if (e.which === this.shiftKey) this.shiftDown = false;\n\n this.emit('keyup', e);\n\n if (e.defaultPrevented)\n { return; }\n };\n\n public copyEvent(e) {\n this.emit('copy', e);\n\n if (e.defaultPrevented)\n { return; }\n\n if (this.hasSelection)\n {\n const clipboardData = e.clipboardData || window.clipboardData;\n\n clipboardData.setData('Text', this.value.slice(this.selectionStart, this.selectionEnd + 1));\n }\n\n e.preventDefault();\n };\n\n public cutEvent(e) {\n this.emit('cut', e);\n\n if (e.defaultPrevented)\n { return; }\n\n if (this.hasSelection)\n {\n this.copyEvent(e);\n this.deleteSelection();\n }\n\n e.preventDefault();\n };\n\n public pasteEvent(e) {\n this.emit('paste', e);\n\n if (e.defaultPrevented)\n { return; }\n\n const clipboardData = e.clipboardData || window.clipboardData;\n\n this.insertTextAtCaret(clipboardData.getData('Text'));\n e.preventDefault();\n };\n\n public inputEvent(e) {\n const c = mockDOMInput.value;\n\n if (c.length)\n {\n this.insertTextAtCaret(c);\n mockDOMInput.value = '';\n }\n\n e.preventDefault();\n };\n\n public inputBlurEvent(e) {\n this.blur();\n };\n\n public focus = (): void =>\n {\n if (!this._isFocused)\n {\n super.focus();\n\n const l = `${this.contentContainer.worldTransform.tx}px`;\n const t = `${this.contentContainer.worldTransform.ty}px`;\n const h = `${this.contentContainer.height}px`;\n const w = `${this.contentContainer.width}px`;\n\n mockDOMInput.setAttribute('style', `position:fixed; left:${l}; top:${t}; height:${h}; width:${w};`);\n mockDOMInput.value = '';\n mockDOMInput.setAttribute('style', 'position:fixed; left:-10px; top:-10px; width:0px; height: 0px;');\n\n this.innerContainer.cacheAsBitmap = false;\n\n this._listeners.blur = e => this.inputBlurEvent(e);\n this._listeners.keydown = e => this.onKeyDown(e);\n this._listeners.keyup = e => this.keyUpEvent(e);\n this._listeners.paste = e => this.pasteEvent(e);\n this._listeners.copy = e => this.copyEvent(e);\n this._listeners.cut = e => this.cutEvent(e);\n this._listeners.input = e => this.inputEvent(e);\n\n mockDOMInput.addEventListener('blur', this._listeners.blur, false);\n document.addEventListener('keydown', this._listeners.keydown, false);\n document.addEventListener('keyup', this._listeners.keyup, false);\n document.addEventListener('paste', this._listeners.paste, false);\n document.addEventListener('copy', this._listeners.copy, false);\n document.addEventListener('cut', this._listeners.cut, false);\n mockDOMInput.addEventListener('input', this._listeners.input, false);\n\n setTimeout(() =>\n {\n mockDOMInput.focus();\n \n if (!this.caret.visible && !this.selection.visible && !this.multiLine)\n {\n this.setCaretIndex(this.chars.length);\n }\n }, 0);\n }\n };\n\n public blur = (): void =>\n {\n if (this._isFocused)\n {\n super.blur();\n this.ctrlDown = false;\n this.shiftDown = false;\n\n this.hideCaret();\n this.clearSelection();\n\n if (this.chars.length > 1)\n {\n this.innerContainer.cacheAsBitmap = true;\n }\n\n mockDOMInput.removeEventListener('blur', this._listeners.blur);\n document.removeEventListener('keydown', this._listeners.keydown);\n document.removeEventListener('keyup', this._listeners.keyup);\n document.removeEventListener('paste', this._listeners.paste);\n document.removeEventListener('copy', this._listeners.copy);\n document.removeEventListener('cut', this._listeners.cut);\n mockDOMInput.removeEventListener('input', this._listeners.input);\n mockDOMInput.blur();\n\n this._listeners = {}\n }\n\n if (!this.multiLine)\n {\n this.resetScrollPosition();\n }\n };\n\n setCaretIndex = (index: number): void =>\n {\n this.caret._atEnd = index >= this.chars.length;\n this.caret._index = Math.max(0, Math.min(this.chars.length - 1, index));\n\n if (this.chars.length && index > 0)\n {\n let i = Math.max(0, Math.min(index, this.chars.length - 1));\n let c = this.chars[i];\n\n if (c && c.wrapped)\n {\n this.caret.x = c.x;\n this.caret.y = c.y;\n }\n else\n {\n i = Math.max(0, Math.min(index - 1, this.chars.length - 1));\n c = this.chars[i];\n this.caret.x = this.chars[i].x + this.chars[i].width;\n this.caret.y = (this.chars[i].lineIndex * this.lineHeight) + (this.lineHeight - this.textHeight) * 0.5;\n }\n }\n else\n {\n this.caret.x = 0;\n this.caret.y = (this.lineHeight - this.textHeight) * 0.5;\n }\n\n this.scrollToPosition(this.caret);\n this.showCaret();\n };\n\n select = (): void =>\n {\n this.selectRange(0, this.chars.length - 1);\n };\n\n selectWord = (wordIndex: number): void =>\n {\n let startIndex = this.chars.length;\n let endIndex = 0;\n\n for (let i = 0; i < this.chars.length; i++)\n {\n if (this.chars[i].wordIndex !== wordIndex)\n {\n continue;\n }\n\n if (i < startIndex)\n {\n startIndex = i;\n }\n if (i > endIndex)\n {\n endIndex = i;\n }\n }\n\n this.selectRange(startIndex, endIndex);\n };\n\n selectRange = (startIndex: number, endIndex: number): void =>\n {\n if (startIndex > -1 && endIndex > -1)\n {\n const start = Math.min(startIndex, endIndex, this.chars.length - 1);\n const end = Math.min(Math.max(startIndex, endIndex), this.chars.length - 1);\n\n if (start !== this.selectionStart || end !== this.selectionEnd)\n {\n this.hasSelection = true;\n this.selection.visible = true;\n this.selectionStart = start;\n this.selectionEnd = end;\n\n this.hideCaret();\n this.updateSelectionGraphics();\n this.updateSelectionColors();\n }\n\n this.focus();\n }\n else\n {\n this.clearSelection();\n }\n };\n\n clearSelection = (): void =>\n {\n if (this.hasSelection)\n {\n // Remove color\n this.hasSelection = false;\n this.selection.visible = false;\n this.selectionStart = -1;\n this.selectionEnd = -1;\n this.updateSelectionColors();\n }\n };\n\n updateSelectionGraphics = () =>\n {\n const c1 = this.chars[this.selectionStart];\n\n if (c1 !== undefined)\n {\n let cx = c1.x;\n let cy = c1.y;\n let w = 0;\n const h = this.textHeight;\n let cl = c1.lineIndex;\n\n this.selection.clear();\n for (let i = this.selectionStart; i <= this.selectionEnd; i++)\n {\n const c = this.chars[i];\n\n if (c.lineIndex != cl)\n {\n this.drawSelectionRect(cx, cy, w, h);\n cx = c.x;\n cy = c.y;\n cl = c.lineIndex;\n w = 0;\n }\n\n w += c.width;\n }\n\n this.drawSelectionRect(cx, cy, w, h);\n this.innerContainer.addChildAt(this.selection, 0);\n }\n };\n\n drawSelectionRect = (x: number, y: number, w: number, h: number): void =>\n {\n this.selection.beginFill(`0x${this.selectedBackgroundColor.slice(1)}`, 1);\n this.selection.moveTo(x, y);\n this.selection.lineTo(x + w, y);\n this.selection.lineTo(x + w, y + h);\n this.selection.lineTo(x, y + h);\n this.selection.endFill();\n };\n\n get valueEvent(): string\n {\n return this._value;\n }\n set valueEvent(val: string)\n {\n if (this.maxLength)\n {\n val = val.slice(0, this.maxLength);\n }\n\n if (this._value != val)\n {\n this.value = val;\n this.emit('change');\n }\n }\n\n get value(): string\n {\n return this._value;\n }\n set value(val: string)\n {\n if (this.maxLength)\n {\n val = val.slice(0, this.maxLength);\n }\n\n if (this._value != val)\n {\n this._lastValue = this._value;\n this._value = val;\n this._dirtyText = true;\n this.update();\n }\n }\n\n get text(): string\n {\n return this.value;\n }\n set text(value: string)\n {\n this.value = value;\n }\n\n get mock() {\n return mockDOMInput\n }\n}\n\n/*\n * Features:\n * multiLine, shift selection, Mouse Selection, Cut, Copy, Paste, Delete, Backspace, Arrow navigation, tabIndex\n *\n * Methods:\n * blur()\n * focus()\n * select() - selects all text\n * selectRange(startIndex, endIndex)\n * clearSelection()\n * setCaretIndex(index) moves caret to index\n *\n *\n * Events:\n * \"change\"\n * \"blur\"\n * \"blur\"\n * \"focus\"\n * \"focusChanged\" param: [bool]focus\n * \"keyup\" param: Event\n * \"keydown\" param: Event\n * \"copy\" param: Event\n * \"paste\" param: Event\n * \"cut\" param: Event\n * \"keyup\" param: Event\n */\n","import * as PIXI from 'pixi.js';\nimport { Widget } from './Widget';\n\n/**\n * An UI sprite object\n *\n * @class\n * @extends PIXI.UI.UIBase\n * @memberof PIXI.UI\n * @param Texture {PIXI.Texture} The texture for the sprite\n * @param [Width=Texture.width] {number} Width of tilingsprite\n * @param [Height=Texture.height] {number} Height of tiling sprite\n */\nexport class TilingSprite extends Widget\n{\n protected sprite: PIXI.TilingSprite;\n\n constructor(t, width: number, height: number)\n {\n const sprite = new PIXI.TilingSprite(t);\n\n super(width || sprite.width, height || sprite.height);\n\n this.sprite = sprite;\n this.contentContainer.addChild(this.sprite);\n }\n\n /**\n * Updates the text\n *\n * @private\n */\n update(): void\n {\n if (this.tint !== null)\n { this.sprite.tint = this.tint; }\n\n if (this.blendMode !== null)\n { this.sprite.blendMode = this.blendMode; }\n\n this.sprite.width = this._width;\n this.sprite.height = this._height;\n }\n\n get tilePosition(): any\n {\n return this.sprite.tilePosition;\n }\n set tilingPosition(val: any)\n {\n this.sprite.tilePosition = val;\n }\n\n get tileScale(): number\n {\n return this.sprite.tileScale;\n }\n set tileScale(val: number)\n {\n this.sprite.tileScale = val;\n }\n}\n","import { Tween } from './Tween';\nimport * as PIXI from 'pixi.js';\n\n/**\n * This ticker is an event-emitter that can be used for running periodic tasks\n * in the rendering loop. It emits the `update` event every animation frame.\n *\n * @memberof PUXI\n * @class\n * @extends PIXI.utils.EventEmitter\n */\nexport class Ticker extends PIXI.utils.EventEmitter\n{\n private _disabled: boolean;\n private _now: number;\n\n DeltaTime: number;\n Time: number;\n Ms: number;\n\n constructor(autoStart: boolean)\n {\n super();\n\n this._disabled = true;\n this._now = 0;\n\n this.DeltaTime = 0;\n this.Time = performance.now();\n this.Ms = 0;\n\n if (autoStart)\n {\n this.disabled = false;\n }\n\n Ticker.shared = this;\n }\n\n get disabled(): boolean\n {\n return this._disabled;\n }\n set disabled(val: boolean)\n {\n if (!this._disabled)\n {\n this._disabled = true;\n }\n else\n {\n this._disabled = false;\n Ticker.shared = this;\n\n this.update(performance.now(), true);\n }\n }\n\n /**\n * Updates the text\n *\n * @private\n */\n update(time: number): void\n {\n Ticker.shared._now = time;\n Ticker.shared.Ms = Ticker.shared._now - Ticker.shared.Time;\n Ticker.shared.Time = Ticker.shared._now;\n Ticker.shared.DeltaTime = Ticker.shared.Ms * 0.001;\n Ticker.shared.emit('update', Ticker.shared.DeltaTime);\n Tween._update(Ticker.shared.DeltaTime);\n\n if (!Ticker.shared._disabled)\n {\n requestAnimationFrame(Ticker.shared.update);\n }\n }\n\n /**\n * The update event is fired periodically and it can be used to for a rendering\n * loop.\n * @event update\n * @param {DOMHighResTimeStamp} deltaTime - milliseconds since last update\n */\n\n static shared: Ticker;\n\n static on(event: any, fn: Function, context: any): void\n {\n Ticker.shared.on(event, fn, context);\n }\n\n static once(event: any, fn: Function, context: any): void\n {\n Ticker.shared.once(event, fn, context);\n }\n\n static removeListener(event: any, fn: Function): void\n {\n Ticker.shared.removeListener(event, fn);\n }\n}\n\nTicker.shared = new Ticker(true);\n"],"names":["PIXI.Point","PIXI.utils","PIXI.Container","PIXI.BLEND_MODES","PIXI.Graphics","PIXI.Rectangle","PIXI.Text","PIXI.TextStyle","PIXI.Sprite","PIXI.Texture","PIXI.BaseTexture","PIXI.Ticker","PIXI.TilingSprite"],"mappings":"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"},CAAC,CAAC;KAC1C;IAED,OAAO,cAAc,CAAC,KAAU,EAAE,EAAY;QAE1C,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;KAC3C;CACJ;AAED,MAAM,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/packages/core/src/TextInput.ts b/packages/core/src/TextInput.ts index 469ca34..5e9bb9d 100644 --- a/packages/core/src/TextInput.ts +++ b/packages/core/src/TextInput.ts @@ -752,7 +752,7 @@ export class TextInput extends FocusableWidget this.selectRange(selectIndex, selectIndex); this.caret._index = selectIndex; - this.caret._forward = !rdd; + this.caret._forward = !this.rdd; } } else diff --git a/packages/kit/dist/puxi-kit.js b/packages/kit/dist/puxi-kit.js index e5f4154..522ad9f 100644 --- a/packages/kit/dist/puxi-kit.js +++ b/packages/kit/dist/puxi-kit.js @@ -1,6 +1,6 @@ /*! * @puxi/kit - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * @puxi/kit is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license diff --git a/packages/kit/lib/puxi-kit.js b/packages/kit/lib/puxi-kit.js index 4696eb0..3efbc9e 100644 --- a/packages/kit/lib/puxi-kit.js +++ b/packages/kit/lib/puxi-kit.js @@ -1,6 +1,6 @@ /*! * @puxi/kit - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * @puxi/kit is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license diff --git a/packages/kit/lib/puxi-kit.mjs b/packages/kit/lib/puxi-kit.mjs index 2cfc974..7569318 100644 --- a/packages/kit/lib/puxi-kit.mjs +++ b/packages/kit/lib/puxi-kit.mjs @@ -1,6 +1,6 @@ /*! * @puxi/kit - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * @puxi/kit is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license diff --git a/packages/navigation/dist/puxi-navigation.js b/packages/navigation/dist/puxi-navigation.js index 82603c9..9966872 100644 --- a/packages/navigation/dist/puxi-navigation.js +++ b/packages/navigation/dist/puxi-navigation.js @@ -1,6 +1,6 @@ /*! * @puxi/navigation - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * @puxi/navigation is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license diff --git a/packages/navigation/lib/puxi-navigation.js b/packages/navigation/lib/puxi-navigation.js index 77eec1b..d01e596 100644 --- a/packages/navigation/lib/puxi-navigation.js +++ b/packages/navigation/lib/puxi-navigation.js @@ -1,6 +1,6 @@ /*! * @puxi/navigation - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * @puxi/navigation is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license diff --git a/packages/navigation/lib/puxi-navigation.mjs b/packages/navigation/lib/puxi-navigation.mjs index 1c6d9e2..8bb4daf 100644 --- a/packages/navigation/lib/puxi-navigation.mjs +++ b/packages/navigation/lib/puxi-navigation.mjs @@ -1,6 +1,6 @@ /*! * @puxi/navigation - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * @puxi/navigation is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license diff --git a/packages/tween/dist/puxi-tween.js b/packages/tween/dist/puxi-tween.js index 36edaf0..b3b1f7f 100644 --- a/packages/tween/dist/puxi-tween.js +++ b/packages/tween/dist/puxi-tween.js @@ -1,6 +1,6 @@ /*! * @puxi/tween - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * @puxi/tween is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license diff --git a/packages/tween/lib/puxi-tween.js b/packages/tween/lib/puxi-tween.js index 413120e..9b846c5 100644 --- a/packages/tween/lib/puxi-tween.js +++ b/packages/tween/lib/puxi-tween.js @@ -1,6 +1,6 @@ /*! * @puxi/tween - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * @puxi/tween is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license diff --git a/packages/tween/lib/puxi-tween.mjs b/packages/tween/lib/puxi-tween.mjs index a983760..c4e1f26 100644 --- a/packages/tween/lib/puxi-tween.mjs +++ b/packages/tween/lib/puxi-tween.mjs @@ -1,6 +1,6 @@ /*! * @puxi/tween - v1.0.1 - * Compiled Thu, 10 Dec 2020 11:56:53 UTC + * Compiled Thu, 10 Dec 2020 13:33:26 UTC * * @puxi/tween is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license