This repository has been archived by the owner on Feb 23, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 49
/
Copy pathpixi-ui.js.map
1 lines (1 loc) · 243 KB
/
pixi-ui.js.map
1
{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/emoji-regex/index.js","src/Button.js","src/CheckBox.js","src/Container.js","src/DynamicText/DynamicChar.js","src/DynamicText/DynamicText.js","src/DynamicText/DynamicTextStyle.js","src/Ease/Ease.js","src/Ease/EaseBase.js","src/Ease/ExponentialEase.js","src/Helpers.js","src/InputBase.js","src/Interaction/ClickEvent.js","src/Interaction/DragDropController.js","src/Interaction/DragEvent.js","src/Interaction/InputController.js","src/Interaction/Interaction.js","src/Interaction/MouseScrollEvent.js","src/ScrollBar.js","src/ScrollingContainer.js","src/SliceSprite.js","src/Slider.js","src/SortableList.js","src/Sprite.js","src/Stage.js","src/Text.js","src/TextInput.js","src/Ticker.js","src/TilingSprite.js","src/Tween.js","src/UI.js","src/UIBase.js","src/UISettings.js","src"],"names":[],"mappings":";;;;;;;AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACj/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC13BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1lCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi-ui.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","\"use strict\";\n\nmodule.exports = function () {\n\t// https://mathiasbynens.be/notes/es-unicode-property-escapes#emoji\n\treturn (/\\uD83D\\uDC69(?:\\u200D(?:(?:\\uD83D\\uDC69\\u200D)?\\uD83D\\uDC67|(?:\\uD83D\\uDC69\\u200D)?\\uD83D\\uDC66)|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC69\\u200D)?\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC69\\u200D)?\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]\\uFE0F|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC6F\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3C-\\uDD3E\\uDDD6-\\uDDDF])\\u200D[\\u2640\\u2642]\\uFE0F|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642])\\uFE0F|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2695\\u2696\\u2708]|\\uD83D\\uDC69\\u200D[\\u2695\\u2696\\u2708]|\\uD83D\\uDC68(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708]))\\uFE0F|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83D\\uDC69\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D)?\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D)?\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92])|(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]))|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDD1-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\u200D(?:(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D)?\\uD83D\\uDC67|(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D)?\\uD83D\\uDC66)|\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC69\\uDC6E\\uDC70-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3D\\uDD3E\\uDDD1-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])?|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDEEB\\uDEEC\\uDEF4-\\uDEF8]|\\uD83E[\\uDD10-\\uDD3A\\uDD3C-\\uDD3E\\uDD40-\\uDD45\\uDD47-\\uDD4C\\uDD50-\\uDD6B\\uDD80-\\uDD97\\uDDC0\\uDDD0-\\uDDE6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEF8]|\\uD83E[\\uDD10-\\uDD3A\\uDD3C-\\uDD3E\\uDD40-\\uDD45\\uDD47-\\uDD4C\\uDD50-\\uDD6B\\uDD80-\\uDD97\\uDDC0\\uDDD0-\\uDDE6])\\uFE0F/g\n\t);\n};","var InputBase = require('./InputBase'),\r\n ClickEvent = require('./Interaction/ClickEvent.js'),\r\n InputController = require('./Interaction/InputController');\r\n\r\n/**\r\n * An UI button object\r\n *\r\n * @class\r\n * @extends PIXI.UI.InputBase\r\n * @memberof PIXI.UI\r\n * @param [options.background}] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for Button\r\n * @param [options.text=null] {PIXI.UI.Text} optional text\r\n * @param [options.tabIndex=0] {Number} input tab index\r\n * @param [options.tabGroup=0] {Number|String} input tab group\r\n * @param [options.width=options.background.width] {Number|String} width\r\n * @param [options.height=options.background.height] {Number|String} height\r\n */\r\n\r\nfunction Button(options) {\r\n InputBase.call(this, options.width || (options.background ? options.background.width : 100), options.height || (options.background ? options.background.height : 20), options.tabIndex || 0, options.tabGroup || 0);\r\n this.background = options.background;\r\n\r\n if (this.background) {\r\n this.background.width = \"100%\";\r\n this.background.height = \"100%\";\r\n this.background.pivot = 0.5;\r\n this.background.verticalAlign = \"middle\";\r\n this.background.horizontalAlign = \"center\";\r\n this.addChild(this.background);\r\n\r\n }\r\n this.isHover = false;\r\n\r\n this.uiText = options.text;\r\n if (this.uiText) {\r\n this.uiText.verticalAlign = \"middle\";\r\n this.uiText.horizontalAlign = \"center\";\r\n this.addChild(this.uiText);\r\n }\r\n\r\n this.container.buttonMode = true;\r\n \r\n\r\n var self = this;\r\n var keyDownEvent = function (e) {\r\n if (e.which === 32) { //space\r\n self.click();\r\n }\r\n };\r\n\r\n var clickEvent = new ClickEvent(this);\r\n clickEvent.onHover = function (e, over) {\r\n this.isHover = over;\r\n self.emit(\"hover\", over);\r\n };\r\n\r\n\r\n clickEvent.onPress = function (e, isPressed) {\r\n if (isPressed) {\r\n self.focus();\r\n e.data.originalEvent.preventDefault();\r\n }\r\n self.emit(\"press\", isPressed);\r\n };\r\n\r\n clickEvent.onClick = function (e) {\r\n self.click();\r\n };\r\n\r\n this.click = function () {\r\n self.emit(\"click\");\r\n };\r\n\r\n\r\n this.focus = function () {\r\n if (!this._focused) {\r\n InputBase.prototype.focus.call(this);\r\n document.addEventListener(\"keydown\", keyDownEvent, false);\r\n }\r\n\r\n };\r\n\r\n this.blur = function () {\r\n if (this._focused) {\r\n InputBase.prototype.blur.call(this);\r\n document.removeEventListener(\"keydown\", keyDownEvent);\r\n }\r\n };\r\n\r\n this.initialize = function () {\r\n InputBase.prototype.initialize.call(this);\r\n this.container.interactiveChildren = false;\r\n\r\n var self = this;\r\n //lazy to make sure all children is initialized (trying to get the bedst hitArea possible)\r\n setTimeout(function () {\r\n var bounds = self.container.getLocalBounds();\r\n self.container.hitArea = new PIXI.Rectangle(bounds.x < 0 ? bounds.x : 0, bounds.y < 0 ? bounds.y : 0, Math.max(bounds.x + bounds.width + (bounds.x < 0 ? -bounds.x : 0), self._width), Math.max(bounds.y + bounds.height + (bounds.y < 0 ? -bounds.y : 0), self._height));\r\n }, 20);\r\n };\r\n\r\n}\r\n\r\nButton.prototype = Object.create(InputBase.prototype);\r\nButton.prototype.constructor = Button;\r\nmodule.exports = Button;\r\n\r\nObject.defineProperties(Button.prototype, {\r\n value: {\r\n get: function () {\r\n if (this.uiText) {\r\n return this.uiText.text;\r\n }\r\n return \"\";\r\n },\r\n set: function (val) {\r\n if (this.uiText) {\r\n this.uiText.text = val;\r\n }\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.uiText;\r\n },\r\n set: function (val) {\r\n this.value = val;\r\n }\r\n }\r\n});\r\n\r\n\r\n\r\n/*\r\n * Features:\r\n * Button, radio button (checkgroups)\r\n * \r\n * Methods:\r\n * blur()\r\n * focus()\r\n * \r\n * Properties:\r\n * checked: get/set Button checked\r\n * value: get/set Button value\r\n * \r\n * Events:\r\n * \"hover\" param: [bool]isHover (hover/leave)\r\n * \"press\" param: [bool]isPressed (pointerdown/pointerup)\r\n * \"click\"\r\n * \"blur\"\r\n * \"focus\"\r\n * \"focusChanged\" param: [bool]isFocussed\r\n * \r\n */","var InputBase = require('./InputBase'),\r\n ClickEvent = require('./Interaction/ClickEvent.js'),\r\n InputController = require('./Interaction/InputController');\r\n\r\n/**\r\n * An UI button object\r\n *\r\n * @class\r\n * @extends PIXI.UI.InputBase\r\n * @memberof PIXI.UI\r\n * @param [options.checked=false] {bool} is checked\r\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for CheckBox\r\n * @param options.checkmark {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as checkmark for CheckBox\r\n * @param [options.checkgroup=null] {String} CheckGroup name\r\n * @param options.value {String} mostly used along with checkgroup\r\n * @param [options.tabIndex=0] {Number} input tab index\r\n * @param [options.tabGroup=0] {Number|String} input tab group\r\n */\r\n\r\nfunction CheckBox(options) {\r\n InputBase.call(this, options.background.width, options.background.height, options.tabIndex || 0, options.tabGroup || 0);\r\n this._checked = options.checked !== undefined ? options.checked : false;\r\n this._value = options.value || \"\";\r\n this.checkGroup = options.checkgroup || null;\r\n\r\n this.background = options.background;\r\n this.background.width = \"100%\";\r\n this.background.height = \"100%\";\r\n this.addChild(this.background);\r\n\r\n this.checkmark = options.checkmark;\r\n if (this.checkmark) {\r\n this.checkmark.verticalAlign = \"middle\";\r\n this.checkmark.horizontalAlign = \"center\";\r\n if (!this._checked) {\r\n this.checkmark.alpha = 0;\r\n }\r\n this.addChild(this.checkmark);\r\n }\r\n\r\n\r\n\r\n\r\n this.container.buttonMode = true;\r\n\r\n if (this.checkGroup !== null)\r\n InputController.registrerCheckGroup(this);\r\n\r\n var self = this;\r\n var keyDownEvent = function (e) {\r\n if (e.which === 32) { //space\r\n self.click();\r\n }\r\n };\r\n\r\n var clickEvent = new ClickEvent(this);\r\n clickEvent.onHover = function (e, over) {\r\n self.emit(\"hover\", over);\r\n };\r\n\r\n\r\n clickEvent.onPress = function (e, isPressed) {\r\n if (isPressed) {\r\n self.focus();\r\n e.data.originalEvent.preventDefault();\r\n }\r\n self.emit(\"press\", isPressed);\r\n };\r\n\r\n clickEvent.onClick = function (e) {\r\n self.click();\r\n };\r\n\r\n this.change = function (val) {\r\n if (this.checkmark)\r\n this.checkmark.alpha = val ? 1 : 0;\r\n };\r\n\r\n this.click = function () {\r\n self.emit(\"click\");\r\n if (self.checkGroup !== null && self.checked)\r\n return;\r\n\r\n self.checked = !self.checked;\r\n this.emit(\"change\", self.checked);\r\n };\r\n\r\n\r\n this.focus = function () {\r\n\r\n if (!this._focused) {\r\n InputBase.prototype.focus.call(this);\r\n document.addEventListener(\"keydown\", keyDownEvent, false);\r\n }\r\n\r\n };\r\n\r\n this.blur = function () {\r\n\r\n if (this._focused) {\r\n InputBase.prototype.blur.call(this);\r\n document.removeEventListener(\"keydown\", keyDownEvent);\r\n }\r\n };\r\n}\r\n\r\nCheckBox.prototype = Object.create(InputBase.prototype);\r\nCheckBox.prototype.constructor = CheckBox;\r\nmodule.exports = CheckBox;\r\n\r\nObject.defineProperties(CheckBox.prototype, {\r\n checked: {\r\n get: function () {\r\n return this._checked;\r\n },\r\n set: function (val) {\r\n\r\n\r\n if (val !== this._checked) {\r\n\r\n if (this.checkGroup !== null && val)\r\n InputController.updateCheckGroupSelected(this);\r\n\r\n\r\n \r\n \r\n this._checked = val;\r\n this.change(val);\r\n\r\n }\r\n }\r\n },\r\n value: {\r\n get: function () {\r\n return this._value;\r\n },\r\n set: function (val) {\r\n this._value = val;\r\n if (this.checked)\r\n InputController.updateCheckGroupSelected(this);\r\n }\r\n },\r\n selectedValue: {\r\n get: function () {\r\n return InputController.getCheckGroupSelectedValue(this.checkGroup);\r\n },\r\n set: function (val) {\r\n InputController.setCheckGroupSelectedValue(this.checkGroup, val);\r\n }\r\n }\r\n});\r\n\r\n\r\n\r\n/*\r\n * Features:\r\n * checkbox, radio button (checkgroups)\r\n * \r\n * Methods:\r\n * blur()\r\n * focus()\r\n * change(checked) //only exposed to overwrite (if you dont want to hard toggle alpha of checkmark) \r\n * \r\n * Properties:\r\n * checked: get/set checkbox checked\r\n * value: get/set checkbox value\r\n * selectedValue: get/set selected value for checkgroup\r\n * \r\n * Events:\r\n * \"hover\" param: [bool]isHover (hover/leave)\r\n * \"press\" param: [bool]isPressed (pointerdown/pointerup)\r\n * \"click\"\r\n * \"blur\"\r\n * \"focus\"\r\n * \"focusChanged\" param: [bool]isFocussed\r\n * \"change\" param: [bool]isChecked\r\n * \r\n */","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI Container object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param width {Number} Width of the Container\r\n * @param height {Number} Height of the Container\r\n */\r\nfunction Container(width, height) {\r\n UIBase.call(this, width, height);\r\n this.container.hitArea = new PIXI.Rectangle(0, 0, 0, 0);\r\n}\r\n\r\n\r\nContainer.prototype = Object.create(UIBase.prototype);\r\nContainer.prototype.constructor = Container;\r\nmodule.exports = Container;\r\n\r\n\r\nContainer.prototype.update = function () {\r\n //if (this.container.interactive) {\r\n this.container.hitArea.width = this._width;\r\n this.container.hitArea.height = this._height;\r\n //}\r\n};\r\n\r\n","function DynamicChar() {\r\n //styledata (texture, orig width, orig height)\r\n this.style = null;\r\n\r\n //char data\r\n this.data = null;\r\n\r\n //is this char space?\r\n this.space = false;\r\n\r\n //is this char newline?\r\n this.newline = false;\r\n\r\n this.emoji = false;\r\n\r\n //charcode\r\n this.charcode = 0;\r\n\r\n //char string value\r\n this.value = \"\";\r\n\r\n //word index\r\n this.wordIndex = -1;\r\n\r\n //line index of char\r\n this.lineIndex = -1;\r\n\r\n}\r\n\r\nDynamicChar.prototype.constructor = DynamicChar;\r\nmodule.exports = DynamicChar;","var UIBase = require('../UIBase'),\r\n DynamicTextStyle = require('./DynamicTextStyle'),\r\n DynamicChar = require('./DynamicChar'),\r\n emojiRegex = require('emoji-regex'),\r\n atlas = null;\r\n\r\n\r\n/**\r\n* An dynamic text object with auto generated atlas\r\n*\r\n* @class\r\n* @extends PIXI.UI.UIBase\r\n* @memberof PIXI.UI\r\n* @param text {String} Text content\r\n* @param [width=0] {Number|String} width of textbox. 0 = autoWidth\r\n* @param [height=0] {Number|String} height of textbox. 0 = autoHeight\r\n* @param [allowTags=true] {boolean} Allow inline styling\r\n* @param [options=null] {DynamicTextStyle} Additional text settings\r\n*/\r\nfunction DynamicText(text, options) {\r\n options = options || {};\r\n\r\n UIBase.call(this, options.width || 0, options.height || 0);\r\n\r\n //create atlas\r\n if (atlas === null)\r\n atlas = new DynamicAtlas(1);\r\n\r\n var autoWidth = !options.width;\r\n var autoHeight = !options.height;\r\n\r\n //defaultstyle for this textobject\r\n var defaultStyle = this._style = new DynamicTextStyle(this);\r\n defaultStyle.merge(options.style);\r\n\r\n //collection of all processed char\r\n var chars = this.chars = [];\r\n var renderChars = [];\r\n var spriteCache = []; //(temp)\r\n var charContainer = new PIXI.Container();\r\n this.container.addChild(charContainer);\r\n\r\n //the input text\r\n this._inputText = text;\r\n\r\n //list of rendered sprites (temp)\r\n var sprites = [];\r\n\r\n //states\r\n var lastWidth = 0,\r\n lastHeight = 0;\r\n\r\n this.dirtyText = true;\r\n this.dirtyStyle = true;\r\n this.dirtyRender = true;\r\n\r\n\r\n //dictionary for line data\r\n var lineWidthData = [];\r\n var lineHeightData = [];\r\n var lineFontSizeData = [];\r\n var lineAlignmentData = [];\r\n var renderCount = 0;\r\n var charCount = 0;\r\n\r\n //ellipsis caches (not nessesary when no sprites)\r\n var lineEllipsisData = [];\r\n var lineHasEllipsis = [];\r\n\r\n //ROUGH TEMP RENDER (with sprites)\r\n this.render = function () {\r\n var yOffset = 0,\r\n xOffset = 0,\r\n currentLine = -1,\r\n i;\r\n\r\n if (spriteCache.length > renderCount) {\r\n for (i = renderCount; i < spriteCache.length; i++) {\r\n var removeSprite = spriteCache[i];\r\n if (removeSprite)\r\n removeSprite.visible = false;\r\n }\r\n }\r\n\r\n var char, lineWidth = 0, lineHeight = 0, maxLineWidth = 0;\r\n\r\n for (i = 0; i < renderCount; i++) {\r\n char = renderChars[i];\r\n\r\n //get line data\r\n if (currentLine !== char.lineIndex) {\r\n currentLine = char.lineIndex;\r\n lineWidth = lineWidthData[currentLine];\r\n lineHeight = lineHeightData[currentLine];\r\n yOffset += lineHeight;\r\n\r\n\r\n\r\n switch (lineAlignmentData[currentLine]) {\r\n case 'right': xOffset = this._width - lineWidth; break;\r\n case 'center': xOffset = (this._width - lineWidth) * 0.5; break;\r\n default: xOffset = 0;\r\n }\r\n\r\n\r\n maxLineWidth = Math.max(lineWidth, maxLineWidth);\r\n }\r\n\r\n //no reason to render a blank space or 0x0 letters (no texture created)\r\n if (!char.data.texture || char.space || char.newline) {\r\n if (spriteCache[i])\r\n spriteCache[i].visible = false;\r\n continue;\r\n }\r\n\r\n\r\n //add new sprite\r\n var tex = char.data.texture, sprite = spriteCache[i];\r\n\r\n\r\n\r\n if (!sprite) {\r\n sprite = spriteCache[i] = new PIXI.Sprite(tex);\r\n sprite.anchor.set(0.5);\r\n }\r\n else\r\n sprite.texture = tex;\r\n\r\n\r\n\r\n sprite.visible = true;\r\n sprite.x = char.x + xOffset + tex.width * 0.5;\r\n sprite.y = char.y + yOffset - tex.height * 0.5 - (lineHeight - lineFontSizeData[currentLine]);\r\n\r\n\r\n sprite.tint = char.emoji ? 0xffffff : hexToInt(char.style.tint, 0xffffff);\r\n sprite.rotation = float(char.style.rotation, 0);\r\n sprite.skew.x = float(char.style.skew, 0);\r\n\r\n if (!sprite.parent)\r\n charContainer.addChild(sprite);\r\n }\r\n\r\n if (autoWidth) this.width = maxLineWidth;\r\n if (autoHeight) this.height = yOffset;\r\n };\r\n\r\n //updates the renderChar array and position chars for render\r\n this.prepareForRender = function () {\r\n var pos = new PIXI.Point(),\r\n wordIndex = 0,\r\n lineHeight = 0,\r\n lineFontSize = 0,\r\n lineIndex = 0,\r\n lineAlignment = defaultStyle.align,\r\n lastSpaceIndex = -1,\r\n lastSpaceLineWidth = 0,\r\n textHeight = 0,\r\n forceNewline = false,\r\n style,\r\n renderIndex = 0,\r\n ellipsis = false,\r\n lineFull = false,\r\n i;\r\n\r\n\r\n\r\n\r\n for (i = 0; i < charCount; i++) {\r\n var char = chars[i], lastChar = chars[i - 1];\r\n style = char.style;\r\n\r\n\r\n //lineheight\r\n lineHeight = Math.max(lineHeight, defaultStyle.lineHeight || style.lineHeight || char.data.lineHeight);\r\n\r\n if (style.overflowY !== 'visible' && lineHeight + textHeight > this._height) {\r\n if (style.overflowY === 'hidden')\r\n break;\r\n\r\n }\r\n\r\n if (char.newline)\r\n lineFull = false;\r\n\r\n\r\n //set word index\r\n if (char.space || char.newline) wordIndex++;\r\n else char.wordIndex = wordIndex;\r\n\r\n //textheight\r\n lineFontSize = Math.max(lineFontSize, style.fontSize);\r\n\r\n //lineindex\r\n char.lineIndex = lineIndex;\r\n\r\n //lineAlignment\r\n if (style.align !== defaultStyle.align) lineAlignment = style.align;\r\n\r\n\r\n if (char.space) {\r\n lastSpaceIndex = i;\r\n lastSpaceLineWidth = pos.x;\r\n }\r\n\r\n\r\n var size = Math.round(char.data.width) + float(style.letterSpacing, 0);\r\n if (!autoWidth && !forceNewline && !char.newline && pos.x + size > this._width) {\r\n if (style.wrap) {\r\n if (char.space) {\r\n forceNewline = true;\r\n }\r\n else if (lastSpaceIndex !== -1) {\r\n renderIndex -= i - lastSpaceIndex;\r\n i = lastSpaceIndex - 1;\r\n lastSpaceIndex = -1;\r\n pos.x = lastSpaceLineWidth;\r\n forceNewline = true;\r\n continue;\r\n\r\n }\r\n else if (style.breakWords) {\r\n if (lastChar) {\r\n pos.x -= lastChar.style.letterSpacing;\r\n pos.x -= lastChar.data.width;\r\n }\r\n i -= 2;\r\n renderIndex--;\r\n forceNewline = true;\r\n continue;\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n if (style.overflowX == 'hidden' && !forceNewline) {\r\n lineFull = true;\r\n if (style.ellipsis && !ellipsis) {\r\n ellipsis = true;\r\n var ellipsisData = lineEllipsisData[lineIndex];\r\n if (!ellipsisData) ellipsisData = lineEllipsisData[lineIndex] = [new DynamicChar(), new DynamicChar(), new DynamicChar()];\r\n for (var d = 0; d < 3; d++) {\r\n var dot = ellipsisData[d];\r\n dot.value = \".\";\r\n dot.data = atlas.getCharObject(dot.value, style);\r\n dot.style = style;\r\n dot.x = pos.x + char.data.xOffset;\r\n dot.y = parseFloat(style.verticalAlign) + dot.data.yOffset;\r\n dot.lineIndex = lineIndex;\r\n pos.x += Math.round(dot.data.width) + float(style.letterSpacing, 0);\r\n renderChars[renderIndex] = dot;\r\n renderIndex++;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n //Update position and add to renderchars\r\n if (!lineFull) {\r\n //position\r\n char.x = pos.x + char.data.xOffset;\r\n char.y = parseFloat(style.verticalAlign) + char.data.yOffset;\r\n pos.x += size;\r\n renderChars[renderIndex] = char;\r\n renderIndex++;\r\n }\r\n\r\n\r\n\r\n //new line\r\n if (forceNewline || char.newline || i === charCount - 1) {\r\n if (lastChar) {\r\n pos.x -= lastChar.style.letterSpacing;\r\n }\r\n\r\n if (char.space) {\r\n pos.x -= char.data.width;\r\n pos.x -= float(style.letterSpacing, 0);\r\n }\r\n\r\n textHeight += lineHeight;\r\n lineHasEllipsis[lineIndex] = ellipsis;\r\n lineWidthData[lineIndex] = pos.x;\r\n lineHeightData[lineIndex] = lineHeight;\r\n lineFontSizeData[lineIndex] = lineFontSize;\r\n lineAlignmentData[lineIndex] = lineAlignment;\r\n\r\n\r\n //reset line vaules\r\n lineHeight = pos.x = lastSpaceLineWidth = lineFontSize = 0;\r\n lineAlignment = defaultStyle.align;\r\n lastSpaceIndex = -1;\r\n lineIndex++;\r\n forceNewline = lineFull = ellipsis = false;\r\n\r\n }\r\n\r\n }\r\n\r\n renderCount = renderIndex;\r\n };\r\n\r\n //phrases the input text and prepares the char array\r\n var closeTags = ['</i>', '</b>', '</font>', '</center>'];\r\n this.processInputText = function () {\r\n var styleTree = [defaultStyle],\r\n charIndex = 0,\r\n inputTextIndex = 0,\r\n inputArray = Array.from(this._inputText);\r\n\r\n for (var i = 0; i < inputArray.length; i++) {\r\n style = styleTree[styleTree.length - 1];\r\n var c = inputArray[i],\r\n charcode = c.charCodeAt(0),\r\n newline = false,\r\n space = false,\r\n emoji = false;\r\n\r\n\r\n //Extract Tags\r\n if (/(?:\\r\\n|\\r|\\n)/.test(c))\r\n newline = true;\r\n else if (/(\\s)/.test(c))\r\n space = true;\r\n else if (options.allowTags && c === \"<\") {\r\n var tag = this._inputText.substring(inputTextIndex);\r\n tag = tag.slice(0, tag.indexOf(\">\") + 1);\r\n var FoundTag = true;\r\n if (tag.length) {\r\n if (tag === \"<i>\") {\r\n style = style.clone();\r\n style.fontStyle = 'italic';\r\n styleTree.push(style);\r\n }\r\n else if (tag === \"<b>\") {\r\n style = style.clone();\r\n style.fontWeight = 'bold';\r\n styleTree.push(style);\r\n }\r\n else if (tag === \"<center>\") {\r\n style = style.clone();\r\n style.align = 'center';\r\n styleTree.push(style);\r\n }\r\n else if (closeTags.indexOf(tag) !== -1) {\r\n if (styleTree.length > 1) styleTree.splice(styleTree.length - 1, 1);\r\n }\r\n else if (tag.startsWith(\"<font \")) {\r\n var regex = /(\\w+)\\s*=\\s*(([\"'])(.*?)\\3|([^>\\s]*)(?=\\s|\\/>))(?=[^<]*>)/g,\r\n match = regex.exec(tag);\r\n\r\n if (match !== null) {\r\n style = style.clone();\r\n while (match !== null) {\r\n switch (match[1]) {\r\n case 'family': match[1] = 'fontFamily'; break;\r\n case 'size': match[1] = 'fontSize'; break;\r\n case 'weight': match[1] = 'fontWeight'; break;\r\n case 'style': match[1] = 'fontStyle'; break;\r\n case 'valign': match[1] = 'verticalAlign'; break;\r\n case 'spacing': match[1] = 'letterSpacing'; break;\r\n case 'color': match[1] = 'tint'; break;\r\n\r\n }\r\n style[match[1]] = match[4];\r\n match = regex.exec(tag);\r\n }\r\n styleTree.push(style);\r\n }\r\n }\r\n else {\r\n FoundTag = false;\r\n }\r\n\r\n if (FoundTag) {\r\n inputTextIndex += tag.length;\r\n i += tag.length - 1;\r\n continue;\r\n }\r\n }\r\n }\r\n else {\r\n //detect emoji\r\n var emojiMatch = emojiRegex().exec(c);\r\n if (emojiMatch !== null) {\r\n i--; c = '';\r\n while (emojiMatch !== null && c !== emojiMatch[0]) {\r\n i++;\r\n c = emojiMatch[0];\r\n emojiMatch = emojiRegex().exec(c + inputArray[i + 1]);\r\n }\r\n emoji = true;\r\n }\r\n }\r\n\r\n\r\n //Prepare DynamicChar object\r\n var char = chars[charIndex];\r\n if (!char) {\r\n char = new DynamicChar();\r\n chars[charIndex] = char;\r\n }\r\n char.style = style;\r\n\r\n\r\n if (emoji) {\r\n char.style = char.style.clone();\r\n char.style.fontFamily = DynamicText.settings.defaultEmojiFont;\r\n }\r\n\r\n char.data = atlas.getCharObject(c, char.style);\r\n char.value = c;\r\n char.space = space;\r\n char.newline = newline;\r\n char.emoji = emoji;\r\n\r\n charIndex++;\r\n inputTextIndex += c.length;\r\n }\r\n charCount = charIndex;\r\n };\r\n\r\n //PIXIUI update, lazy update (bad solution needs rewrite when converted to pixi plugin)\r\n this.lazyUpdate = null;\r\n var self = this;\r\n this.update = function () {\r\n if (self.lazyUpdate !== null) return;\r\n self.lazyUpdate = setTimeout(function () {\r\n \r\n //console.log(\"UPDATING TEXT\");\r\n var dirtySize = !autoWidth && (self._width != lastWidth || self._height != lastHeight || self.dirtyText);\r\n\r\n if (self.dirtyText || self.dirtyStyle) {\r\n self.dirtyText = self.dirtyStyle = false;\r\n self.dirtyRender = true; //force render after textchange\r\n self.processInputText();\r\n }\r\n\r\n if (dirtySize || self.dirtyRender) {\r\n self.dirtyRender = false;\r\n lastWidth = self._width;\r\n lastHeight = self.height;\r\n self.prepareForRender();\r\n self.render();\r\n }\r\n self.lazyUpdate = null;\r\n }, 0);\r\n\r\n };\r\n}\r\n\r\n\r\nDynamicText.prototype = Object.create(UIBase.prototype);\r\nDynamicText.prototype.constructor = DynamicText;\r\nmodule.exports = DynamicText;\r\nDynamicText.settings = {\r\n debugSpriteSheet: false,\r\n defaultEmojiFont: \"Segoe UI Emoji\" //force one font family for emojis so we dont rerender them multiple times\r\n};\r\n\r\nObject.defineProperties(DynamicText.prototype, {\r\n value: {\r\n get: function () {\r\n return this._inputText;\r\n },\r\n set: function (val) {\r\n if (val !== this._inputText) {\r\n this._inputText = val;\r\n this.dirtyText = true;\r\n this.update();\r\n //console.log(\"Updating Text to: \" + val);\r\n }\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n \r\n this.value = val;\r\n }\r\n },\r\n style: {\r\n get: function () {\r\n return this._style;\r\n },\r\n set: function (val) {\r\n //get a clean default style\r\n var style = new DynamicTextStyle(this);\r\n\r\n //merge it with new style\r\n style.merge(val);\r\n\r\n //merge it onto this default style\r\n this._style.merge(style);\r\n\r\n this.dirtyStyle = true;\r\n this.update();\r\n }\r\n }\r\n});\r\n\r\n\r\n\r\n\r\n\r\n\r\n//Atlas\r\nvar metricsCanvas = document.createElement(\"canvas\");\r\nvar metricsContext = metricsCanvas.getContext(\"2d\");\r\nmetricsCanvas.width = 100;\r\nmetricsCanvas.height = 100;\r\n\r\n\r\nvar DynamicAtlas = function (padding) {\r\n var res = devicePixelRatio || 1,\r\n canvas,\r\n context,\r\n objects,\r\n newObjects = [],\r\n baseTexture,\r\n lazyTimeout,\r\n rootNode,\r\n canvasList = [],\r\n atlasdim,\r\n startdim = 256,\r\n maxdim = 2048;\r\n\r\n\r\n var AtlasNode = function (w, h) {\r\n var children = this.children = [];\r\n this.rect = new PIXI.Rectangle(0, 0, w || 0, h || 0);\r\n this.data = null;\r\n\r\n this.insert = function (width, height, obj) {\r\n if (children.length > 0) {\r\n var newNode = children[0].insert(width, height, obj);\r\n if (newNode !== null) return newNode;\r\n\r\n return children[1].insert(width, height, obj);\r\n } else {\r\n if (this.data !== null) return null;\r\n if (width > this.rect.width || height > this.rect.height) return null;\r\n if (width == this.rect.width && height == this.rect.height) {\r\n this.data = obj;\r\n obj.frame.x = this.rect.x;\r\n obj.frame.y = this.rect.y;\r\n return this;\r\n }\r\n\r\n children.push(new AtlasNode());\r\n children.push(new AtlasNode());\r\n\r\n var dw = this.rect.width - width;\r\n var dh = this.rect.height - height;\r\n\r\n if (dw > dh) {\r\n children[0].rect = new PIXI.Rectangle(this.rect.x, this.rect.y, width, this.rect.height);\r\n children[1].rect = new PIXI.Rectangle(this.rect.x + width, this.rect.y, this.rect.width - width, this.rect.height);\r\n } else {\r\n children[0].rect = new PIXI.Rectangle(this.rect.x, this.rect.y, this.rect.width, height);\r\n children[1].rect = new PIXI.Rectangle(this.rect.x, this.rect.y + height, this.rect.width, this.rect.height - height);\r\n }\r\n\r\n return children[0].insert(width, height, obj);\r\n }\r\n };\r\n };\r\n\r\n var addCanvas = function () {\r\n //create new canvas\r\n canvas = document.createElement(\"canvas\");\r\n context = canvas.getContext(\"2d\");\r\n canvasList.push(canvas);\r\n\r\n //reset dimentions\r\n atlasdim = startdim;\r\n canvas.width = canvas.height = atlasdim;\r\n rootNode = new AtlasNode(atlasdim, atlasdim);\r\n\r\n //reset array with canvas objects and create new atlas\r\n objects = [];\r\n\r\n //set new basetexture\r\n baseTexture = PIXI.BaseTexture.fromCanvas(canvas);\r\n baseTexture.mipmap = false; //if not, pixi bug resizing POW2\r\n baseTexture.resolution = 1; //todo: support all resolutions\r\n baseTexture.update();\r\n\r\n //Debug Spritesheet\r\n if (DynamicText.settings.debugSpriteSheet) {\r\n canvas.className = \"DynamicText_SpriteSheet\";\r\n document.body.appendChild(canvas);\r\n }\r\n\r\n };\r\n\r\n this.fontFamilyCache = {};\r\n\r\n var drawObjects = function (arr, resized) {\r\n if (resized) baseTexture.update();\r\n for (var i = 0; i < arr.length; i++)\r\n drawObject(arr[i]);\r\n };\r\n\r\n var drawObject = function (obj) {\r\n context.drawImage(obj._cache, obj.frame.x, obj.frame.y);\r\n obj.texture.frame = obj.frame;\r\n obj.texture.update();\r\n };\r\n\r\n this.getCharObject = function (char, style) {\r\n var font = style.ctxFont();\r\n\r\n //create new cache for fontFamily\r\n var familyCache = this.fontFamilyCache[font];\r\n if (!familyCache) {\r\n familyCache = {};\r\n this.fontFamilyCache[font] = familyCache;\r\n }\r\n\r\n\r\n\r\n //get char data\r\n var key = style.ctxKey(char);\r\n var obj = familyCache[key];\r\n if (!obj) {\r\n //create char object\r\n var metrics = generateCharData(char, style);\r\n\r\n\r\n\r\n //temp resize if doesnt fit (not nesseary when we dont need to generate textures)\r\n if (metrics.rect) {\r\n if (canvas.width < metrics.rect.width || canvas.height < metrics.rect.height) {\r\n canvas.width = canvas.height = Math.max(metrics.rect.width, metrics.rect.height);\r\n baseTexture.update();\r\n }\r\n }\r\n\r\n\r\n //todo: cleanup when we know whats needed\r\n obj = {\r\n metrics: metrics,\r\n font: font,\r\n value: char,\r\n frame: metrics.rect,\r\n baseTexture: metrics.rect ? baseTexture : null,\r\n xOffset: metrics.bounds ? metrics.bounds.minx : 0,\r\n yOffset: metrics.descent || 0,\r\n width: metrics.width || 0,\r\n lineHeight: metrics.lineHeight || 0,\r\n _cache: metrics.canvas,\r\n texture: metrics.rect ? new PIXI.Texture(baseTexture, metrics.rect) : null //temp texture\r\n };\r\n\r\n //add to collections\r\n familyCache[key] = obj;\r\n\r\n\r\n //add to atlas if visible char\r\n if (metrics.rect) {\r\n newObjects.push(obj);\r\n\r\n\r\n\r\n if (lazyTimeout === undefined)\r\n lazyTimeout = setTimeout(function () {\r\n addNewObjects();\r\n lazyTimeout = undefined;\r\n }, 0);\r\n\r\n }\r\n }\r\n\r\n return obj;\r\n };\r\n\r\n var compareFunction = function (a, b) {\r\n if (a.frame.height < b.frame.height)\r\n return 1;\r\n\r\n if (a.frame.height > b.frame.height)\r\n return -1;\r\n\r\n\r\n if (a.frame.width < b.frame.width)\r\n return 1;\r\n\r\n if (a.frame.width > b.frame.width)\r\n return -1;\r\n\r\n\r\n return 0;\r\n };\r\n\r\n var addNewObjects = function () {\r\n newObjects.sort(compareFunction);\r\n var _resized = false;\r\n var _newcanvas = false;\r\n\r\n for (var i = 0; i < newObjects.length; i++) {\r\n var obj = newObjects[i];\r\n var node = rootNode.insert(obj.frame.width + padding, obj.frame.height + padding, obj);\r\n\r\n if (node !== null) {\r\n if (_newcanvas) obj.texture.baseTexture = baseTexture; //update basetexture if new canvas was created (temp)\r\n objects.push(obj);\r\n continue;\r\n }\r\n\r\n //step one back (so it will be added after resize/new canvas)\r\n i--;\r\n\r\n if (atlasdim < maxdim) {\r\n _resized = true;\r\n resizeCanvas(atlasdim * 2);\r\n continue;\r\n }\r\n\r\n //close current spritesheet and make a new one\r\n drawObjects(objects, _resized);\r\n addCanvas();\r\n _newcanvas = true;\r\n _resized = false;\r\n }\r\n\r\n drawObjects(_resized || _newcanvas ? objects : newObjects, _resized);\r\n newObjects = [];\r\n };\r\n\r\n var resizeCanvas = function (dim) {\r\n canvas.width = canvas.height = atlasdim = dim;\r\n\r\n rootNode = new AtlasNode(dim, dim);\r\n objects.sort(compareFunction);\r\n\r\n for (var i = 0; i < objects.length; i++) {\r\n var obj = objects[i];\r\n rootNode.insert(obj.frame.width + padding, obj.frame.height + padding, obj);\r\n }\r\n };\r\n\r\n var generateCharData = function (char, style) {\r\n\r\n var fontSize = Math.max(1, int(style.fontSize, 26)),\r\n lineHeight = fontSize * 1.25;\r\n\r\n\r\n //Start our returnobject\r\n var data = {\r\n fontSize: fontSize,\r\n lineHeight: lineHeight,\r\n width: 0\r\n };\r\n\r\n //Return if newline\r\n if (!char || /(?:\\r\\n|\\r|\\n)/.test(char))\r\n return data;\r\n\r\n //Ctx font string\r\n var font = style.ctxFont();\r\n metricsContext.font = font;\r\n\r\n //Get char width\r\n data.width = Math.round(metricsContext.measureText(char).width);\r\n\r\n //Return if char = space\r\n if (/(\\s)/.test(char)) return data;\r\n\r\n //set canvas size (with padding so we can messure)\r\n var paddingY = Math.round(fontSize * 0.7), paddingX = Math.max(5, Math.round(fontSize * 0.7));\r\n metricsCanvas.width = Math.ceil(data.width) + paddingX * 2;\r\n metricsCanvas.height = 1.5 * fontSize;\r\n var w = metricsCanvas.width, h = metricsCanvas.height, baseline = (h / 2) + (paddingY * 0.5);\r\n\r\n //set font again after resize\r\n metricsContext.font = font;\r\n\r\n //make sure canvas is clean\r\n metricsContext.clearRect(0, 0, w, h);\r\n\r\n //save clean state with font\r\n metricsContext.save();\r\n\r\n //convert shadow string to shadow data\r\n var shadowData = function (str) {\r\n var data = str.trim().split(' ');\r\n return {\r\n color: string(data[0], \"#000000\"),\r\n alpha: float(data[1], 0.5),\r\n xOffset: float(data[2], 3),\r\n yOffset: float(data[3], 3),\r\n blur: float(data[4], 5)\r\n };\r\n };\r\n\r\n //convert fill string to fill data\r\n var fillData = function (str) {\r\n var data = str.trim().split(' ');\r\n var c = string(data[0], \"#FFFFFF\");\r\n var a = float(data[1], 1);\r\n return {\r\n color: c,\r\n alpha: a,\r\n position: float(data[2], -1),\r\n rgba: hexToRgba(c, a)\r\n };\r\n };\r\n\r\n //create fill style from fill string\r\n var getFillStyle = function (str) {\r\n var fills = str.split(',').filter(function (s) { return s !== ''; }), i;\r\n\r\n //convert to fill data\r\n for (i = 0; i < fills.length; i++) fills[i] = fillData(fills[i]);\r\n\r\n switch (fills.length) {\r\n case 0: return \"white\";\r\n case 1: return fills[0].rgba ? fills[0].rgba : fills[0].color || \"#FFFFFF\";\r\n default:\r\n //make gradient\r\n try {\r\n var gradEnd = baseline + lineHeight - fontSize,\r\n gradient = metricsContext.createLinearGradient(0, gradEnd - fontSize, 0, gradEnd);\r\n\r\n for (i = 0; i < fills.length; i++)\r\n gradient.addColorStop(fills[i].position !== -1 ? fills[i].position : i / (fills.length - 1), fills[i].rgba || fills[i].color);\r\n\r\n return gradient;\r\n }\r\n catch (e) {\r\n return \"#FFFFFF\";\r\n }\r\n }\r\n };\r\n\r\n\r\n //function to draw shadows\r\n var drawShadows = function (shadowString, stroke) {\r\n var shadows = shadowString.trim().split(',').filter(function (s) { return s !== ''; });\r\n if (shadows.length) {\r\n for (var i = 0; i < shadows.length; i++) {\r\n var s = shadowData(shadows[i]);\r\n metricsContext.globalAlpha = s.alpha;\r\n metricsContext.shadowColor = s.color;\r\n metricsContext.shadowOffsetX = s.xOffset + w;\r\n metricsContext.shadowOffsetY = s.yOffset;\r\n metricsContext.shadowBlur = s.blur;\r\n\r\n if (stroke) {\r\n metricsContext.lineWidth = style.stroke;\r\n metricsContext.strokeText(char, paddingX - w, baseline);\r\n }\r\n else metricsContext.fillText(char, paddingX - w, baseline);\r\n }\r\n metricsContext.restore();\r\n }\r\n };\r\n\r\n //draw text shadows\r\n if (style.shadow.length)\r\n drawShadows(style.shadow, false);\r\n\r\n //draw stroke shadows\r\n if (style.stroke && style.strokeShadow.length) {\r\n drawShadows(style.strokeShadow, true);\r\n }\r\n\r\n //draw text\r\n metricsContext.fillStyle = getFillStyle(string(style.fill, \"#000000\"));\r\n metricsContext.fillText(char, paddingX, baseline);\r\n metricsContext.restore();\r\n\r\n //draw stroke\r\n if (style.stroke) {\r\n metricsContext.strokeStyle = getFillStyle(string(style.strokeFill, \"#000000\"));\r\n metricsContext.lineWidth = style.stroke;\r\n metricsContext.strokeText(char, paddingX, baseline);\r\n metricsContext.restore();\r\n }\r\n\r\n\r\n //begin messuring\r\n var pixelData = metricsContext.getImageData(0, 0, w, h).data;\r\n\r\n var i = 3,\r\n line = w * 4,\r\n len = pixelData.length;\r\n\r\n\r\n\r\n //scanline on alpha\r\n while (i < len && !pixelData[i]) { i += 4; }\r\n var ascent = (i / line) | 0;\r\n\r\n\r\n if (i < len) {\r\n //rev scanline on alpha\r\n i = len - 1;\r\n while (i > 0 && !pixelData[i]) { i -= 4; }\r\n var descent = (i / line) | 0;\r\n\r\n\r\n //left to right scanline on alpha\r\n for (i = 3; i < len && !pixelData[i];) {\r\n i += line;\r\n if (i >= len) { i = (i - len) + 4; }\r\n }\r\n var minx = ((i % line) / 4) | 0;\r\n\r\n //right to left scanline on alpha\r\n var step = 1;\r\n for (i = len - 1; i >= 0 && !pixelData[i];) {\r\n i -= line;\r\n if (i < 0) { i = (len - 1) - (step++) * 4; }\r\n }\r\n var maxx = ((i % line) / 4) + 1 | 0;\r\n\r\n\r\n // set font metrics\r\n data.ascent = Math.round(baseline - ascent);\r\n data.descent = Math.round(descent - baseline);\r\n data.height = 1 + Math.round(descent - ascent);\r\n data.bounds = {\r\n minx: minx - paddingX,\r\n maxx: maxx - paddingX,\r\n miny: 0,\r\n maxy: descent - ascent\r\n };\r\n data.rect = {\r\n x: data.bounds.minx,\r\n y: -data.ascent - 2,\r\n width: data.bounds.maxx - data.bounds.minx + 2,\r\n height: data.ascent + data.descent + 4\r\n };\r\n\r\n\r\n //cache (for fast rearrange later)\r\n data.canvas = document.createElement(\"canvas\");\r\n data.canvas.width = data.rect.width;\r\n data.canvas.height = data.rect.height;\r\n var c = data.canvas.getContext(\"2d\");\r\n c.drawImage(metricsCanvas, -paddingX - data.rect.x, -baseline - data.rect.y);\r\n\r\n //reset rect position\r\n data.rect.x = data.rect.y = 0;\r\n\r\n\r\n }\r\n return data;\r\n };\r\n\r\n addCanvas();\r\n};\r\n\r\n\r\n\r\n//helper function for float or default\r\nfunction float(val, def) {\r\n if (isNaN(val)) return def;\r\n return parseFloat(val);\r\n}\r\n\r\n//helper function for int or default\r\nfunction int(val, def) {\r\n if (isNaN(val)) return def;\r\n return parseInt(val);\r\n}\r\n\r\n//helper function for string or default\r\nfunction string(val, def) {\r\n if (typeof val === 'string' && val.length) return val;\r\n return def;\r\n}\r\n\r\n//helper function to convert string hex to int or default\r\nfunction hexToInt(str, def) {\r\n if (typeof str === 'number')\r\n return str;\r\n\r\n var result = parseInt(str.replace('#', '0x'));\r\n\r\n if (isNaN(result)) return def;\r\n return result;\r\n}\r\n\r\n//helper function to convert hex to rgba\r\nfunction hexToRgba(hex, alpha) {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n alpha = float(alpha, 1);\r\n return result ? \"rgba(\" + parseInt(result[1], 16) + \",\" + parseInt(result[2], 16) + \",\" + parseInt(result[3], 16) + \",\" + alpha + \")\" : false;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","function DynamicTextStyle(parent) {\r\n this.respectDirty = true;\r\n this._parent = parent || null;\r\n this._scale = 1;\r\n this._align = 'left';\r\n this._fontFamily = 'Arial';\r\n this._fontSize = 26;\r\n this._fontWeight = 'normal';\r\n this._fontStyle = 'normal';\r\n this._letterSpacing = 0;\r\n this._lineHeight = 0;\r\n this._verticalAlign = 0;\r\n this._rotation = 0;\r\n this._skew = 0;\r\n this._tint = \"#FFFFFF\";\r\n this._fill = '#FFFFFF';\r\n this._shadow = '';\r\n this._stroke = 0;\r\n this._strokeFill = '';\r\n this._strokeShadow = '';\r\n this._wrap = true;\r\n this._breakWords = false;\r\n this._overflowX = 'visible'; //visible|hidden\r\n this._overflowY = 'visible'; //visible|hidden\r\n this._ellipsis = false;\r\n\r\n\r\n var _cachedEllipsisSize = null;\r\n this.ellipsisSize = function (atlas) {\r\n if (!this.ellipsis) return 0;\r\n if (_cachedEllipsisSize === null)\r\n _cachedEllipsisSize = (atlas.getCharObject(\".\", this).width + this.letterSpacing) * 3;\r\n return _cachedEllipsisSize;\r\n };\r\n}\r\n\r\n\r\nDynamicTextStyle.prototype.clone = function () {\r\n var style = new DynamicTextStyle();\r\n style.merge(this);\r\n return style;\r\n};\r\n\r\nDynamicTextStyle.prototype.merge = function (style) {\r\n\r\n if (typeof style === 'object') {\r\n this.respectDirty = false;\r\n for (var param in style) {\r\n var val = style[param];\r\n if (typeof val === 'function' || param === 'respectDirty' || param === '_parent') continue;\r\n this[param] = style[param];\r\n }\r\n this.respectDirty = true;\r\n this._dirty = true;\r\n }\r\n};\r\n\r\nDynamicTextStyle.prototype.ctxKey = function (char) {\r\n return [char, this.fill, this.shadow, this.stroke, this.strokeFill, this.strokeShadow].join('|');\r\n};\r\n\r\nDynamicTextStyle.prototype.ctxFont = function () {\r\n var fontSize = Math.min(200, Math.max(1, this.fontSize || 26)) + \"px \";\r\n var fontWeight = this.fontWeight === \"bold\" ? this.fontWeight + \" \" : \"\";\r\n var fontStyle = this.fontStyle === \"italic\" || this.fontStyle === \"oblique\" ? this.fontStyle + \" \" : \"\";\r\n return fontWeight + fontStyle + fontSize + this.fontFamily;\r\n};\r\n\r\nDynamicTextStyle.prototype.constructor = DynamicTextStyle;\r\nmodule.exports = DynamicTextStyle;\r\n\r\nObject.defineProperties(DynamicTextStyle.prototype, {\r\n _dirty: {\r\n set: function (val) {\r\n if (this.respectDirty) {\r\n if (this._parent !== null) {\r\n this._parent.dirtyStyle = val;\r\n this._parent.update();\r\n }\r\n }\r\n }\r\n },\r\n scale: {\r\n get: function () {\r\n return this._scale;\r\n },\r\n set: function (val) {\r\n if (val !== this._scale) {\r\n this._scale = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n align: {\r\n get: function () {\r\n return this._align;\r\n },\r\n set: function (val) {\r\n if (val !== this._align) {\r\n this._align = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontFamily: {\r\n get: function () {\r\n return this._fontFamily;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontFamily) {\r\n this._fontFamily = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontSize: {\r\n get: function () {\r\n return this._fontSize;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontSize) {\r\n this._fontSize = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontWeight: {\r\n get: function () {\r\n return this._fontWeight;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontWeight) {\r\n this._fontWeight = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontStyle: {\r\n get: function () {\r\n return this._fontStyle;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontStyle) {\r\n this._fontStyle = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n letterSpacing: {\r\n get: function () {\r\n return this._letterSpacing;\r\n },\r\n set: function (val) {\r\n if (val !== this._letterSpacing) {\r\n this._letterSpacing = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n lineHeight: {\r\n get: function () {\r\n return this._lineHeight;\r\n },\r\n set: function (val) {\r\n if (val !== this._lineHeight) {\r\n this._lineHeight = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n verticalAlign: {\r\n get: function () {\r\n return this._verticalAlign;\r\n },\r\n set: function (val) {\r\n if (val !== this._verticalAlign) {\r\n this._verticalAlign = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n rotation: {\r\n get: function () {\r\n return this._rotation;\r\n },\r\n set: function (val) {\r\n if (val !== this._rotation) {\r\n this._rotation = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n skew: {\r\n get: function () {\r\n return this._skew;\r\n },\r\n set: function (val) {\r\n if (val !== this._skew) {\r\n this._skew = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n tint: {\r\n get: function () {\r\n return this._tint;\r\n },\r\n set: function (val) {\r\n if (val !== this._tint) {\r\n this._tint = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fill: {\r\n get: function () {\r\n return this._fill;\r\n },\r\n set: function (val) {\r\n if (val !== this._fill) {\r\n this._fill = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n shadow: {\r\n get: function () {\r\n return this._shadow;\r\n },\r\n set: function (val) {\r\n if (val !== this._shadow) {\r\n this._shadow = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n stroke: {\r\n get: function () {\r\n return this._stroke;\r\n },\r\n set: function (val) {\r\n if (val !== this._stroke) {\r\n this._stroke = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n strokeFill: {\r\n get: function () {\r\n return this._strokeFill;\r\n },\r\n set: function (val) {\r\n if (val !== this._strokeFill) {\r\n this._strokeFill = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n strokeShadow: {\r\n get: function () {\r\n return this._strokeShadow;\r\n },\r\n set: function (val) {\r\n if (val !== this._strokeShadow) {\r\n this._strokeShadow = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n wrap: {\r\n get: function () {\r\n return this._wrap;\r\n },\r\n set: function (val) {\r\n if (val !== this._wrap) {\r\n this._wrap = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n breakWords: {\r\n get: function () {\r\n return this._breakWords;\r\n },\r\n set: function (val) {\r\n if (val !== this._breakWords) {\r\n this._breakWords = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n overflowX: {\r\n get: function () {\r\n return this._overflowX;\r\n },\r\n set: function (val) {\r\n if (val !== this._overflowX) {\r\n this._overflowX = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n overflowY: {\r\n get: function () {\r\n return this._overflowY;\r\n },\r\n set: function (val) {\r\n if (val !== this._overflowY) {\r\n this._overflowY = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n ellipsis: {\r\n get: function () {\r\n return this._ellipsis;\r\n },\r\n set: function (val) {\r\n if (val !== this._ellipsis) {\r\n this._ellipsis = val;\r\n this._dirty = true;\r\n }\r\n }\r\n }\r\n});","var Ease = {},\r\n EaseBase = require('./EaseBase'),\r\n ExponentialEase = require('./ExponentialEase'),\r\n HALF_PI = Math.PI * 0.5;\r\n\r\nfunction create(fn) {\r\n var e = Object.create(EaseBase.prototype);\r\n e.getPosition = fn;\r\n return e;\r\n}\r\n\r\n\r\n//Liear\r\nEase.Linear = new EaseBase();\r\n\r\n//Exponetial Eases\r\nfunction wrapEase(easeInFunction, easeOutFunction, easeInOutFunction) {\r\n return {\r\n easeIn: easeInFunction,\r\n easeOut: easeOutFunction,\r\n easeInOut: easeInOutFunction\r\n };\r\n}\r\n\r\nEase.Power0 = {\r\n \"easeNone\" : Ease.Linear,\r\n};\r\n\r\nEase.Power1 = Ease.Quad = wrapEase(\r\n new ExponentialEase(1, 1, 0),\r\n new ExponentialEase(1, 0, 1),\r\n new ExponentialEase(1, 1, 1));\r\n\r\nEase.Power2 = Ease.Cubic = wrapEase(\r\n new ExponentialEase(2, 1, 0),\r\n new ExponentialEase(2, 0, 1),\r\n new ExponentialEase(2, 1, 1));\r\n\r\nEase.Power3 = Ease.Quart = wrapEase(\r\n new ExponentialEase(3, 1, 0),\r\n new ExponentialEase(3, 0, 1),\r\n new ExponentialEase(3, 1, 1));\r\n\r\nEase.Power4 = Ease.Quint = wrapEase(\r\n new ExponentialEase(4, 1, 0),\r\n new ExponentialEase(4, 0, 1),\r\n new ExponentialEase(4, 1, 1));\r\n\r\n\r\n//Bounce\r\nEase.Bounce = {\r\n \"BounceIn\": create(function (p) {\r\n if ((p = 1 - p) < 1 / 2.75) {\r\n return 1 - (7.5625 * p * p);\r\n } else if (p < 2 / 2.75) {\r\n return 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\r\n } else if (p < 2.5 / 2.75) {\r\n return 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\r\n }\r\n return 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\r\n }),\r\n \"BounceOut\": create(function (p) {\r\n if (p < 1 / 2.75) {\r\n return 7.5625 * p * p;\r\n } else if (p < 2 / 2.75) {\r\n return 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\r\n } else if (p < 2.5 / 2.75) {\r\n return 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\r\n }\r\n return 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\r\n }),\r\n \"BounceInOut\": create(function (p) {\r\n var invert = (p < 0.5);\r\n if (invert) {\r\n p = 1 - (p * 2);\r\n } else {\r\n p = (p * 2) - 1;\r\n }\r\n if (p < 1 / 2.75) {\r\n p = 7.5625 * p * p;\r\n } else if (p < 2 / 2.75) {\r\n p = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\r\n } else if (p < 2.5 / 2.75) {\r\n p = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\r\n } else {\r\n p = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\r\n }\r\n return invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\r\n })\r\n};\r\n\r\n//Circ\r\nEase.Circ = {\r\n \"CircIn\": create(function (p) {\r\n return -(Math.sqrt(1 - (p * p)) - 1);\r\n }),\r\n \"CircOut\": create(function (p) {\r\n return Math.sqrt(1 - (p = p - 1) * p);\r\n }),\r\n \"CircInOut\": create(function (p) {\r\n return ((p *= 2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\r\n })\r\n};\r\n\r\n\r\n//Expo\r\nEase.Expo = {\r\n \"ExpoIn\": create(function (p) {\r\n return Math.pow(2, 10 * (p - 1)) - 0.001;\r\n }),\r\n \"ExpoOut\": create(function (p) {\r\n return 1 - Math.pow(2, -10 * p);\r\n }),\r\n \"ExpoInOut\": create(function (p) {\r\n return ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\r\n })\r\n};\r\n\r\n\r\n//Sine\r\nEase.Sine = {\r\n \"SineIn\": create(function (p) {\r\n return -Math.cos(p * HALF_PI) + 1;\r\n }),\r\n \"SineOut\": create(function (p) {\r\n return Math.sin(p * HALF_PI);\r\n }),\r\n \"SineInOut\": create(function (p) {\r\n return -0.5 * (Math.cos(Math.PI * p) - 1);\r\n })\r\n};\r\n\r\n\r\nmodule.exports = Ease;\r\n\r\n\r\n","function EaseBase() {\r\n this.getPosition = function (p) {\r\n return p;\r\n };\r\n}\r\n\r\nEaseBase.prototype.constructor = EaseBase;\r\nmodule.exports = EaseBase;\r\n\r\n\r\n\r\n","var EaseBase = require('./EaseBase');\r\n\r\nfunction ExponentialEase(power, easeIn, easeOut) {\r\n var pow = power;\r\n var t = easeIn && easeOut ? 3 : easeOut ? 1 : 2;\r\n this.getPosition = function (p) {\r\n var r = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n if (pow === 1) {\r\n r *= r;\r\n } else if (pow === 2) {\r\n r *= r * r;\r\n } else if (pow === 3) {\r\n r *= r * r * r;\r\n } else if (pow === 4) {\r\n r *= r * r * r * r;\r\n }\n return (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\r\n };\r\n}\r\n\r\nExponentialEase.prototype = Object.create(EaseBase.prototype);\r\nExponentialEase.prototype.constructor = ExponentialEase;\r\nmodule.exports = ExponentialEase;\r\n\r\n\r\n\r\n","var Helpers = {\r\n Lerp: function (start, stop, amt) {\r\n if (amt > 1) amt = 1;\r\n else if (amt < 0) amt = 0;\r\n return start + (stop - start) * amt;\r\n },\r\n Round: function(number, decimals) {\r\n var pow = Math.pow(10, decimals);\r\n return Math.round(number * pow) / pow;\r\n },\r\n componentToHex: function(c) {\r\n var hex = c.toString(16);\r\n return hex.length == 1 ? \"0\" + hex : hex;\r\n },\r\n rgbToHex: function(r, g, b) {\r\n return \"#\" + componentToHex(r) + componentToHex(g) + componentToHex(b);\r\n },\r\n rgbToNumber: function (r, g, b) {\r\n return r * 65536 + g * 256 + b;\r\n },\r\n numberToRgb: function (c) {\r\n return {\r\n r: Math.floor(c / (256 * 256)),\r\n g: Math.floor(c / 256) % 256,\r\n b: c % 256,\r\n };\r\n },\r\n hexToRgb: function (hex) {\r\n if (hex === null)\r\n hex = 0xffffff;\r\n\r\n if (!isNaN(hex)) return this.numberToRgb(hex);\r\n\r\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\r\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\n hex = hex.replace(shorthandRegex, function (m, r, g, b) {\r\n return r + r + g + g + b + b;\r\n });\r\n\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16)\r\n } : null;\r\n }\r\n};\r\n\r\nmodule.exports = Helpers;","var UIBase = require('./UIBase'),\r\n InputController = require('./Interaction/InputController'),\r\n ClickEvent = require('./Interaction/ClickEvent');\r\n/**\r\n * base object for all Input type objects\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param width {number} passed to uibase\r\n * @param height {number} passed to uibase\r\n * @param tabIndex {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\r\n */\r\nfunction InputBase(width, height, tabIndex, tabGroup) {\r\n UIBase.call(this, width, height);\r\n var self = this;\r\n this._focused = false;\r\n this._useTab = this._usePrev = this._useNext = true;\r\n this.container.interactive = true;\r\n InputController.registrer(this, tabIndex, tabGroup);\r\n\r\n\r\n var keyDownEvent = function (e) {\r\n if (e.which === 9) {\r\n if (self._useTab) {\r\n InputController.fireTab();\r\n e.preventDefault();\r\n }\r\n }\r\n else if (e.which === 38) {\r\n if (self._usePrev) {\r\n InputController.firePrev();\r\n e.preventDefault();\r\n }\r\n }\r\n else if (e.which === 40) {\r\n if (self._useNext) {\r\n InputController.fireNext();\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n var documentMouseDown = function (e) {\r\n if (!self.__down)\r\n self.blur();\r\n };\r\n\r\n this.container.on(\"pointerdown\", function (e) {\r\n self.focus();\r\n self.__down = true;\r\n });\r\n\r\n this.container.on(\"pointerup\", function (e) {\r\n self.__down = false;\r\n });\r\n\r\n this.container.on(\"pointerupoutside\", function (e) {\r\n self.__down = false;\r\n });\r\n\r\n //var cancelFocusEvent = new ClickEvent(this.stage)\r\n\r\n this._bindEvents = function () {\r\n if (this.stage !== null) {\r\n this.stage.on(\"pointerdown\", documentMouseDown);\r\n document.addEventListener(\"keydown\", keyDownEvent);\r\n }\r\n };\r\n\r\n this._clearEvents = function () {\r\n if (this.stage !== null) {\r\n this.stage.off(\"pointerdown\", documentMouseDown);\r\n document.removeEventListener(\"keydown\", keyDownEvent);\r\n }\r\n };\r\n}\r\n\r\nInputBase.prototype = Object.create(UIBase.prototype);\r\nInputBase.prototype.constructor = InputBase;\r\nmodule.exports = InputBase;\r\n\r\nInputBase.prototype.focus = function () {\r\n if (!this._focused) {\r\n this._focused = true;\r\n this._bindEvents();\r\n InputController.set(this);\r\n this.emit(\"focusChanged\", true);\r\n this.emit(\"focus\");\r\n\r\n }\r\n};\r\n\r\nInputBase.prototype.blur = function () {\r\n if (this._focused) {\r\n InputController.clear();\r\n this._focused = false;\r\n this._clearEvents();\r\n this.emit(\"focusChanged\", false);\r\n this.emit(\"blur\");\r\n\r\n }\r\n};","var ClickEvent = function (obj, includeHover, rightMouseButton) {\r\n\r\n\r\n\r\n var bound = false,\r\n self = this,\r\n id = 0,\r\n ishover = false,\r\n mouse = new PIXI.Point(),\r\n offset = new PIXI.Point(),\r\n movementX = 0,\r\n movementY = 0,\r\n right = typeof rightMouseButton === 'undefined' ? false : rightMouseButton,\r\n hover = typeof includeHover === 'undefined' ? true : includeHover;\r\n\r\n var eventname_mousedown = right ? \"rightdown\" : \"mousedown\";\r\n var eventname_mouseup = right ? \"rightup\" : \"mouseup\";\r\n var eventname_mouseupoutside = right ? \"rightupoutside\" : \"mouseupoutside\";\r\n\r\n obj.container.interactive = true;\r\n\r\n var _onMouseDown = function (event) {\r\n mouse.copy(event.data.global);\r\n id = event.data.identifier;\r\n self.onPress.call(obj, event, true);\r\n if (!bound) {\r\n obj.container.on(eventname_mouseup, _onMouseUp);\r\n obj.container.on(eventname_mouseupoutside, _onMouseUpOutside);\r\n if (!right) {\r\n obj.container.on('touchend', _onMouseUp);\r\n obj.container.on('touchendoutside', _onMouseUpOutside);\r\n }\r\n bound = true;\r\n }\r\n event.data.originalEvent.preventDefault();\r\n };\r\n\r\n var _mouseUpAll = function (event) {\r\n if (event.data.identifier !== id) return;\r\n offset.set(event.data.global.x - mouse.x, event.data.global.y - mouse.y);\r\n if (bound) {\r\n obj.container.removeListener(eventname_mouseup, _onMouseUp);\r\n obj.container.removeListener(eventname_mouseupoutside, _onMouseUpOutside);\r\n if (!right) {\r\n obj.container.removeListener('touchend', _onMouseUp);\r\n obj.container.removeListener('touchendoutside', _onMouseUpOutside);\r\n }\r\n bound = false;\r\n }\r\n self.onPress.call(obj, event, false);\r\n };\r\n\r\n var _onMouseUp = function (event) {\r\n if (event.data.identifier !== id) return;\r\n _mouseUpAll(event);\r\n\r\n //prevent clicks with scrolling/dragging objects\r\n if (obj.dragThreshold) {\r\n movementX = Math.abs(offset.x);\r\n movementY = Math.abs(offset.y);\r\n if (Math.max(movementX, movementY) > obj.dragThreshold) return;\r\n }\r\n\r\n\r\n self.onClick.call(obj, event);\r\n };\r\n\r\n var _onMouseUpOutside = function (event) {\r\n if (event.data.identifier !== id) return;\r\n _mouseUpAll(event);\r\n };\r\n\r\n var _onMouseOver = function (event) {\r\n if (!ishover) {\r\n ishover = true;\r\n obj.container.on('mousemove', _onMouseMove);\r\n obj.container.on('touchmove', _onMouseMove);\r\n self.onHover.call(obj, event, true);\r\n }\r\n };\r\n\r\n var _onMouseOut = function (event) {\r\n if (ishover) {\r\n ishover = false;\r\n obj.container.removeListener('mousemove', _onMouseMove);\r\n obj.container.removeListener('touchmove', _onMouseMove);\r\n self.onHover.call(obj, event, false);\r\n }\r\n };\r\n\r\n var _onMouseMove = function (event) {\r\n self.onMove.call(obj, event);\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n obj.container.removeListener(eventname_mouseup, _onMouseUp);\r\n obj.container.removeListener(eventname_mouseupoutside, _onMouseUpOutside);\r\n\r\n if (!right) {\r\n obj.container.removeListener('touchend', _onMouseUp);\r\n obj.container.removeListener('touchendoutside', _onMouseUpOutside);\r\n }\r\n bound = false;\r\n }\r\n obj.container.removeListener(eventname_mousedown, _onMouseDown);\r\n if (!right) obj.container.removeListener('touchstart', _onMouseDown);\r\n\r\n if (hover) {\r\n obj.container.removeListener('mouseover', _onMouseOver);\r\n obj.container.removeListener('mouseout', _onMouseOut);\r\n obj.container.removeListener('mousemove', _onMouseMove);\r\n obj.container.removeListener('touchmove', _onMouseMove);\r\n }\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on(eventname_mousedown, _onMouseDown);\r\n if (!right) obj.container.on('touchstart', _onMouseDown);\r\n\r\n if (hover) {\r\n obj.container.on('mouseover', _onMouseOver);\r\n obj.container.on('mouseout', _onMouseOut);\r\n \r\n }\r\n };\r\n\r\n this.startEvent();\r\n};\r\n\r\nClickEvent.prototype.constructor = ClickEvent;\r\nmodule.exports = ClickEvent;\r\n\r\nClickEvent.prototype.onHover = function (event, over) { };\r\nClickEvent.prototype.onPress = function (event, isPressed) { };\r\nClickEvent.prototype.onClick = function (event) { };\r\nClickEvent.prototype.onMove = function (event) { };","var _items = [];\r\nvar DragDropController = {\r\n add: function (item, event) {\r\n item._dragDropEventId = event.data.identifier;\r\n if (_items.indexOf(item) === -1) {\r\n _items.push(item);\r\n return true;\r\n }\r\n return false;\r\n },\r\n getItem: function (object) {\r\n var item = null, index;\r\n for (var i = 0; i < _items.length; i++) {\r\n if (_items[i] === object) {\r\n item = _items[i];\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (item !== null) {\r\n _items.splice(index, 1);\r\n return item;\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n getEventItem: function (event, group) {\r\n var item = null, index, id = event.data.identifier;\r\n for (var i = 0; i < _items.length; i++) {\r\n if (_items[i]._dragDropEventId === id) {\r\n if (group !== _items[i].dragGroup) {\r\n return false;\r\n }\r\n item = _items[i];\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (item !== null) {\r\n _items.splice(index, 1);\r\n return item;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = DragDropController;","var DragEvent = function (obj) {\r\n var bound = false,\r\n start = new PIXI.Point(),\r\n offset = new PIXI.Point(),\r\n mouse = new PIXI.Point(),\r\n movementX = 0,\r\n movementY = 0,\r\n cancel = false,\r\n dragging = false,\r\n self = this,\r\n id = 0;\r\n\r\n obj.container.interactive = true;\r\n\r\n var _onDragStart = function (e) {\r\n id = e.data.identifier;\r\n self.onPress.call(obj, e, true);\r\n if (!bound) {\r\n start.copy(e.data.global);\r\n obj.stage.on('mousemove', _onDragMove);\r\n obj.stage.on('touchmove', _onDragMove);\r\n obj.stage.on('mouseup', _onDragEnd);\r\n obj.stage.on('mouseupoutside', _onDragEnd);\r\n obj.stage.on('touchend', _onDragEnd);\r\n obj.stage.on('touchendoutside', _onDragEnd);\r\n obj.stage.on('touchcancel', _onDragEnd);\r\n bound = true;\r\n }\r\n\r\n e.data.originalEvent.preventDefault();\r\n };\r\n\r\n var _onDragMove = function (event) {\r\n if (event.data.identifier !== id) return;\r\n mouse.copy(event.data.global);\r\n offset.set(mouse.x - start.x, mouse.y - start.y);\r\n if (!dragging) {\r\n movementX = Math.abs(offset.x);\r\n movementY = Math.abs(offset.y);\r\n if (movementX === 0 && movementY === 0 || Math.max(movementX, movementY) < obj.dragThreshold) return; //thresshold\r\n if (obj.dragRestrictAxis !== null) {\r\n cancel = false;\r\n if (obj.dragRestrictAxis == \"x\" && movementY > movementX) cancel = true;\r\n else if (obj.dragRestrictAxis == \"y\" && movementY <= movementX) cancel = true;\r\n if (cancel) {\r\n _onDragEnd(event);\r\n return;\r\n }\r\n }\r\n self.onDragStart.call(obj, event);\r\n dragging = true;\r\n }\r\n self.onDragMove.call(obj, event, offset);\r\n };\r\n\r\n var _onDragEnd = function (event) {\r\n if (event.data.identifier !== id) return;\r\n if (bound) {\r\n obj.stage.removeListener('mousemove', _onDragMove);\r\n obj.stage.removeListener('touchmove', _onDragMove);\r\n obj.stage.removeListener('mouseup', _onDragEnd);\r\n obj.stage.removeListener('mouseupoutside', _onDragEnd);\r\n obj.stage.removeListener('touchend', _onDragEnd);\r\n obj.stage.removeListener('touchendoutside', _onDragEnd);\r\n obj.stage.removeListener('touchcancel', _onDragEnd);\r\n dragging = false;\r\n bound = false;\r\n self.onDragEnd.call(obj, event);\r\n self.onPress.call(obj, event, false);\r\n\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n obj.stage.removeListener('mousemove', _onDragMove);\r\n obj.stage.removeListener('touchmove', _onDragMove);\r\n obj.stage.removeListener('mouseup', _onDragEnd);\r\n obj.stage.removeListener('mouseupoutside', _onDragEnd);\r\n obj.stage.removeListener('touchend', _onDragEnd);\r\n obj.stage.removeListener('touchendoutside', _onDragEnd);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mousedown', _onDragStart);\r\n obj.container.removeListener('touchstart', _onDragStart);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mousedown', _onDragStart);\r\n obj.container.on('touchstart', _onDragStart);\r\n };\r\n\r\n this.startEvent();\r\n};\r\n\r\nDragEvent.prototype.constructor = DragEvent;\r\nmodule.exports = DragEvent;\r\n\r\nDragEvent.prototype.onPress = function (event, isPressed) { };\r\nDragEvent.prototype.onDragEnd = function (event) { };\r\nDragEvent.prototype.onDragMove = function (event, offset) { };\r\nDragEvent.prototype.onDragStart = function (event) { };","var _currentItem;\r\nvar tabGroups = {};\r\nvar checkGroups = {};\r\nvar checkGroupValues = {};\r\n\r\nvar InputController = {\r\n registrer: function (item, tabIndex, tabGroup) {\r\n var groupName = tabGroup || \"default\";\r\n\r\n var items = tabGroups[groupName];\r\n if (!items)\r\n items = tabGroups[groupName] = [];\r\n\r\n var i = items.indexOf(item);\r\n if (i === -1) {\r\n item._tabIndex = tabIndex !== undefined ? tabIndex : -1;\r\n item._tabGroup = items;\r\n items.push(item);\r\n items.sort(function (a, b) {\r\n if (a._tabIndex < b._tabIndex)\r\n return -1;\r\n if (a._tabIndex > b._tabIndex)\r\n return 1;\r\n return 0;\r\n });\r\n }\r\n },\r\n set: function (item) {\r\n this.blur();\r\n _currentItem = item;\r\n },\r\n clear: function () {\r\n _currentItem = undefined;\r\n },\r\n blur: function () {\r\n if (_currentItem && typeof _currentItem.blur === \"function\")\r\n _currentItem.blur();\r\n },\r\n fireTab: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) + 1;\r\n if (i >= _currentItem._tabGroup.length) i = 0;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n fireNext: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) + 1;\r\n if (i >= _currentItem._tabGroup.length) i = _currentItem._tabGroup.length - 1;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n firePrev: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) - 1;\r\n if (i < 0) i = 0;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n registrerCheckGroup: function (cb) {\r\n var name = cb.checkGroup;\r\n var group = checkGroups[name];\r\n if (!group) group = checkGroups[name] = {};\r\n group[cb.value] = cb;\r\n\r\n if (cb.checked)\r\n checkGroupValues[name] = cb.value;\r\n },\r\n updateCheckGroupSelected: function (cb) {\r\n var group = checkGroups[cb.checkGroup];\r\n for (var val in group) {\r\n var b = group[val];\r\n if (b !== cb)\r\n b.checked = false;\r\n }\r\n checkGroupValues[cb.checkGroup] = cb.value;\r\n },\r\n getCheckGroupSelectedValue: function (name) {\r\n if (checkGroupValues[name])\r\n return checkGroupValues[name];\r\n return \"\";\r\n },\r\n setCheckGroupSelectedValue: function (name, val) {\r\n var group = checkGroups[name];\r\n if (group) {\r\n var cb = group[val];\r\n if (cb) {\r\n cb.checked = true;\r\n }\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = InputController;","var Interaction = {\r\n ClickEvent: require('./ClickEvent'),\r\n DragEvent: require('./DragEvent'),\r\n MouseScrollEvent: require('./MouseScrollEvent'),\r\n InputController: require('./InputController')\r\n};\r\n\r\n\r\nmodule.exports = Interaction;","var MouseScrollEvent = function (obj, preventDefault) {\r\n var bound = false, delta = new PIXI.Point(), self = this;\r\n obj.container.interactive = true;\r\n\r\n var _onMouseScroll = function (event) {\r\n if (preventDefault)\r\n event.preventDefault();\r\n\r\n if (typeof event.deltaX !== \"undefined\")\r\n delta.set(event.deltaX, event.deltaY);\r\n else //Firefox\r\n delta.set(event.axis == 1 ? event.detail * 60 : 0, event.axis == 2 ? event.detail * 60 : 0);\r\n\r\n self.onMouseScroll.call(obj, event, delta);\r\n };\r\n\r\n var _onHover = function (event) {\r\n if (!bound) {\r\n document.addEventListener(\"mousewheel\", _onMouseScroll, false);\r\n document.addEventListener(\"DOMMouseScroll\", _onMouseScroll, false);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _onMouseOut = function (event) {\r\n if (bound) {\r\n document.removeEventListener(\"mousewheel\", _onMouseScroll);\r\n document.removeEventListener(\"DOMMouseScroll\", _onMouseScroll);\r\n bound = false;\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n document.removeEventListener(\"mousewheel\", _onMouseScroll);\r\n document.removeEventListener(\"DOMMouseScroll\", _onMouseScroll);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mouseover', _onHover);\r\n obj.container.removeListener('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mouseover', _onHover);\r\n obj.container.on('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent();\r\n\r\n \r\n};\r\n\r\nMouseScrollEvent.prototype.constructor = MouseScrollEvent;\r\nmodule.exports = MouseScrollEvent;\r\n\r\nMouseScrollEvent.prototype.onMouseScroll = function (event, delta) { };","var Slider = require('./Slider'),\r\n Tween = require('./Tween'),\r\n Ease = require('./Ease/Ease');\r\n\r\n/**\r\n* An UI scrollbar to control a ScrollingContainer\r\n* \r\n* @class\r\n* @extends PIXI.UI.Slider\r\n* @memberof PIXI.UI\r\n* @param options {Object} ScrollBar settings\r\n* @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the scrollbar track\r\n* @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as scrollbar handle\r\n* @param options.scrollingContainer {PIXI.UI.ScrollingContainer} The container to control\r\n* @param [options.vertical=false] {boolean} Direction of the scrollbar\r\n* @param [options.autohide=false] {boolean} Hides the scrollbar when not needed\r\n*\r\n*/\r\nfunction ScrollBar(options) {\r\n Slider.call(this, { track: options.track, handle: options.handle, fill: null, vertical: options.vertical });\r\n this.scrollingContainer = options.scrollingContainer;\r\n this.autohide = options.autohide;\r\n this._hidden = false;\r\n\r\n}\r\n\r\nScrollBar.prototype = Object.create(Slider.prototype);\r\nScrollBar.prototype.constructor = ScrollBar;\r\nmodule.exports = ScrollBar;\r\n\r\n\r\nScrollBar.prototype.initialize = function () {\r\n Slider.prototype.initialize.call(this);\r\n this.decimals = 3; //up decimals to trigger ValueChanging more often\r\n\r\n this._onValueChanging = function (val) {\r\n var sizeAmt = this.scrollingContainer._height / this.scrollingContainer.innerContainer.height || 0.001;\r\n if (sizeAmt < 1)\r\n this.scrollingContainer.forcePctPosition(this.vertical ? \"y\" : \"x\", this._amt);\r\n };\r\n\r\n this.scrollingContainer._scrollBars.push(this);\r\n\r\n};\r\n\r\nScrollBar.prototype.alignToContainer = function () {\r\n var newPos,\r\n size,\r\n x_y = this.vertical ? \"y\" : \"x\",\r\n width_height = this.vertical ? \"height\" : \"width\",\r\n top_left = this.vertical ? \"top\" : \"left\",\r\n _posAmt = !this.scrollingContainer.innerContainer[width_height] ? 0 : -(this.scrollingContainer.innerContainer[x_y] / this.scrollingContainer.innerContainer[width_height]),\r\n sizeAmt = !this.scrollingContainer.innerContainer[width_height] ? 1 : this.scrollingContainer[\"_\" + width_height] / this.scrollingContainer.innerContainer[width_height];\r\n\r\n //update amt\r\n this._amt = !this.scrollingContainer[\"_\" + width_height] ? 0 : -(this.scrollingContainer.innerContainer[x_y] / (this.scrollingContainer.innerContainer[width_height] - this.scrollingContainer[\"_\" + width_height]));\r\n\r\n if (sizeAmt >= 1) {\r\n size = this[\"_\" + width_height];\r\n this.handle[top_left] = size * 0.5;\r\n this.toggleHidden(true);\r\n }\r\n else {\r\n size = this[\"_\" + width_height] * sizeAmt;\r\n if (this._amt > 1) size -= (this[\"_\" + width_height] - size) * (this._amt - 1);\r\n else if (this._amt < 0) size -= (this[\"_\" + width_height] - size) * -this._amt;\r\n if (this._amt < 0) newPos = size * 0.5;\r\n else if (this._amt > 1) newPos = this[\"_\" + width_height] - size * 0.5;\r\n else newPos = (_posAmt * this.scrollingContainer[\"_\" + width_height]) + (size * 0.5);\r\n this.handle[top_left] = newPos;\r\n this.toggleHidden(false);\r\n }\r\n this.handle[width_height] = size;\r\n};\r\n\r\n\r\nScrollBar.prototype.toggleHidden = function (hidden) {\r\n if (this.autohide) {\r\n if (hidden && !this._hidden) {\r\n Tween.to(this, 0.2, { alpha: 0 });\r\n this._hidden = true;\r\n }\r\n else if (!hidden && this._hidden) {\r\n Tween.to(this, 0.2, { alpha: 1 });\r\n this._hidden = false;\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n Container = require('./Container'),\r\n Helpers = require('./Helpers'),\r\n Ticker = require('./Ticker'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n MouseScrollEvent = require('./Interaction/MouseScrollEvent');\r\n\r\n\r\n/**\r\n * An UI Container object with expandMask hidden and possibility to enable scrolling\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param [options.scrollX=false] {Boolean} Enable horizontal scrolling\r\n * @param [options.scrollY=false] {Boolean} Enable vertical scrolling\r\n * @param [options.dragScrolling=true] {Boolean} Enable mousedrag scrolling\r\n * @param [options.softness=0.5] {Number} (0-1) softness of scrolling\r\n * @param [options.width=0] {Number|String} container width \r\n * @param [options.height=0] {Number} container height \r\n * @param [options.radius=0] {Number} corner radius of clipping mask\r\n * @param [options.expandMask=0] {Number} mask expand (px)\r\n * @param [options.overflowY=0] {Number} how much can be scrolled past content dimensions\r\n * @param [options.overflowX=0] {Number} how much can be scrolled past content dimensions\r\n */\r\nfunction ScrollingContainer(options) {\r\n options = options || {};\r\n Container.call(this, options.width, options.height);\r\n this.mask = new PIXI.Graphics();\r\n this.innerContainer = new PIXI.Container();\r\n this.innerBounds = new PIXI.Rectangle();\r\n this.container.addChild(this.mask);\r\n this.container.addChild(this.innerContainer);\r\n this.container.mask = this.mask;\r\n this.scrollX = options.scrollX !== undefined ? options.scrollX : false;\r\n this.scrollY = options.scrollY !== undefined ? options.scrollY : true;\r\n this.dragScrolling = options.dragScrolling !== undefined ? options.dragScrolling : true;\r\n this.softness = options.softness !== undefined ? Math.max(Math.min(options.softness || 0, 1), 0) : 0.5;\r\n this.radius = options.radius || 0;\r\n this.expandMask = options.expandMask || 0;\r\n this.overflowY = options.overflowY || 0;\r\n this.overflowX = options.overflowX || 0;\r\n\r\n this.animating = false;\r\n this.scrolling = false;\r\n this._scrollBars = [];\r\n\r\n this.boundCached = performance.now() - 1000;\r\n}\r\n\r\n\r\nScrollingContainer.prototype = Object.create(Container.prototype);\r\nScrollingContainer.prototype.constructor = ScrollingContainer;\r\nmodule.exports = ScrollingContainer;\r\n\r\n\r\nScrollingContainer.prototype.initialize = function () {\r\n Container.prototype.initialize.apply(this);\r\n if (this.scrollX || this.scrollY) {\r\n this.initScrolling();\r\n }\r\n};\r\n\r\nScrollingContainer.prototype.update = function () {\r\n Container.prototype.update.apply(this);\r\n if (this._lastWidth != this._width || this._lastHeight != this._height) {\r\n var of = this.expandMask;\r\n this.mask.clear();\r\n this.mask.lineStyle(0);\r\n this.mask.beginFill(0xFFFFFF, 1);\r\n if (this.radius === 0) {\r\n\r\n //this.mask.drawRect(0, 0, this._width, this._height);\r\n //this.mask.drawRect(-of, -of, this._width + of, this.height + of);\r\n //this.mask.moveTo(-of, -of);\r\n //this.mask.lineTo(this._width + of, -of);\r\n //this.mask.lineTo(this._width + of, this._height + of);\r\n //this.mask.lineTo(-of, this._height + of);\r\n this.mask.drawRect(-of, -of, this._width + of, this._height + of);\r\n }\r\n else {\r\n this.mask.drawRoundedRect(-of, -of, this._width + of, this.height + of, this.radius);\r\n }\r\n this.mask.endFill();\r\n this._lastWidth = this._width;\r\n this._lastHeight = this._height;\r\n }\r\n\r\n\r\n if (this.setScrollPosition) {\r\n this.setScrollPosition();\r\n }\r\n};\r\n\r\nScrollingContainer.prototype.addChild = function (UIObject) {\r\n var argumentsLength = arguments.length;\r\n if (argumentsLength > 1) {\r\n for (var i = 0; i < argumentsLength; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n Container.prototype.addChild.call(this, UIObject);\r\n this.innerContainer.addChild(UIObject.container);\r\n this.getInnerBounds(true); //make sure bounds is updated instantly when a child is added\r\n }\r\n return UIObject;\r\n};\r\n\r\n\r\nScrollingContainer.prototype.updateScrollBars = function () {\r\n for (var i = 0; i < this._scrollBars.length; i++) {\r\n this._scrollBars[i].alignToContainer();\r\n }\r\n};\r\n\r\n\r\nScrollingContainer.prototype.getInnerBounds = function (force) {\r\n //this is a temporary fix, because we cant rely on innercontainer height if the children is positioned > 0 y.\r\n if (force || performance.now() - this.boundCached > 1000) {\r\n this.innerContainer.getLocalBounds(this.innerBounds);\r\n this.innerContainer.getLocalBounds(this.innerBounds);\r\n this.innerBounds.height = this.innerBounds.y + this.innerContainer.height;\r\n this.innerBounds.width = this.innerBounds.x + this.innerContainer.width;\r\n this.boundCached = performance.now();\r\n }\r\n\r\n return this.innerBounds;\r\n};\r\n\r\nScrollingContainer.prototype.initScrolling = function () {\r\n var container = this.innerContainer,\r\n containerStart = new PIXI.Point(),\r\n targetPosition = new PIXI.Point(),\r\n lastPosition = new PIXI.Point(),\r\n Position = new PIXI.Point(),\r\n Speed = new PIXI.Point(),\r\n stop,\r\n self = this;\r\n\r\n this.forcePctPosition = function (direction, pct) {\r\n var bounds = this.getInnerBounds();\r\n\r\n if (this.scrollX && direction == \"x\") {\r\n container.position[direction] = -((bounds.width - this._width) * pct);\r\n }\r\n if (this.scrollY && direction == \"y\") {\r\n container.position[direction] = -((bounds.height - this._height) * pct);\r\n }\r\n Position[direction] = targetPosition[direction] = container.position[direction];\r\n };\r\n\r\n this.focusPosition = function (pos) {\r\n var bounds = this.getInnerBounds();\r\n\r\n var dif;\r\n if (this.scrollX) {\r\n var x = Math.max(0, (Math.min(bounds.width, pos.x)));\r\n if (x + container.x > this._width) {\r\n dif = x - this._width;\r\n container.x = -dif;\r\n }\r\n else if (x + container.x < 0) {\r\n dif = x + container.x;\r\n container.x -= dif;\r\n }\r\n }\r\n\r\n if (this.scrollY) {\r\n var y = Math.max(0, (Math.min(bounds.height, pos.y)));\r\n\r\n if (y + container.y > this._height) {\r\n dif = y - this._height;\r\n container.y = -dif;\r\n }\r\n else if (y + container.y < 0) {\r\n dif = y + container.y;\r\n container.y -= dif;\r\n }\r\n }\r\n\r\n lastPosition.copy(container.position);\r\n targetPosition.copy(container.position);\r\n Position.copy(container.position);\r\n this.updateScrollBars();\r\n\r\n };\r\n\r\n this.setScrollPosition = function (speed) {\r\n if (speed) {\r\n Speed = speed;\r\n }\r\n\r\n if (!this.animating) {\r\n this.animating = true;\r\n lastPosition.copy(container.position);\r\n targetPosition.copy(container.position);\r\n Ticker.on(\"update\", this.updateScrollPosition, this);\r\n }\r\n };\r\n\r\n this.updateScrollPosition = function (delta) {\r\n stop = true;\r\n if (this.scrollX) this.updateDirection(\"x\", delta);\r\n if (this.scrollY) this.updateDirection(\"y\", delta);\r\n if (stop) {\r\n Ticker.removeListener(\"update\", this.updateScrollPosition);\r\n this.animating = false;\r\n }\r\n };\r\n\r\n\r\n\r\n this.updateDirection = function (direction, delta) {\r\n var bounds = this.getInnerBounds();\r\n\r\n var min;\r\n if (direction == \"y\")\r\n min = Math.round(Math.min(0, this._height - bounds.height));\r\n else\r\n min = Math.round(Math.min(0, this._width - bounds.width));\r\n\r\n if (!this.scrolling && Math.round(Speed[direction]) !== 0) {\r\n targetPosition[direction] += Speed[direction];\r\n Speed[direction] = Helpers.Lerp(Speed[direction], 0, (5 + 2.5 / Math.max(this.softness, 0.01)) * delta);\r\n\r\n if (targetPosition[direction] > 0) {\r\n targetPosition[direction] = 0;\r\n\r\n }\r\n else if (targetPosition[direction] < min) {\r\n targetPosition[direction] = min;\r\n\r\n }\r\n }\r\n\r\n if (!this.scrolling && Math.round(Speed[direction]) === 0 && (container[direction] > 0 || container[direction] < min)) {\r\n var target = Position[direction] > 0 ? 0 : min;\r\n Position[direction] = Helpers.Lerp(Position[direction], target, (40 - (30 * this.softness)) * delta);\r\n stop = false;\r\n }\r\n else if (this.scrolling || Math.round(Speed[direction]) !== 0) {\r\n\r\n if (this.scrolling) {\r\n Speed[direction] = Position[direction] - lastPosition[direction];\r\n lastPosition.copy(Position);\r\n }\r\n if (targetPosition[direction] > 0) {\r\n Speed[direction] = 0;\r\n Position[direction] = 100 * this.softness * (1 - Math.exp(targetPosition[direction] / -200));\r\n }\r\n else if (targetPosition[direction] < min) {\r\n Speed[direction] = 0;\r\n Position[direction] = min - (100 * this.softness * (1 - Math.exp((min - targetPosition[direction]) / -200)));\r\n }\r\n else {\r\n Position[direction] = targetPosition[direction];\r\n }\r\n stop = false;\r\n }\r\n\r\n container.position[direction] = Math.round(Position[direction]);\r\n\r\n self.updateScrollBars();\r\n\r\n };\r\n\r\n\r\n //Drag scroll\r\n if (this.dragScrolling) {\r\n var drag = new DragEvent(this);\r\n drag.onDragStart = function (e) {\r\n if (!this.scrolling) {\r\n containerStart.copy(container.position);\r\n Position.copy(container.position);\r\n this.scrolling = true;\r\n this.setScrollPosition();\r\n self.emit(\"dragStart\", e);\r\n }\r\n };\r\n\r\n drag.onDragMove = function (e, offset) {\r\n if (this.scrollX)\r\n targetPosition.x = containerStart.x + offset.x;\r\n if (this.scrollY)\r\n targetPosition.y = containerStart.y + offset.y;\r\n };\r\n\r\n drag.onDragEnd = function (e) {\r\n if (this.scrolling) {\r\n this.scrolling = false;\r\n self.emit(\"dragEnd\", e);\r\n }\r\n };\r\n }\r\n\r\n //Mouse scroll\r\n var scrollSpeed = new PIXI.Point();\r\n var scroll = new MouseScrollEvent(this, true);\r\n scroll.onMouseScroll = function (e, delta) {\r\n scrollSpeed.set(-delta.x * 0.2, -delta.y * 0.2);\r\n this.setScrollPosition(scrollSpeed);\r\n };\r\n\r\n\r\n self.updateScrollBars();\r\n\r\n\r\n};\r\n\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * A sliced sprite with dynamic width and height.\r\n *\r\n * @class\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} the texture for this SliceSprite\r\n * @param BorderWidth {Number} Width of the sprite borders\r\n * @param horizontalSlice {Boolean} Slice the sprite horizontically\r\n * @param verticalSlice {Boolean} Slice the sprite vertically\r\n * @param [tile=false] {Boolean} tile or streach\r\n */\r\nfunction SliceSprite(texture, borderWidth, horizontalSlice, verticalSlice, tile) {\r\n UIBase.call(this, texture.width, texture.height);\r\n\r\n var ftl, ftr, fbl, fbr, ft, fb, fl, fr, ff, stl, str, sbl, sbr, st, sb, sl, sr, sf,\r\n bw = borderWidth || 5,\r\n vs = typeof verticalSlice !== \"undefined\" ? verticalSlice : true,\r\n hs = typeof horizontalSlice !== \"undefined\" ? horizontalSlice : true,\r\n t = texture.baseTexture,\r\n f = texture.frame;\r\n\r\n\r\n if (hs) this.setting.minWidth = borderWidth * 2;\r\n if (vs) this.setting.minHeight = borderWidth * 2;\r\n\r\n this.initialize = function () {\r\n UIBase.prototype.initialize.apply(this);\r\n\r\n //get frames\r\n if (vs && hs) {\r\n ftl = new PIXI.Rectangle(f.x, f.y, bw, bw);\r\n ftr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, bw);\r\n fbl = new PIXI.Rectangle(f.x, f.y + f.height - bw, bw, bw);\r\n fbr = new PIXI.Rectangle(f.x + f.width - bw, f.y + f.height - bw, bw, bw);\r\n ft = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, bw);\r\n fb = new PIXI.Rectangle(f.x + bw, f.y + f.height - bw, f.width - bw * 2, bw);\r\n fl = new PIXI.Rectangle(f.x, f.y + bw, bw, f.height - bw * 2);\r\n fr = new PIXI.Rectangle(f.x + f.width - bw, f.y + bw, bw, f.height - bw * 2);\r\n ff = new PIXI.Rectangle(f.x + bw, f.y + bw, f.width - bw * 2, f.height - bw * 2);\r\n }\r\n else if (hs) {\r\n fl = new PIXI.Rectangle(f.x, f.y, bw, f.height);\r\n fr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, f.height);\r\n ff = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, f.height);\r\n }\r\n else { //vs\r\n ft = new PIXI.Rectangle(f.x, f.y, f.width, bw);\r\n fb = new PIXI.Rectangle(f.x, f.y + f.height - bw, f.width, bw);\r\n ff = new PIXI.Rectangle(f.x, f.y + bw, f.width, f.height - bw * 2);\r\n }\r\n\r\n //TODO: swap frames if rotation\r\n\r\n\r\n\r\n //make sprites\r\n sf = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, ff)) : new PIXI.Sprite(new PIXI.Texture(t, ff));\r\n this.container.addChildAt(sf, 0);\r\n if (vs && hs) {\r\n stl = new PIXI.Sprite(new PIXI.Texture(t, ftl));\r\n str = new PIXI.Sprite(new PIXI.Texture(t, ftr));\r\n sbl = new PIXI.Sprite(new PIXI.Texture(t, fbl));\r\n sbr = new PIXI.Sprite(new PIXI.Texture(t, fbr));\r\n this.container.addChildAt(stl, 0);\r\n this.container.addChildAt(str, 0);\r\n this.container.addChildAt(sbl, 0);\r\n this.container.addChildAt(sbr, 0);\r\n\r\n }\r\n if (hs) {\r\n sl = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fl)) : new PIXI.Sprite(new PIXI.Texture(t, fl));\r\n sr = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fr)) : new PIXI.Sprite(new PIXI.Texture(t, fr));\r\n this.container.addChildAt(sl, 0);\r\n this.container.addChildAt(sr, 0);\r\n }\r\n if (vs) {\r\n st = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, ft)) : new PIXI.Sprite(new PIXI.Texture(t, ft));\r\n sb = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fb)) : new PIXI.Sprite(new PIXI.Texture(t, fb));\r\n this.container.addChildAt(st, 0);\r\n this.container.addChildAt(sb, 0);\r\n }\r\n\r\n //set constant position and sizes\r\n if (vs && hs) st.x = sb.x = sl.y = sr.y = stl.width = str.width = sbl.width = sbr.width = stl.height = str.height = sbl.height = sbr.height = bw;\r\n if (hs) sf.x = sl.width = sr.width = bw;\r\n if (vs) sf.y = st.height = sb.height = bw;\r\n };\r\n\r\n /**\r\n * Updates the sliced sprites position and size\r\n *\r\n * @private\r\n */\r\n this.update = function () {\r\n if (!this.initialized) return;\r\n if (vs && hs) {\r\n str.x = sbr.x = sr.x = this._width - bw;\r\n sbl.y = sbr.y = sb.y = this._height - bw;\r\n sf.width = st.width = sb.width = this._width - bw * 2;\r\n sf.height = sl.height = sr.height = this._height - bw * 2;\r\n }\r\n else if (hs) {\r\n sr.x = this._width - bw;\r\n sl.height = sr.height = sf.height = this._height;\r\n sf.width = this._width - bw * 2;\r\n }\r\n else { //vs\r\n sb.y = this._height - bw;\r\n st.width = sb.width = sf.width = this._width;\r\n sf.height = this._height - bw * 2;\r\n }\r\n\r\n if (this.tint !== null) {\r\n sf.tint = this.tint;\r\n if (vs && hs) stl.tint = str.tint = sbl.tint = sbr.tint = this.tint;\r\n if (hs) sl.tint = sr.tint = this.tint;\r\n if (vs) st.tint = sb.tint = this.tint;\r\n }\r\n\r\n if (this.blendMode !== null) {\r\n sf.blendMode = this.blendMode;\r\n if (vs && hs) stl.blendMode = str.blendMode = sbl.blendMode = sbr.blendMode = this.blendMode;\r\n if (hs) sl.blendMode = sr.blendMode = this.blendMode;\r\n if (vs) st.blendMode = sb.blendMode = this.blendMode;\r\n }\r\n };\r\n}\r\n\r\nSliceSprite.prototype = Object.create(UIBase.prototype);\r\nSliceSprite.prototype.constructor = SliceSprite;\r\nmodule.exports = SliceSprite;\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n ClickEvent = require('./Interaction/ClickEvent'),\r\n Tween = require('./Tween'),\r\n Ease = require('./Ease/Ease'),\r\n Helpers = require('./Helpers');\r\n\r\n/**\r\n* An UI Slider, the default width/height is 90%\r\n* \r\n* @class\r\n* @extends UIBase\r\n* @memberof PIXI.UI\r\n* @param options {Object} Slider settings\r\n* @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the slider track\r\n* @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as slider handle\r\n* @param [options.fill=null] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used for slider fill\r\n* @param [options.vertical=false] {boolean} Direction of the slider\r\n* @param [options.value=0] {number} value of the slider\r\n* @param [options.minValue=0] {number} minimum value\r\n* @param [options.maxValue=100] {number} max value\r\n* @param [options.decimals=0] {boolean} the decimal precision (use negative to round tens and hundreds)\r\n* @param [options.onValueChange=null] {callback} Callback when the value has changed\r\n* @param [options.onValueChanging=null] {callback} Callback while the value is changing\r\n* \r\n* \r\n*/\r\nfunction Slider(options) {\r\n UIBase.call(this);\r\n this._amt = 0;\r\n this._disabled = false;\r\n\r\n //set options\r\n this.track = options.track;\r\n this.handle = options.handle;\r\n this.fill = options.fill || null;\r\n this._minValue = options.minValue || 0;\r\n this._maxValue = options.maxValue || 100;\r\n this.decimals = options.decimals || 0;\r\n this.vertical = options.vertical || false;\r\n this._onValueChange = options.onValueChange || null;\r\n this._onValueChanging = options.onValueChanging || null;\r\n this.value = options.value || 50;\r\n this.handle.pivot = 0.5;\r\n\r\n\r\n\r\n this.addChild(this.track);\r\n if (this.fill) this.track.addChild(this.fill);\r\n this.addChild(this.handle);\r\n this.handle.container.buttonMode = true;\r\n\r\n if (this.vertical) {\r\n this.height = \"100%\";\r\n this.width = this.track.width;\r\n this.track.height = \"100%\";\r\n this.handle.horizontalAlign = \"center\";\r\n if (this.fill) this.fill.horizontalAlign = \"center\";\r\n }\r\n else {\r\n this.width = \"100%\";\r\n this.height = this.track.height;\r\n this.track.width = \"100%\";\r\n this.handle.verticalAlign = \"middle\";\r\n if (this.fill) this.fill.verticalAlign = \"middle\";\r\n }\r\n\r\n}\r\n\r\nSlider.prototype = Object.create(UIBase.prototype);\r\nSlider.prototype.constructor = Slider;\r\nmodule.exports = Slider;\r\n\r\nSlider.prototype.update = function (soft) {\r\n var handleSize, val;\r\n\r\n if (this.vertical) {\r\n handleSize = this.handle._height || this.handle.container.height;\r\n val = ((this._height - handleSize) * this._amt) + (handleSize * 0.5);\r\n if (soft) {\r\n Tween.to(this.handle, 0.3, { top: val }, Ease.Power2.easeOut);\r\n if (this.fill) Tween.to(this.fill, 0.3, { height: val }, Ease.Power2.easeOut);\r\n }\r\n else {\r\n Tween.set(this.handle, { top: val });\r\n if (this.fill) Tween.set(this.fill, { height: val });\r\n }\r\n }\r\n else {\r\n handleSize = this.handle._width || this.handle.container.width;\r\n val = ((this._width - handleSize) * this._amt) + (handleSize * 0.5);\r\n if (soft) {\r\n Tween.to(this.handle, 0.3, { left: val }, Ease.Power2.easeOut);\r\n if (this.fill) Tween.to(this.fill, 0.3, { width: val }, Ease.Power2.easeOut);\r\n }\r\n else {\r\n Tween.set(this.handle, { left: val });\r\n if (this.fill) Tween.set(this.fill, { width: val });\r\n }\r\n }\r\n};\r\n\r\nSlider.prototype.initialize = function () {\r\n UIBase.prototype.initialize.call(this);\r\n\r\n\r\n\r\n var self = this;\r\n var startValue = 0;\r\n\r\n\r\n\r\n ////Handle dragging\r\n var handleDrag = new DragEvent(this.handle);\r\n handleDrag.onPress = function (event, isPressed) {\r\n event.stopPropagation();\r\n };\r\n\r\n handleDrag.onDragStart = function (event) {\r\n startValue = self._amt;\r\n maxPosition = self.vertical ? self._height - self.handle._height : self._width - self.handle._width;\r\n };\r\n\r\n handleDrag.onDragMove = function (event, offset) {\r\n\r\n self._amt = !maxPosition ? 0 : Math.max(0, Math.min(1, startValue + ((self.vertical ? offset.y : offset.x) / maxPosition)));\r\n\r\n triggerValueChanging();\r\n self.update();\r\n };\r\n\r\n handleDrag.onDragEnd = function () {\r\n triggerValueChange();\r\n self.update();\r\n };\r\n\r\n //Bar pressing/dragging\r\n var localMousePosition = new PIXI.Point();\r\n var trackDrag = new DragEvent(this.track);\r\n\r\n trackDrag.onPress = function (event, isPressed) {\r\n if (isPressed)\r\n updatePositionToMouse(event.data.global, true);\r\n event.stopPropagation();\r\n };\r\n\r\n trackDrag.onDragMove = function (event) {\r\n updatePositionToMouse(event.data.global, false);\r\n };\r\n\r\n trackDrag.onDragEnd = function () {\r\n triggerValueChange();\r\n };\r\n\r\n var updatePositionToMouse = function (mousePosition, soft) {\r\n self.track.container.toLocal(mousePosition, null, localMousePosition, true);\r\n\r\n var newPos = self.vertical ? localMousePosition.y - self.handle._height * 0.5 : localMousePosition.x - self.handle._width * 0.5;\r\n var maxPos = self.vertical ? self._height - self.handle._height : self._width - self.handle._width;\r\n self._amt = !maxPos ? 0 : Math.max(0, Math.min(1, newPos / maxPos));\r\n self.update(soft);\r\n triggerValueChanging();\r\n };\r\n\r\n var triggerValueChange = function () {\r\n self.emit(\"change\", self.value);\r\n if (self._lastChange != self.value) {\r\n self._lastChange = self.value;\r\n if (typeof self.onValueChange === \"function\")\r\n self.onValueChange(self.value);\r\n }\r\n };\r\n\r\n var triggerValueChanging = function () {\r\n self.emit(\"changeing\", self.value);\r\n if (self._lastChanging != self.value) {\r\n self._lastChanging = self.value;\r\n if (typeof self._onValueChanging === \"function\")\r\n self._onValueChanging(self.value);\r\n }\r\n };\r\n};\r\n\r\n\r\nObject.defineProperties(Slider.prototype, {\r\n value: {\r\n get: function () {\r\n return Helpers.Round(Helpers.Lerp(this._minValue, this._maxValue, this._amt), this.decimals);\r\n },\r\n set: function (val) {\r\n this._amt = (Math.max(this._minValue, Math.min(this._maxValue, val)) - this._minValue) / (this._maxValue - this._minValue);\r\n if (typeof this.onValueChange === \"function\")\r\n self.onValueChange(this.value);\r\n if (typeof this._onValueChanging === \"function\")\r\n this._onValueChanging(this.value);\r\n this.update();\r\n }\r\n },\r\n\r\n onValueChange: {\r\n get: function () {\r\n return this._onValueChange;\r\n },\r\n set: function (val) {\r\n this._onValueChange = val;\r\n }\r\n },\r\n onValueChanging: {\r\n get: function () {\r\n return this._onValueChanging;\r\n },\r\n set: function (val) {\r\n this._onValueChanging = val;\r\n }\r\n },\r\n minValue: {\r\n get: function () {\r\n return this._minValue;\r\n },\r\n set: function (val) {\r\n this._minValue = val;\r\n this.update();\r\n }\r\n },\r\n maxValue: {\r\n get: function () {\r\n return this._maxValue;\r\n },\r\n set: function (val) {\r\n this._maxValue = val;\r\n this.update();\r\n }\r\n },\r\n disabled: {\r\n get: function () {\r\n return this._disabled;\r\n },\r\n set: function (val) {\r\n if (val !== this._disabled) {\r\n this._disabled = val;\r\n this.handle.container.buttonMode = !val;\r\n this.handle.container.interactive = !val;\r\n this.track.container.interactive = !val;\r\n }\r\n }\r\n }\r\n});","var Container = require('./Container');\r\nvar Tween = require('./Tween');\r\n/**\r\n * An UI Container object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param desc {Boolean} Sort the list descending\r\n * @param tweenTime {Number} if above 0 the sort will be animated\r\n * @param tweenEase {PIXI.UI.Ease} ease method used for animation\r\n */\r\nfunction SortableList(desc, tweenTime, tweenEase) {\r\n Container.call(this);\r\n this.desc = typeof desc !== \"undefined\" ? desc : false;\r\n this.tweenTime = tweenTime || 0;\r\n this.tweenEase = tweenEase;\r\n this.items = [];\r\n\r\n}\r\n\r\nSortableList.prototype = Object.create(Container.prototype);\r\nSortableList.prototype.constructor = SortableList;\r\nmodule.exports = SortableList;\r\n\r\nSortableList.prototype.addChild = function (UIObject, fnValue, fnThenBy) {\r\n Container.prototype.addChild.call(this, UIObject);\r\n if (this.items.indexOf(UIObject) == -1) {\r\n this.items.push(UIObject);\r\n }\r\n\r\n if (typeof fnValue === \"function\")\r\n UIObject._sortListValue = fnValue;\r\n\r\n if (typeof fnThenBy === \"function\")\r\n UIObject._sortListThenByValue = fnThenBy;\r\n\r\n if (!UIObject._sortListRnd)\r\n UIObject._sortListRnd = Math.random();\r\n\r\n\r\n\r\n this.sort();\r\n};\r\n\r\nSortableList.prototype.removeChild = function (UIObject) {\r\n if (arguments.length > 1) {\r\n for (var i = 0; i < arguments.length; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n Container.prototype.removeChild.call(this, UIObject);\r\n var index = this.items.indexOf(UIObject);\r\n if (index != -1) {\r\n this.items.splice(index, 1);\r\n }\r\n this.sort();\r\n }\r\n};\r\n\r\nSortableList.prototype.sort = function (instant) {\r\n clearTimeout(this._sortTimeout);\r\n\r\n if (instant) {\r\n this._sort();\r\n return;\r\n }\r\n\r\n var _this = this;\r\n this._sortTimeout = setTimeout(function () { _this._sort(); }, 0);\r\n};\r\n\r\nSortableList.prototype._sort = function () {\r\n var self = this,\r\n desc = this.desc,\r\n y = 0,\r\n alt = true;\r\n\r\n this.items.sort(function (a, b) {\r\n var res = a._sortListValue() < b._sortListValue() ? desc ? 1 : -1 :\r\n a._sortListValue() > b._sortListValue() ? desc ? -1 : 1 : 0;\r\n\r\n if (res === 0 && a._sortListThenByValue && b._sortListThenByValue) {\r\n res = a._sortListThenByValue() < b._sortListThenByValue() ? desc ? 1 : -1 :\r\n a._sortListThenByValue() > b._sortListThenByValue() ? desc ? -1 : 1 : 0;\r\n }\r\n if (res === 0) {\r\n res = a._sortListRnd > b._sortListRnd ? 1 :\r\n a._sortListRnd < b._sortListRnd ? -1 : 0;\r\n }\r\n return res;\r\n });\r\n\r\n for (var i = 0; i < this.items.length; i++) {\r\n var item = this.items[i];\r\n\r\n alt = !alt;\r\n\r\n if (this.tweenTime > 0) {\r\n Tween.fromTo(item, this.tweenTime, { x: item.x, y: item.y }, { x: 0, y: y }, this.tweenEase);\r\n }\r\n else {\r\n item.x = 0;\r\n item.y = y;\r\n }\r\n y += item.height;\r\n if (typeof item.altering === \"function\")\r\n item.altering(alt);\r\n }\r\n\r\n //force it to update parents when sort animation is done (prevent scrolling container bug)\r\n if (this.tweenTime > 0) {\r\n setTimeout(function () {\r\n self.updatesettings(false, true);\r\n }, this.tweenTime * 1000);\r\n }\r\n};\r\n\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI sprite object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} The texture for the sprite\r\n */\r\nfunction Sprite(t) {\r\n this.sprite = new PIXI.Sprite(t);\r\n UIBase.call(this, this.sprite.width, this.sprite.height);\r\n this.container.addChild(this.sprite);\r\n}\r\n\r\nSprite.prototype = Object.create(UIBase.prototype);\r\nSprite.prototype.constructor = Sprite;\r\nmodule.exports = Sprite;\r\n\r\n\r\nSprite.fromFrame = function (frameId) {\r\n return new Sprite(new PIXI.Texture.fromFrame(frameId));\r\n};\r\n\r\nSprite.fromImage = function (imageUrl) {\r\n return new Sprite(new PIXI.Texture.fromImage(imageUrl));\r\n};\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nSprite.prototype.update = function () {\r\n if (this.tint !== null)\r\n this.sprite.tint = this.tint;\r\n\r\n if (this.blendMode !== null)\r\n this.sprite.blendMode = this.blendMode;\r\n\r\n this.sprite.width = this._width;\r\n this.sprite.height = this._height;\r\n};\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * A Stage for UIObjects\r\n *\r\n * @class\r\n * @extends PIXI.UI.Container\r\n * @memberof PIXI.UI\r\n * @param width {Number} Width of the Stage\r\n * @param height {Number} Height of the Stage\r\n */\r\nfunction Stage(width, height) {\r\n PIXI.Container.call(this);\r\n this.__width = width;\r\n this.__height = height;\r\n this.minWidth = 0;\r\n this.minHeight = 0;\r\n\r\n this.UIChildren = [];\r\n this.stage = this;\r\n this.interactive = true;\r\n this.hitArea = new PIXI.Rectangle(0, 0, 0, 0);\r\n this.initialized = true;\r\n this.resize(width, height);\r\n}\r\n\r\nStage.prototype = Object.create(PIXI.Container.prototype);\r\nStage.prototype.constructor = Stage;\r\nmodule.exports = Stage;\r\n\r\nStage.prototype.addChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n if (UIObject.parent !== null)\r\n UIObject.parent.removeChild(UIObject);\r\n\r\n UIObject.parent = this;\r\n this.UIChildren.push(UIObject);\r\n PIXI.Container.prototype.addChild.call(this, UIObject.container);\r\n UIObject.updatesettings(true);\r\n }\r\n};\r\n\r\nStage.prototype.removeChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n PIXI.Container.prototype.removeChild.call(this, UIObject.container);\r\n var index = this.UIChildren.indexOf(UIObject);\r\n if (index != -1) {\r\n this.UIChildren.splice(index, 1);\r\n UIObject.parent = null;\r\n }\r\n\r\n }\r\n};\r\n\r\nStage.prototype.resize = function (width, height) {\r\n if (!isNaN(height)) this.__height = height;\r\n if (!isNaN(width)) this.__width = width;\r\n\r\n if (this.minWidth || this.minHeight) {\r\n var rx = 1,\r\n ry = 1;\r\n\r\n if (width && width < this.minWidth) {\r\n rx = this.minWidth / width;\r\n }\r\n\r\n if (height && height < this.minHeight) {\r\n ry = this.minHeight / height;\r\n }\r\n\r\n if (rx > ry && rx > 1) {\r\n this.scale.set(1 / rx);\r\n this.__height *= rx;\r\n this.__width *= rx;\r\n }\r\n else if (ry > 1) {\r\n this.scale.set(1 / ry);\r\n this.__width *= ry;\r\n this.__height *= ry;\r\n }\r\n else if (this.scale.x !== 1) {\r\n this.scale.set(1);\r\n }\r\n }\r\n\r\n this.hitArea.width = this.__width;\r\n this.hitArea.height = this.__height;\r\n\r\n for (var i = 0; i < this.UIChildren.length; i++)\r\n this.UIChildren[i].updatesettings(true, false);\r\n};\r\n\r\nObject.defineProperties(Stage.prototype, {\r\n _width: {\r\n get: function () {\r\n return this.__width;\r\n },\r\n set: function (val) {\r\n if (!isNaN(val)) {\r\n this.__width = val;\r\n this.resize();\r\n }\r\n }\r\n },\r\n _height: {\r\n get: function () {\r\n return this.__height;\r\n },\r\n set: function (val) {\r\n if (!isNaN(val)) {\r\n this.__height = val;\r\n this.resize();\r\n }\r\n }\r\n }\r\n});","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI text object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Text {String} Text content\r\n * @param TextStyle {PIXI.TextStyle} Style used for the Text\r\n */\r\nfunction Text(text, PIXITextStyle) {\r\n this._text = new PIXI.Text(text, PIXITextStyle);\r\n UIBase.call(this, this._text.width, this._text.height);\r\n this.container.addChild(this._text);\r\n\r\n this.baseupdate = function () {\r\n //force original text width unless using anchors\r\n if (this._anchorLeft === null || this._anchorRight === null) {\r\n this.setting.width = this._text.width;\r\n this.setting.widthPct = null;\r\n }\r\n else {\r\n this._text.width = this._width;\r\n }\r\n\r\n //force original text height unless using anchors\r\n if (this._anchorTop === null || this._anchorBottom === null) {\r\n this.setting.height = this._text.height;\r\n this.setting.heightPct = null;\r\n }\r\n else {\r\n this._text.width = this._width;\r\n }\r\n\r\n\r\n UIBase.prototype.baseupdate.call(this);\r\n };\r\n\r\n this.update = function () {\r\n //set tint\r\n if (this.tint !== null)\r\n this._text.tint = this.tint;\r\n\r\n //set blendmode\r\n if (this.blendMode !== null)\r\n this._text.blendMode = this.blendMode;\r\n };\r\n}\r\n\r\nText.prototype = Object.create(UIBase.prototype);\r\nText.prototype.constructor = Text;\r\nmodule.exports = Text;\r\n\r\n\r\nObject.defineProperties(Text.prototype, {\r\n value: {\r\n get: function () {\r\n return this._text.text;\r\n },\r\n set: function (val) {\r\n this._text.text = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n this.value = val;\r\n }\r\n }\r\n});","var InputBase = require('./InputBase'),\r\n Container = require('./Container'),\r\n DragEvent = require('./Interaction/DragEvent');\r\n\r\n/**\r\n * An UI text object\r\n *\r\n * @class\r\n * @extends PIXI.UI.InputBase\r\n * @memberof PIXI.UI\r\n * @param options.value {String} Text content\r\n * @param [options.multiLine=false] {Boolean} Multiline input\r\n * @param options.style {PIXI.TextStyle} Style used for the Text\r\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\r\n * @param [options.selectedColor='#ffffff'] {String|Array} Fill color of selected text\r\n * @param [options.selectedBackgroundColor='#318cfa'] {String} BackgroundColor of selected text\r\n * @param [options.width=150] {Number} width of input\r\n * @param [options.height=20] {Number} height of input\r\n * @param [options.padding=3] {Number} input padding\r\n * @param [options.paddingTop=0] {Number} input padding\r\n * @param [options.paddingBottom=0] {Number} input padding\r\n * @param [options.paddingLeft=0] {Number} input padding\r\n * @param [options.paddingRight=0] {Number} input padding\r\n * @param [options.tabIndex=0] {Number} input tab index\r\n * @param [options.tabGroup=0] {Number|String} input tab group\r\n * @param [options.maxLength=0] {Number} 0 = unlimited\r\n * @param [options.caretWidth=1] {Number} width of the caret\r\n * @param [options.lineHeight=0] {Number} 0 = inherit from text\r\n */\r\nfunction TextInput(options) {\r\n //create temp input (for mobile keyboard)\r\n if (typeof _pui_tempInput === \"undefined\") {\r\n _pui_tempInput = document.createElement(\"INPUT\");\r\n _pui_tempInput.setAttribute(\"type\", \"text\");\r\n _pui_tempInput.setAttribute(\"id\", \"_pui_tempInput\");\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:-10px; top:-10px; width:0px; height: 0px;\");\r\n document.body.appendChild(_pui_tempInput);\r\n }\r\n var width = typeof options.width !== 'undefined' ? options.width : options.background ? options.background.width : 150;\r\n var height = typeof options.height !== 'undefined' ? options.height : options.background ? options.background.height : 150;\r\n InputBase.call(this, width, height, options.tabIndex || 0, options.tabGroup || 0);\r\n\r\n this._dirtyText = true;\r\n this.maxLength = options.maxLength || 0;\r\n this._value = this._lastValue = options.value || \"\";\r\n\r\n if (this.maxLength) this._value = this._value.slice(0, this.maxLength);\r\n\r\n var self = this;\r\n var chars = [];\r\n var multiLine = options.multiLine !== undefined ? options.multiLine : false;\r\n var color = options.style && options.style.fill ? options.style.fill : \"#000000\";\r\n var selectedColor = options.selectedColor || \"#ffffff\";\r\n var selectedBackgroundColor = options.selectedBackgroundColor || \"#318cfa\";\r\n var tempText = new PIXI.Text(\"1\", options.style);\r\n var textHeight = tempText.height;\r\n var lineHeight = options.lineHeight || textHeight || self._height;\r\n tempText.destroy();\r\n\r\n\r\n //set cursor\r\n //this.container.cursor = \"text\";\r\n\r\n //selection graphics\r\n var selection = self.selection = new PIXI.Graphics();\r\n selection.visible = false;\r\n selection._startIndex = 0;\r\n selection._endIndex = 0;\r\n\r\n //caret graphics\r\n var caret = self.caret = new PIXI.Graphics();\r\n caret.visible = false;\r\n caret._index = 0;\r\n caret.lineStyle(options.caretWidth || 1, \"#ffffff\", 1);\r\n caret.moveTo(0, 0);\r\n caret.lineTo(0, textHeight);\r\n\r\n\r\n //insert bg\r\n if (options.background) {\r\n this.background = options.background;\r\n this.background.width = \"100%\";\r\n this.background.height = \"100%\";\r\n this.addChild(this.background);\r\n }\r\n\r\n //var padding\r\n var paddingLeft = options.paddingLeft !== undefined ? options.paddingLeft : options.padding !== undefined ? options.padding : 3;\r\n var paddingRight = options.paddingRight !== undefined ? options.paddingRight : options.padding !== undefined ? options.padding : 3;\r\n var paddingBottom = options.paddingBottom !== undefined ? options.paddingBottom : options.padding !== undefined ? options.padding : 3;\r\n var paddingTop = options.paddingTop !== undefined ? options.paddingTop : options.padding !== undefined ? options.padding : 3;\r\n\r\n //insert text container (scrolling container)\r\n var textContainer = this.textContainer = new PIXI.UI.ScrollingContainer({\r\n scrollX: !multiLine,\r\n scrollY: multiLine,\r\n dragScrolling: multiLine,\r\n expandMask: 2,\r\n softness: 0.2,\r\n overflowX: 40,\r\n overflowY: 40\r\n });\r\n textContainer.anchorTop = paddingTop;\r\n textContainer.anchorBottom = paddingBottom;\r\n textContainer.anchorLeft = paddingLeft;\r\n textContainer.anchorRight = paddingRight;\r\n this.addChild(textContainer);\r\n\r\n if (multiLine) {\r\n this._useNext = this._usePrev = false;\r\n textContainer.dragRestrictAxis = \"y\";\r\n textContainer.dragThreshold = 5;\r\n this.dragRestrictAxis = \"x\";\r\n this.dragThreshold = 5;\r\n\r\n }\r\n\r\n\r\n var innerContainer = textContainer.innerContainer;\r\n innerContainer.cacheAsBitmap = true;\r\n //textContainer.container.addChild(innerContainer);\r\n\r\n\r\n this.update = function () {\r\n if (this._width != this._lastWidth) {\r\n this._lastWidth = this._width;\r\n if (multiLine) {\r\n updateText();\r\n if (caret.visible) self.setCaretIndex(caret._index);\r\n if (hasSelection) updateSelectionGraphics();\r\n }\r\n\r\n }\r\n\r\n //update text \r\n if (this._dirtyText) {\r\n updateText();\r\n this._dirtyText = false;\r\n }\r\n };\r\n\r\n //selection Vars\r\n var caretInterval, //interval for flash\r\n si, //startIndex\r\n sie, //startIndexEnd\r\n ei, //endIndex\r\n eie, //endIndexEnd\r\n sp = new PIXI.Point(), //startposition\r\n ds = new PIXI.Point(), //dragStart\r\n de = new PIXI.Point(), //dragend\r\n rdd = false, //Reverse drag direction\r\n vrdd = false, //vertical Reverse drag direction\r\n selectionStart = -1,\r\n selectionEnd = -1,\r\n hasSelection = false,\r\n t = performance.now(), //timestamp\r\n cc = 0, //click counter\r\n textLengthPX = 0,\r\n textHeightPX = 0,\r\n lineIndexMax = 0,\r\n ctrlDown = false,\r\n shiftDown = false,\r\n shiftKey = 16,\r\n ctrlKey = 17,\r\n cmdKey = 91;\r\n\r\n\r\n\r\n var updateText = function () {\r\n textLengthPX = 0;\r\n textHeightPX = 0;\r\n lineIndexMax = 0;\r\n\r\n var lineIndex = 0,\r\n length = self._value.length,\r\n x = 0,\r\n y = (lineHeight - textHeight) * 0.5,\r\n i = 0;\r\n\r\n //destroy excess chars\r\n if (chars.length > length) {\r\n for (i = chars.length - 1; i >= length; i--) {\r\n innerContainer.removeChild(chars[i]);\r\n chars[i].destroy();\r\n }\r\n chars.splice(length, chars.length - length);\r\n }\r\n\r\n //update and add chars\r\n var whitespace = false;\r\n var newline = false;\r\n var wordIndex = 0;\r\n var lastWordIndex = -1;\r\n var wrap = false;\r\n for (i = 0; i < self._value.length; i++) {\r\n if (whitespace || newline) {\r\n lastWordIndex = i;\r\n wordIndex++;\r\n }\r\n\r\n var c = self._value[i];\r\n whitespace = c === \" \";\r\n newline = c === \"\\n\";\r\n\r\n\r\n if (newline) { //newline \"hack\". webgl render errors if \\n is passed to text\r\n c = \"\";\r\n }\r\n\r\n\r\n\r\n var charText = chars[i];\r\n if (!charText) {\r\n charText = new PIXI.Text(c, options.style);\r\n innerContainer.addChild(charText);\r\n chars.push(charText);\r\n }\r\n else {\r\n charText.text = c;\r\n }\r\n\r\n charText.scale.x = newline ? 0 : 1;\r\n charText.wrapped = wrap;\r\n wrap = false;\r\n\r\n if (newline || (multiLine && x + charText.width >= self._width - paddingLeft - paddingRight)) {\r\n lineIndex++;\r\n x = 0;\r\n y += lineHeight;\r\n\r\n if (lastWordIndex != -1 && !newline) {\r\n i = lastWordIndex - 1;\r\n lastWordIndex = -1;\r\n wrap = true;\r\n continue;\r\n }\r\n }\r\n\r\n\r\n charText.lineIndex = lineIndex;\r\n charText.x = x;\r\n charText.y = y;\r\n charText.wordIndex = whitespace || newline ? -1 : wordIndex;\r\n x += charText.width;\r\n\r\n\r\n if (x > textLengthPX)\r\n textLengthPX = x;\r\n if (y > textHeightPX)\r\n textHeightPX = y;\r\n }\r\n\r\n lineIndexMax = lineIndex;\r\n\r\n //put caret on top\r\n innerContainer.addChild(caret);\r\n\r\n //recache\r\n if (innerContainer.cacheAsBitmap) {\r\n innerContainer.cacheAsBitmap = false;\r\n innerContainer.cacheAsBitmap = true;\r\n }\r\n\r\n textContainer.update();\r\n\r\n };\r\n\r\n var updateClosestIndex = function (point, start) {\r\n var currentDistX = 99999;\r\n var currentClosest;\r\n var currentIndex = -1;\r\n var atEnd = false;\r\n\r\n var closestLineIndex = 0;\r\n if (lineIndexMax > 0)\r\n closestLineIndex = Math.max(0, Math.min(lineIndexMax, Math.floor(point.y / lineHeight)));\r\n\r\n\r\n\r\n\r\n\r\n for (var i = 0; i < chars.length; i++) {\r\n var char = chars[i];\r\n if (char.lineIndex != closestLineIndex) continue;\r\n\r\n var distX = Math.abs(point.x - (char.x + (char.width * 0.5)));\r\n if (distX < currentDistX) {\r\n currentDistX = distX;\r\n currentClosest = char;\r\n currentIndex = i;\r\n atEnd = point.x > char.x + (char.width * 0.5);\r\n }\r\n }\r\n\r\n\r\n if (start) {\r\n si = currentIndex;\r\n sie = atEnd;\r\n }\r\n else {\r\n ei = currentIndex;\r\n eie = atEnd;\r\n }\r\n };\r\n\r\n var deleteSelection = function () {\r\n if (hasSelection) {\r\n self.value = self.value.slice(0, selectionStart) + self.value.slice(selectionEnd + 1);\r\n self.setCaretIndex(selectionStart);\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n var updateSelectionColors = function () {\r\n //Color charecters\r\n for (var i = 0; i < chars.length; i++) {\r\n if (i >= selectionStart && i <= selectionEnd)\r\n chars[i].style.fill = selectedColor;\r\n else\r\n chars[i].style.fill = color;\r\n }\r\n };\r\n\r\n var _sp = new PIXI.Point();\r\n var scrollToPosition = function (pos) {\r\n _sp.copy(pos);\r\n if (multiLine && _sp.y >= lineHeight)\r\n _sp.y += lineHeight;\r\n textContainer.focusPosition(_sp);\r\n };\r\n\r\n var resetScrollPosition = function () {\r\n _sp.set(0, 0);\r\n textContainer.focusPosition(_sp);\r\n };\r\n\r\n //caret\r\n var hideCaret = function () {\r\n caret.visible = false;\r\n clearInterval(caretInterval);\r\n };\r\n\r\n var showCaret = function () {\r\n self.clearSelection();\r\n clearInterval(caretInterval);\r\n caret.alpha = 1;\r\n caret.visible = true;\r\n caretInterval = setInterval(function () {\r\n caret.alpha = caret.alpha === 0 ? 1 : 0;\r\n }, 500);\r\n\r\n };\r\n\r\n var insertTextAtCaret = function (c) {\r\n if (hasSelection)\r\n deleteSelection();\r\n if (!self.maxLength || chars.length < self.maxLength) {\r\n\r\n if (caret._atEnd) {\r\n self.valueEvent += c;\r\n self.setCaretIndex(chars.length);\r\n }\r\n else {\r\n var index = Math.min(chars.length - 1, caret._index);\r\n self.valueEvent = self.value.slice(0, index) + c + self.value.slice(index);\r\n self.setCaretIndex(index + c.length);\r\n }\r\n }\r\n };\r\n\r\n //events\r\n var keyDownEvent = function (e) {\r\n\r\n\r\n\r\n if (e.which === ctrlKey || e.which === cmdKey) ctrlDown = true;\r\n if (e.which === shiftKey) shiftDown = true;\r\n\r\n self.emit(\"keydown\", e);\r\n\r\n if (e.defaultPrevented)\r\n return;\r\n\r\n if (e.which === 13) { //enter\r\n insertTextAtCaret('\\n');\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (ctrlDown) {\r\n\r\n //ctrl + ?\r\n if (e.which === 65) { //ctrl + a\r\n self.select();\r\n e.preventDefault();\r\n return;\r\n }\r\n else if (e.which === 90) { //ctrl + z (undo)\r\n if (self.value != self._lastValue)\r\n self.valueEvent = self._lastValue;\r\n self.setCaretIndex(self._lastValue.length + 1);\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n }\r\n if (e.which === 8) {\r\n //backspace\r\n if (!deleteSelection()) {\r\n if (caret._index > 0 || (chars.length === 1 && caret._atEnd)) {\r\n if (caret._atEnd) {\r\n self.valueEvent = self.value.slice(0, chars.length - 1);\r\n self.setCaretIndex(caret._index);\r\n }\r\n else {\r\n self.valueEvent = self.value.slice(0, caret._index - 1) + self.value.slice(caret._index);\r\n self.setCaretIndex(caret._index - 1);\r\n }\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (e.which === 46) {\r\n //delete\r\n if (!deleteSelection()) {\r\n if (!caret._atEnd) {\r\n self.valueEvent = self.value.slice(0, caret._index) + self.value.slice(caret._index + 1);\r\n self.setCaretIndex(caret._index);\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n else if (e.which === 37 || e.which === 39) {\r\n rdd = e.which === 37;\r\n if (shiftDown) {\r\n if (hasSelection) {\r\n var caretAtStart = selectionStart === caret._index;\r\n if (caretAtStart) {\r\n if (selectionStart === selectionEnd && rdd === caret._forward) {\r\n self.setCaretIndex(caret._forward ? caret._index : caret._index + 1);\r\n }\r\n else {\r\n var startindex = rdd ? caret._index - 1 : caret._index + 1;\r\n self.selectRange(startindex, selectionEnd);\r\n caret._index = Math.min(chars.length - 1, Math.max(0, startindex));\r\n }\r\n }\r\n else {\r\n var endIndex = rdd ? caret._index - 1 : caret._index + 1;\r\n self.selectRange(selectionStart, endIndex);\r\n caret._index = Math.min(chars.length - 1, Math.max(0, endIndex));\r\n }\r\n }\r\n else {\r\n var _i = caret._atEnd ? caret._index + 1 : caret._index;\r\n var selectIndex = rdd ? _i - 1 : _i;\r\n self.selectRange(selectIndex, selectIndex);\r\n caret._index = selectIndex;\r\n caret._forward = !rdd;\r\n }\r\n }\r\n else {\r\n //Navigation\r\n if (hasSelection)\r\n self.setCaretIndex(rdd ? selectionStart : selectionEnd + 1);\r\n else\r\n self.setCaretIndex(caret._index + (rdd ? caret._atEnd ? 0 : -1 : 1));\r\n }\r\n e.preventDefault();\r\n return;\r\n\r\n }\r\n else if (multiLine && (e.which === 38 || e.which === 40)) {\r\n vrdd = e.which === 38;\r\n if (shiftDown) {\r\n if (hasSelection) {\r\n de.y = Math.max(0, Math.min(textHeightPX, de.y + (vrdd ? -lineHeight : lineHeight)));\r\n updateClosestIndex(de, false);\r\n //console.log(si, ei);\r\n if (Math.abs(si - ei) <= 1) {\r\n //console.log(si, ei);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n } else {\r\n caret._index = (eie ? ei + 1 : ei) + (caret._down ? -1 : 0);\r\n self.selectRange(caret._down ? si : si - 1, caret._index);\r\n }\r\n\r\n }\r\n else {\r\n si = caret._index;\r\n sie = false;\r\n de.copy(caret);\r\n de.y = Math.max(0, Math.min(textHeightPX, de.y + (vrdd ? -lineHeight : lineHeight)));\r\n updateClosestIndex(de, false);\r\n caret._index = (eie ? ei + 1 : ei) - (vrdd ? 0 : 1);\r\n self.selectRange(vrdd ? si - 1 : si, caret._index);\r\n caret._down = !vrdd;\r\n }\r\n }\r\n else {\r\n if (hasSelection) {\r\n self.setCaretIndex(vrdd ? selectionStart : selectionEnd + 1);\r\n }\r\n else {\r\n ds.copy(caret);\r\n ds.y += vrdd ? -lineHeight : lineHeight;\r\n ds.x += 1;\r\n updateClosestIndex(ds, true);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n };\r\n\r\n var keyUpEvent = function (e) {\r\n if (e.which == ctrlKey || e.which == cmdKey) ctrlDown = false;\r\n if (e.which === shiftKey) shiftDown = false;\r\n\r\n self.emit(\"keyup\", e);\r\n\r\n if (e.defaultPrevented)\r\n return;\r\n };\r\n\r\n var copyEvent = function (e) {\r\n self.emit(\"copy\", e);\r\n\r\n if (e.defaultPrevented)\r\n return;\r\n\r\n if (hasSelection) {\r\n var clipboardData = e.clipboardData || window.clipboardData;\r\n clipboardData.setData('Text', self.value.slice(selectionStart, selectionEnd + 1));\r\n }\r\n e.preventDefault();\r\n };\r\n\r\n var cutEvent = function (e) {\r\n self.emit(\"cut\", e);\r\n\r\n if (e.defaultPrevented)\r\n return;\r\n\r\n if (hasSelection) {\r\n copyEvent(e);\r\n deleteSelection();\r\n }\r\n e.preventDefault();\r\n };\r\n\r\n var pasteEvent = function (e) {\r\n self.emit(\"paste\", e);\r\n\r\n if (e.defaultPrevented)\r\n return;\r\n\r\n var clipboardData = e.clipboardData || window.clipboardData;\r\n insertTextAtCaret(clipboardData.getData('Text'));\r\n e.preventDefault();\r\n };\r\n\r\n var inputEvent = function (e) {\r\n insertTextAtCaret(e.data);\r\n e.preventDefault();\r\n };\r\n\r\n var inputBlurEvent = function (e) {\r\n self.blur();\r\n };\r\n\r\n var event = new DragEvent(this);\r\n\r\n event.onPress = function (e, mouseDown) {\r\n\r\n if (mouseDown) {\r\n var timeSinceLast = performance.now() - t;\r\n t = performance.now();\r\n if (timeSinceLast < 250) {\r\n cc++;\r\n if (cc > 1)\r\n this.select();\r\n else {\r\n innerContainer.toLocal(sp, undefined, ds, true);\r\n updateClosestIndex(ds, true);\r\n var c = chars[si];\r\n if (c) {\r\n if (c.wordIndex != -1)\r\n this.selectWord(c.wordIndex);\r\n else\r\n this.selectRange(si, si);\r\n }\r\n }\r\n }\r\n else {\r\n cc = 0;\r\n sp.copy(e.data.global);\r\n innerContainer.toLocal(sp, undefined, ds, true);\r\n if (chars.length) {\r\n updateClosestIndex(ds, true);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n }\r\n }\r\n e.data.originalEvent.preventDefault();\r\n };\r\n\r\n event.onDragMove = function (e, offset) {\r\n if (!chars.length || !this._focused) return;\r\n\r\n de.x = sp.x + offset.x;\r\n de.y = sp.y + offset.y;\r\n innerContainer.toLocal(de, undefined, de, true);\r\n updateClosestIndex(de, false);\r\n\r\n if (si < ei) {\r\n self.selectRange(sie ? si + 1 : si, eie ? ei : ei - 1);\r\n caret._index = eie ? ei : ei - 1;\r\n }\r\n else if (si > ei) {\r\n self.selectRange(ei, sie ? si : si - 1);\r\n caret._index = ei;\r\n }\r\n else {\r\n if (sie === eie) {\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n else {\r\n self.selectRange(si, ei);\r\n caret._index = ei;\r\n }\r\n }\r\n\r\n caret._forward = si <= ei;\r\n caret._down = offset.y > 0;\r\n\r\n scrollToPosition(de);\r\n };\r\n\r\n\r\n\r\n\r\n //public methods\r\n this.focus = function () {\r\n if (!this._focused) {\r\n InputBase.prototype.focus.call(this);\r\n\r\n var l = this.container.worldTransform.tx + \"px\";\r\n var t = this.container.worldTransform.ty + \"px\";\r\n var h = this.container.height + \"px\";\r\n var w = this.container.width + \"px\";\r\n\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:\" + l + \"; top:\" + t + \"; height:\" + h + \"; width:\" + w + \";\");\r\n _pui_tempInput.value = \"\";\r\n _pui_tempInput.focus();\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:-10px; top:-10px; width:0px; height: 0px;\");\r\n\r\n innerContainer.cacheAsBitmap = false;\r\n _pui_tempInput.addEventListener(\"blur\", inputBlurEvent, false);\r\n document.addEventListener(\"keydown\", keyDownEvent, false);\r\n document.addEventListener(\"keyup\", keyUpEvent, false);\r\n document.addEventListener('paste', pasteEvent, false);\r\n document.addEventListener('copy', copyEvent, false);\r\n document.addEventListener('cut', cutEvent, false);\r\n _pui_tempInput.addEventListener('textInput', inputEvent, false);\r\n\r\n setTimeout(function () {\r\n if (!caret.visible && !self.selection.visible && !multiLine)\r\n self.setCaretIndex(chars.length);\r\n }, 0);\r\n\r\n }\r\n\r\n };\r\n\r\n this.blur = function () {\r\n if (this._focused) {\r\n InputBase.prototype.blur.call(this);\r\n ctrlDown = false;\r\n shiftDown = false;\r\n hideCaret();\r\n this.clearSelection();\r\n if (chars.length > 1) innerContainer.cacheAsBitmap = true;\r\n _pui_tempInput.removeEventListener(\"blur\", inputBlurEvent);\r\n document.removeEventListener(\"keydown\", keyDownEvent);\r\n document.removeEventListener(\"keyup\", keyUpEvent);\r\n document.removeEventListener('paste', pasteEvent);\r\n document.removeEventListener('copy', copyEvent);\r\n document.removeEventListener('cut', cutEvent);\r\n _pui_tempInput.removeEventListener('textInput', inputEvent);\r\n _pui_tempInput.blur();\r\n\r\n }\r\n\r\n if (!multiLine)\r\n resetScrollPosition();\r\n };\r\n\r\n this.setCaretIndex = function (index) {\r\n caret._atEnd = index >= chars.length;\r\n caret._index = Math.max(0, Math.min(chars.length - 1, index));\r\n\r\n if (chars.length && index > 0) {\r\n\r\n var i = Math.max(0, Math.min(index, chars.length - 1));\r\n var c = chars[i];\r\n\r\n if (c && c.wrapped) {\r\n caret.x = c.x;\r\n caret.y = c.y;\r\n }\r\n else {\r\n i = Math.max(0, Math.min(index - 1, chars.length - 1));\r\n c = chars[i];\r\n caret.x = chars[i].x + chars[i].width;\r\n caret.y = (chars[i].lineIndex * lineHeight) + (lineHeight - textHeight) * 0.5;\r\n }\r\n }\r\n else {\r\n caret.x = 0;\r\n caret.y = (lineHeight - textHeight) * 0.5;\r\n }\r\n\r\n scrollToPosition(caret);\r\n showCaret();\r\n\r\n };\r\n\r\n this.select = function () {\r\n this.selectRange(0, chars.length - 1);\r\n };\r\n\r\n this.selectWord = function (wordIndex) {\r\n var startIndex = chars.length;\r\n var endIndex = 0;\r\n for (var i = 0; i < chars.length; i++) {\r\n if (chars[i].wordIndex !== wordIndex) continue;\r\n if (i < startIndex)\r\n startIndex = i;\r\n if (i > endIndex)\r\n endIndex = i;\r\n }\r\n\r\n this.selectRange(startIndex, endIndex);\r\n };\r\n\r\n var drawSelectionRect = function (x, y, w, h) {\r\n self.selection.beginFill(\"0x\" + selectedBackgroundColor.slice(1), 1);\r\n self.selection.moveTo(x, y);\r\n self.selection.lineTo(x + w, y);\r\n self.selection.lineTo(x + w, y + h);\r\n self.selection.lineTo(x, y + h);\r\n self.selection.endFill();\r\n };\r\n\r\n var updateSelectionGraphics = function () {\r\n var c1 = chars[selectionStart];\r\n if (c1 !== undefined) {\r\n var cx = c1.x,\r\n cy = c1.y,\r\n w = 0,\r\n h = textHeight,\r\n cl = c1.lineIndex;\r\n\r\n self.selection.clear();\r\n for (var i = selectionStart; i <= selectionEnd; i++) {\r\n var c = chars[i];\r\n if (c.lineIndex != cl) {\r\n drawSelectionRect(cx, cy, w, h);\r\n cx = c.x;\r\n cy = c.y;\r\n cl = c.lineIndex;\r\n w = 0;\r\n }\r\n w += c.width;\r\n }\r\n drawSelectionRect(cx, cy, w, h);\r\n innerContainer.addChildAt(self.selection, 0);\r\n }\r\n };\r\n\r\n this.selectRange = function (startIndex, endIndex) {\r\n if (startIndex > -1 && endIndex > -1) {\r\n var start = Math.min(startIndex, endIndex, chars.length - 1);\r\n var end = Math.min(Math.max(startIndex, endIndex), chars.length - 1);\r\n if (start != selectionStart || end != selectionEnd) {\r\n hasSelection = true;\r\n this.selection.visible = true;\r\n selectionStart = start;\r\n selectionEnd = end;\r\n hideCaret();\r\n updateSelectionGraphics();\r\n updateSelectionColors();\r\n }\r\n this.focus();\r\n }\r\n else {\r\n self.clearSelection();\r\n }\r\n };\r\n\r\n this.clearSelection = function () {\r\n if (hasSelection) {\r\n //remove color\r\n hasSelection = false;\r\n this.selection.visible = false;\r\n selectionStart = -1;\r\n selectionEnd = -1;\r\n updateSelectionColors();\r\n }\r\n };\r\n}\r\n\r\nTextInput.prototype = Object.create(InputBase.prototype);\r\nTextInput.prototype.constructor = TextInput;\r\nmodule.exports = TextInput;\r\n\r\nObject.defineProperties(TextInput.prototype, {\r\n valueEvent: {\r\n get: function () {\r\n return this._value;\r\n },\r\n set: function (val) {\r\n if (this.maxLength)\r\n val = val.slice(0, this.maxLength);\r\n\r\n if (this._value != val) {\r\n this.value = val;\r\n this.emit(\"change\");\r\n }\r\n }\r\n },\r\n value: {\r\n get: function () {\r\n return this._value;\r\n },\r\n set: function (val) {\r\n if (this.maxLength)\r\n val = val.slice(0, this.maxLength);\r\n\r\n if (this._value != val) {\r\n this._lastValue = this._value;\r\n this._value = val;\r\n this._dirtyText = true;\r\n this.update();\r\n\r\n }\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n this.value = val;\r\n }\r\n }\r\n});\r\n\r\n\r\n/*\r\n * Features:\r\n * multiLine, shift selection, Mouse Selection, Cut, Copy, Paste, Delete, Backspace, Arrow navigation, tabIndex\r\n * \r\n * Methods:\r\n * blur()\r\n * focus()\r\n * select() - selects all text\r\n * selectRange(startIndex, endIndex)\r\n * clearSelection() \r\n * setCaretIndex(index) moves caret to index\r\n * \r\n * \r\n * Events:\r\n * \"change\"\r\n * \"blur\"\r\n * \"blur\"\r\n * \"focus\"\r\n * \"focusChanged\" param: [bool]focus\r\n * \"keyup\" param: Event\r\n * \"keydown\" param: Event\r\n * \"copy\" param: Event\r\n * \"paste\" param: Event\r\n * \"cut\" param: Event\r\n * \"keyup\" param: Event\r\n */","var Tween = require('./Tween');\r\n\r\nfunction Ticker(autoStart) {\r\n PIXI.utils.EventEmitter.call(this);\r\n this._disabled = true;\r\n this._now = 0;\r\n\r\n this.DeltaTime = 0;\r\n this.Time = performance.now();\r\n this.Ms = 0;\r\n if (autoStart) {\r\n this.disabled = false;\r\n }\r\n Ticker.shared = this;\r\n}\r\n\r\nTicker.prototype = Object.create(PIXI.utils.EventEmitter.prototype);\r\nTicker.prototype.constructor = Ticker;\r\n\r\nmodule.exports = Ticker;\r\n\r\n\r\n\r\nObject.defineProperties(Ticker.prototype, {\r\n disabled: {\r\n get: function () {\r\n return this._disabled;\r\n },\r\n set: function (val) {\r\n if (!this._disabled) {\r\n this._disabled = true;\r\n }\r\n else {\r\n this._disabled = false;\r\n Ticker.shared = this;\r\n this.update(performance.now(), true);\r\n }\r\n }\r\n },\r\n});\r\n\r\n\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nTicker.prototype.update = function (time) {\r\n Ticker.shared._now = time;\r\n Ticker.shared.Ms = Ticker.shared._now - Ticker.shared.Time;\r\n Ticker.shared.Time = Ticker.shared._now;\r\n Ticker.shared.DeltaTime = Ticker.shared.Ms * 0.001;\r\n Ticker.shared.emit(\"update\", Ticker.shared.DeltaTime);\r\n Tween._update(Ticker.shared.DeltaTime);\r\n if (!Ticker.shared._disabled)\r\n requestAnimationFrame(Ticker.shared.update);\r\n};\r\n\r\n\r\n\r\n\r\nTicker.on = function (event, fn, context) {\r\n Ticker.prototype.on.apply(this.shared, arguments);\r\n};\r\n\r\nTicker.once = function (event, fn, context) {\r\n Ticker.prototype.once.apply(this.shared, arguments);\r\n};\r\n\r\nTicker.removeListener = function (event, fn) {\r\n Ticker.prototype.removeListener.apply(this.shared, arguments);\r\n};\r\n\r\n\r\nTicker.shared = new Ticker(true);","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI sprite object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} The texture for the sprite\r\n * @param [Width=Texture.width] {number} Width of tilingsprite\r\n * @param [Height=Texture.height] {number} Height of tiling sprite\r\n */\r\nfunction TilingSprite(t, width, height) {\r\n this.sprite = new PIXI.extras.TilingSprite(t);\r\n UIBase.call(this, width || this.sprite.width, height || this.sprite.height);\r\n this.container.addChild(this.sprite);\r\n}\r\n\r\nTilingSprite.prototype = Object.create(UIBase.prototype);\r\nTilingSprite.prototype.constructor = TilingSprite;\r\nmodule.exports = TilingSprite;\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nTilingSprite.prototype.update = function () {\r\n if (this.tint !== null)\r\n this.sprite.tint = this.tint;\r\n\r\n if (this.blendMode !== null)\r\n this.sprite.blendMode = this.blendMode;\r\n\r\n this.sprite.width = this._width;\r\n this.sprite.height = this._height;\r\n};\r\n\r\nObject.defineProperties(TilingSprite.prototype, {\r\n tilePosition: {\r\n get: function () {\r\n return this.sprite.tilePosition;\r\n },\r\n set: function (val) {\r\n this.sprite.tilePosition = val;\r\n }\r\n },\r\n tileScale: {\r\n get: function () {\r\n return this.sprite.tileScale;\r\n },\r\n set: function (val) {\r\n this.sprite.tileScale = val;\r\n }\r\n }\r\n});","var Helpers = require('./Helpers');\r\nvar Ease = require('./Ease/Ease');\r\nvar _tweenItemCache = [];\r\nvar _callbackItemCache = [];\r\nvar _tweenObjects = {};\r\nvar _activeTweenObjects = {};\r\nvar _currentId = 1;\r\n\r\nvar TweenObject = function (object) {\r\n this.object = object;\r\n this.tweens = {};\r\n this.active = false;\r\n};\r\n\r\nvar CallbackItem = function () {\r\n this._ready = false;\r\n this.obj = null;\r\n this.parent = null;\r\n this.key = \"\";\r\n this.time = 0;\r\n this.callback = null;\r\n this.currentTime = 0;\r\n};\r\n\r\nCallbackItem.prototype.remove = function () {\r\n this._ready = true;\r\n delete this.parent.tweens[this.key];\r\n if (!Object.keys(this.parent.tweens).length) {\r\n this.parent.active = false;\r\n delete _activeTweenObjects[this.obj._tweenObjectId];\r\n }\r\n};\r\n\r\nCallbackItem.prototype.set = function (obj, callback, time) {\r\n this.obj = obj.object;\r\n\r\n if (!this.obj._currentCallbackID)\r\n this.obj._currentCallbackID = 1;\r\n else\r\n this.obj._currentCallbackID++;\r\n\r\n this.time = time;\r\n this.parent = obj;\r\n this.callback = callback;\r\n this._ready = false;\r\n this.key = \"cb_\" + this.obj._currentCallbackID;\r\n this.currentTime = 0;\r\n if (!this.parent.active) {\r\n this.parent.active = true;\r\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\r\n }\r\n};\r\n\r\nCallbackItem.prototype.update = function (delta) {\r\n this.currentTime += delta;\r\n if (this.currentTime >= this.time) {\r\n this.remove();\r\n this.callback();\r\n }\r\n};\r\n\r\n\r\n\r\nvar TweenItem = function () {\r\n this._ready = false;\r\n this.parent = null;\r\n this.obj = null;\r\n this.key = \"\";\r\n this.from = 0;\r\n this.to = 0;\r\n this.time = 0;\r\n this.ease = 0;\r\n this.currentTime = 0;\r\n this.t = 0;\r\n this.isColor = false;\r\n};\r\n\r\nTweenItem.prototype.remove = function () {\r\n this._ready = true;\r\n delete this.parent.tweens[this.key];\r\n if (!Object.keys(this.parent.tweens).length) {\r\n this.parent.active = false;\r\n delete _activeTweenObjects[this.obj._tweenObjectId];\r\n }\r\n};\r\n\r\nTweenItem.prototype.set = function (obj, key, from, to, time, ease) {\r\n this.isColor = isNaN(from) && from[0] == \"#\" || isNaN(to) && to[0] == \"#\";\r\n this.parent = obj;\r\n this.obj = obj.object;\r\n this.key = key;\r\n this.surfix = getSurfix(to);\r\n\r\n if (this.isColor) {\r\n this.to = Helpers.hexToRgb(to);\r\n this.from = Helpers.hexToRgb(from);\r\n this.currentColor = { r: this.from.r, g: this.from.g, b: this.from.b };\r\n }\r\n else {\r\n this.to = getToValue(to);\r\n this.from = getFromValue(from, to, this.obj, key);\r\n }\r\n\r\n this.time = time;\r\n this.currentTime = 0;\r\n this.ease = ease;\r\n this._ready = false;\r\n\r\n if (!this.parent.active) {\r\n this.parent.active = true;\r\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\r\n }\r\n\r\n};\r\n\r\nTweenItem.prototype.update = function (delta) {\r\n this.currentTime += delta;\r\n this.t = Math.min(this.currentTime, this.time) / this.time;\r\n if (this.ease)\r\n this.t = this.ease.getPosition(this.t);\r\n\r\n if (this.isColor) {\r\n this.currentColor.r = Math.round(Helpers.Lerp(this.from.r, this.to.r, this.t));\r\n this.currentColor.g = Math.round(Helpers.Lerp(this.from.g, this.to.g, this.t));\r\n this.currentColor.b = Math.round(Helpers.Lerp(this.from.b, this.to.b, this.t));\r\n this.obj[this.key] = Helpers.rgbToNumber(this.currentColor.r, this.currentColor.g, this.currentColor.b);\r\n }\r\n else {\r\n var val = Helpers.Lerp(this.from, this.to, this.t);\r\n this.obj[this.key] = this.surfix ? val + this.surfix : val;\r\n }\r\n\r\n \r\n\r\n if (this.currentTime >= this.time) {\r\n this.remove();\r\n }\r\n};\r\n\r\n\r\nvar widthKeys = [\"width\", \"minWidth\", \"maxWidth\", \"anchorLeft\", \"anchorRight\", \"left\", \"right\", \"x\"];\r\nvar heightKeys = [\"height\", \"minHeight\", \"maxHeight\", \"anchorTop\", \"anchorBottom\", \"top\", \"bottom\", \"y\"];\r\n\r\n\r\nfunction getFromValue(from, to, obj, key) {\r\n //both number\r\n if (!isNaN(from) && !isNaN(to))\r\n return from;\r\n\r\n //both percentage\r\n if (isNaN(from) && isNaN(to) && from.indexOf('%') !== -1 && to.indexOf('%') !== -1)\r\n return parseFloat(from.replace('%', ''));\r\n\r\n //convert from to px\r\n if (isNaN(from) && !isNaN(to) && from.indexOf('%') !== -1) {\r\n if (widthKeys.indexOf(key) !== -1)\r\n return obj.parent._width * (parseFloat(from.replace('%', '')) * 0.01);\r\n else if (heightKeys.indexOf(key) !== -1)\r\n return obj.parent._height * (parseFloat(from.replace('%', '')) * 0.01);\r\n else\r\n return 0;\r\n }\r\n\r\n //convert from to percentage\r\n if (!isNaN(from) && isNaN(to) && to.indexOf('%') !== -1) {\r\n if (widthKeys.indexOf(key) !== -1)\r\n return from / obj.parent._width * 100;\r\n else if (heightKeys.indexOf(key) !== -1)\r\n return from / obj.parent._height * 100;\r\n else\r\n return 0;\r\n }\r\n return 0;\r\n}\r\n\r\nfunction getSurfix(to) {\r\n if (isNaN(to) && to.indexOf('%') !== -1)\r\n return \"%\";\r\n}\r\n\r\nfunction getToValue(to) {\r\n if (!isNaN(to))\r\n return to;\r\n if (isNaN(to) && to.indexOf('%') !== -1)\r\n return parseFloat(to.replace('%', ''));\r\n}\r\n\r\n\r\nfunction getObject(obj) {\r\n if (!obj._tweenObjectId) {\r\n obj._tweenObjectId = _currentId;\r\n _currentId++;\r\n }\r\n var object = _tweenObjects[obj._tweenObjectId];\r\n if (!object) {\r\n object = _tweenObjects[obj._tweenObjectId] = new TweenObject(obj);\r\n }\r\n return object;\r\n}\r\n\r\nfunction getTweenItem() {\r\n for (var i = 0; i < _tweenItemCache.length; i++) {\r\n if (_tweenItemCache[i]._ready)\r\n return _tweenItemCache[i];\r\n }\r\n\r\n var tween = new TweenItem();\r\n _tweenItemCache.push(tween);\r\n return tween;\r\n}\r\n\r\nfunction getCallbackItem() {\r\n for (var i = 0; i < _callbackItemCache.length; i++) {\r\n if (_callbackItemCache[i]._ready)\r\n return _callbackItemCache[i];\r\n }\r\n\r\n var cb = new CallbackItem();\r\n _callbackItemCache.push(cb);\r\n return cb;\r\n}\r\n\r\nvar Tween = {\r\n to: function (obj, time, params, ease) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, params[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n\r\n if (time) {\r\n var match = params[key] == obj[key];\r\n if (typeof obj[key] === \"undefined\") continue;\r\n\r\n if (match) {\r\n if (object.tweens[key]) object.tweens[key].remove();\r\n }\r\n else {\r\n if (!object.tweens[key])\r\n object.tweens[key] = getTweenItem();\r\n object.tweens[key].set(object, key, obj[key], params[key], time, ease);\r\n }\r\n }\r\n }\r\n if (!time) this.set(obj, params);\r\n },\r\n from: function (obj, time, params, ease) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, params[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n\r\n if (time) {\r\n var match = params[key] == obj[key];\r\n if (typeof obj[key] === \"undefined\") continue;\r\n\r\n if (match) {\r\n if (object.tweens[key]) object.tweens[key].remove();\r\n }\r\n else {\r\n if (!object.tweens[key])\r\n object.tweens[key] = getTweenItem();\r\n object.tweens[key].set(object, key, params[key], obj[key], time, ease);\r\n }\r\n }\r\n }\r\n if (!time) this.set(obj, params);\r\n },\r\n fromTo: function (obj, time, paramsFrom, paramsTo, ease) {\r\n var object = getObject(obj);\r\n for (var key in paramsTo) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, paramsTo[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n if (time) {\r\n var match = paramsFrom[key] == paramsTo[key];\r\n if (typeof obj[key] === \"undefined\" || typeof paramsFrom[key] === \"undefined\") continue;\r\n\r\n if (match) {\r\n if (object.tweens[key]) object.tweens[key].remove();\r\n obj[key] = paramsTo[key];\r\n }\r\n else {\r\n if (!object.tweens[key]) {\r\n object.tweens[key] = getTweenItem();\r\n }\r\n object.tweens[key].set(object, key, paramsFrom[key], paramsTo[key], time, ease);\r\n }\r\n\r\n }\r\n }\r\n if (!time) this.set(obj, paramsTo);\r\n },\r\n set: function (obj, params) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (typeof obj[key] === \"undefined\") continue;\r\n if (object.tweens[key]) object.tweens[key].remove();\r\n obj[key] = params[key];\r\n }\r\n },\r\n _update: function (delta) {\r\n for (var id in _activeTweenObjects) {\r\n var object = _activeTweenObjects[id];\r\n for (var key in object.tweens) {\r\n object.tweens[key].update(delta);\r\n }\r\n }\r\n }\r\n};\r\n\r\n\r\nmodule.exports = Tween;","var UI = {\r\n Stage: require('./Stage'),\r\n Container: require('./Container'),\r\n ScrollingContainer: require('./ScrollingContainer'),\r\n SortableList: require('./SortableList'),\r\n Sprite: require('./Sprite'),\r\n TilingSprite: require('./TilingSprite'),\r\n SliceSprite: require('./SliceSprite'),\r\n Slider: require('./Slider'),\r\n ScrollBar: require('./ScrollBar'),\r\n Text: require('./Text'),\r\n DynamicText: require('./DynamicText/DynamicText'),\r\n DynamicTextStyle: require('./DynamicText/DynamicTextStyle'),\r\n TextInput: require('./TextInput'),\r\n Button: require('./Button'),\r\n CheckBox: require('./CheckBox'),\r\n Helpers: require('./Helpers'),\r\n Tween: require('./Tween'),\r\n Ease: require('./Ease/Ease'),\r\n Interaction: require('./Interaction/Interaction'),\r\n Base: require('./UIBase'),\r\n Ticker: require('./Ticker').shared,\r\n};\r\n\r\n\r\nmodule.exports = UI;","var UISettings = require('./UISettings'),\r\n UI = require('./UI'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n DragDropController = require('./Interaction/DragDropController');\r\n\r\n/**\r\n * Base class of all UIObjects\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @param width {Number} Width of the UIObject\r\n * @param height {Number} Height of the UIObject\r\n */\r\nfunction UIBase(width, height) {\r\n PIXI.utils.EventEmitter.call(this);\r\n this.container = new PIXI.Container();\r\n this.setting = new UISettings();\r\n this.children = [];\r\n this.parent = null;\r\n this.stage = null;\r\n this.initialized = false;\r\n this.dragInitialized = false;\r\n this.dropInitialized = false;\r\n this.dirty = true;\r\n this._oldWidth = -1;\r\n this._oldHeight = -1;\r\n this.pixelPerfect = true;\r\n\r\n\r\n if (width && isNaN(width) && width.indexOf('%') != -1) {\r\n this.setting.widthPct = parseFloat(width.replace('%', '')) * 0.01;\r\n }\r\n else {\r\n this.setting.widthPct = null;\r\n }\r\n\r\n if (height && isNaN(height) && height.indexOf('%') != -1)\r\n this.setting.heightPct = parseFloat(height.replace('%', '')) * 0.01;\r\n else {\r\n this.setting.heightPct = null;\r\n }\r\n\r\n this.setting.width = width || 0;\r\n this.setting.height = height || 0;\r\n\r\n //actual values\r\n this._width = 0;\r\n this._height = 0;\r\n this._minWidth = null;\r\n this._minHeight = null;\r\n this._maxWidth = null;\r\n this._maxHeight = null;\r\n this._anchorLeft = null;\r\n this._anchorRight = null;\r\n this._anchorTop = null;\r\n this._anchorBottom = null;\r\n this._left = null;\r\n this._right = null;\r\n this._top = null;\r\n this._bottom = null;\r\n\r\n this._dragPosition = null; //used for overriding positions if tweens is playing\r\n}\r\n\r\nUIBase.prototype = Object.create(PIXI.utils.EventEmitter.prototype);\r\nUIBase.prototype.constructor = UIBase;\r\nmodule.exports = UIBase;\r\n\r\n/**\r\n * Renders the object using the WebGL renderer\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updatesettings = function (updateChildren, updateParent) {\r\n\r\n if (!this.initialized) {\r\n if (this.parent !== null && this.parent.stage !== null && this.parent.initialized) {\r\n this.initialize();\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n\r\n if (updateParent) this.updateParent();\r\n this.baseupdate();\r\n this.update();\r\n if (updateChildren) this.updateChildren();\r\n};\r\n\r\n/**\r\n * Update method (override from other UIObjects)\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.update = function () {\r\n};\r\n\r\n\r\n/**\r\n * Updates the parent\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updateParent = function () {\r\n if (this.parent !== null) {\r\n if (this.parent.updatesettings) {\r\n this.parent.updatesettings(false, true);\r\n }\r\n }\r\n};\r\n\r\n\r\n/**\r\n * Updates the UIObject with all base settings\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.baseupdate = function () {\r\n //return if parent size didnt change\r\n if (this.parent !== null) {\r\n var parentHeight, parentWidth;\r\n\r\n\r\n\r\n //transform convertion (% etc)\r\n this.dirty = true; \r\n this._width = this.actual_width;\r\n this._height = this.actual_height;\r\n this._minWidth = this.actual_minWidth;\r\n this._minHeight = this.actual_minHeight;\r\n this._maxWidth = this.actual_maxWidth;\r\n this._maxHeight = this.actual_maxHeight;\r\n this._anchorLeft = this.actual_anchorLeft;\r\n this._anchorRight = this.actual_anchorRight;\r\n this._anchorTop = this.actual_anchorTop;\r\n this._anchorBottom = this.actual_anchorBottom;\r\n this._left = this.actual_left;\r\n this._right = this.actual_right;\r\n this._top = this.actual_top;\r\n this._bottom = this.actual_bottom;\r\n this._parentWidth = parentWidth = this.parent._width;\r\n this._parentHeight = parentHeight = this.parent._height;\r\n this.dirty = false;\r\n\r\n\r\n var pivotXOffset = this.pivotX * this._width;\r\n var pivotYOffset = this.pivotY * this._height;\r\n\r\n if (this.pixelPerfect) {\r\n pivotXOffset = Math.round(pivotXOffset);\r\n pivotYOffset = Math.round(pivotYOffset);\r\n }\r\n\r\n\r\n if (this.horizontalAlign === null) {\r\n //get anchors (use left right if conflict)\r\n if (this._anchorLeft !== null && this._anchorRight === null && this._right !== null)\r\n this._anchorRight = this._right;\r\n else if (this._anchorLeft === null && this._anchorRight !== null && this._left !== null)\r\n this._anchorLeft = this._left;\r\n else if (this._anchorLeft === null && this._anchorRight === null && this._left !== null && this._right !== null) {\r\n this._anchorLeft = this._left;\r\n this._anchorRight = this._right;\r\n }\r\n\r\n\r\n var useHorizontalAnchor = this._anchorLeft !== null || this._anchorRight !== null;\r\n var useLeftRight = !useHorizontalAnchor && (this._left !== null || this._right !== null);\r\n\r\n if (useLeftRight) {\r\n if (this._left !== null)\r\n this.container.position.x = this._left;\r\n else if (this._right !== null)\r\n this.container.position.x = parentWidth - this._right;\r\n }\r\n else if (useHorizontalAnchor) {\r\n\r\n if (this._anchorLeft !== null && this._anchorRight === null)\r\n this.container.position.x = this._anchorLeft;\r\n else if (this._anchorLeft === null && this._anchorRight !== null)\r\n this.container.position.x = parentWidth - this._width - this._anchorRight;\r\n else if (this._anchorLeft !== null && this._anchorRight !== null) {\r\n this.container.position.x = this._anchorLeft;\r\n this._width = parentWidth - this._anchorLeft - this._anchorRight;\r\n }\r\n this.container.position.x += pivotXOffset;\r\n }\r\n else {\r\n this.container.position.x = 0;\r\n }\r\n }\r\n\r\n\r\n\r\n if (this.verticalAlign === null) {\r\n //get anchors (use top bottom if conflict)\r\n if (this._anchorTop !== null && this._anchorBottom === null && this._bottom !== null)\r\n this._anchorBottom = this._bottom;\r\n if (this._anchorTop === null && this._anchorBottom !== null && this._top !== null)\r\n this._anchorTop = this._top;\r\n\r\n var useVerticalAnchor = this._anchorTop !== null || this._anchorBottom !== null;\r\n var useTopBottom = !useVerticalAnchor && (this._top !== null || this._bottom !== null);\r\n\r\n if (useTopBottom) {\r\n if (this._top !== null)\r\n this.container.position.y = this._top;\r\n else if (this._bottom !== null)\r\n this.container.position.y = parentHeight - this._bottom;\r\n }\r\n else if (useVerticalAnchor) {\r\n if (this._anchorTop !== null && this._anchorBottom === null)\r\n this.container.position.y = this._anchorTop;\r\n else if (this._anchorTop === null && this._anchorBottom !== null)\r\n this.container.position.y = parentHeight - this._height - this._anchorBottom;\r\n else if (this._anchorTop !== null && this._anchorBottom !== null) {\r\n this.container.position.y = this._anchorTop;\r\n this._height = parentHeight - this._anchorTop - this._anchorBottom;\r\n }\r\n this.container.position.y += pivotYOffset;\r\n }\r\n else {\r\n this.container.position.y = 0;\r\n }\r\n }\r\n\r\n //min/max sizes\r\n if (this._maxWidth !== null && this._width > this._maxWidth) this._width = this._maxWidth;\r\n if (this._width < this._minWidth) this._width = this._minWidth;\r\n\r\n if (this._maxHeight !== null && this._height > this._maxHeight) this._height = this._maxHeight;\r\n if (this._height < this._minHeight) this._height = this._minHeight;\r\n\r\n\r\n //pure vertical/horizontal align\r\n if (this.horizontalAlign !== null) {\r\n if (this.horizontalAlign == \"center\")\r\n this.container.position.x = parentWidth * 0.5 - this._width * 0.5;\r\n else if (this.horizontalAlign == \"right\")\r\n this.container.position.x = parentWidth - this._width;\r\n else\r\n this.container.position.x = 0;\r\n this.container.position.x += pivotXOffset;\r\n }\r\n if (this.verticalAlign !== null) {\r\n if (this.verticalAlign == \"middle\")\r\n this.container.position.y = parentHeight * 0.5 - this._height * 0.5;\r\n else if (this.verticalAlign == \"bottom\")\r\n this.container.position.y = parentHeight - this._height;\r\n else\r\n this.container.position.y = 0;\r\n this.container.position.y += pivotYOffset;\r\n }\r\n\r\n\r\n //Unrestricted dragging\r\n if (this.dragging && !this.setting.dragRestricted) {\r\n this.container.position.x = this._dragPosition.x;\r\n this.container.position.y = this._dragPosition.y;\r\n }\r\n\r\n\r\n //scale\r\n if (this.setting.scaleX !== null) this.container.scale.x = this.setting.scaleX;\r\n if (this.setting.scaleY !== null) this.container.scale.y = this.setting.scaleY;\r\n\r\n //pivot\r\n if (this.setting.pivotX !== null) this.container.pivot.x = pivotXOffset;\r\n if (this.setting.pivotY !== null) this.container.pivot.y = pivotYOffset;\r\n\r\n if (this.setting.alpha !== null) this.container.alpha = this.setting.alpha;\r\n if (this.setting.rotation !== null) this.container.rotation = this.setting.rotation;\r\n\r\n //make pixel perfect\r\n if (this.pixelPerfect) {\r\n this._width = Math.round(this._width);\r\n this._height = Math.round(this._height);\r\n this.container.position.x = Math.round(this.container.position.x);\r\n this.container.position.y = Math.round(this.container.position.y);\r\n }\r\n\r\n\r\n\r\n }\r\n};\r\n\r\n\r\n/**\r\n * Updates all UI Children\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updateChildren = function () {\r\n for (var i = 0; i < this.children.length; i++) {\r\n this.children[i].updatesettings(true);\r\n }\r\n};\r\n\r\nUIBase.prototype.addChild = function (UIObject) {\r\n var argumentsLength = arguments.length;\r\n if (argumentsLength > 1) {\r\n for (var i = 0; i < argumentsLength; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n if (UIObject.parent) {\r\n UIObject.parent.removeChild(UIObject);\r\n }\r\n\r\n UIObject.parent = this;\r\n this.container.addChild(UIObject.container);\r\n this.children.push(UIObject);\r\n this.updatesettings(true, true);\r\n }\r\n\r\n return UIObject;\r\n};\r\n\r\nUIBase.prototype.removeChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n var index = this.children.indexOf(UIObject);\r\n if (index !== -1) {\r\n var oldUIParent = UIObject.parent;\r\n var oldParent = UIObject.container.parent;\r\n UIObject.container.parent.removeChild(UIObject.container);\r\n this.children.splice(index, 1);\r\n UIObject.parent = null;\r\n\r\n //oldParent._recursivePostUpdateTransform();\r\n setTimeout(function () { //hack but cant get the transforms to update propertly otherwice?\r\n if (oldUIParent.updatesettings)\r\n oldUIParent.updatesettings(true, true);\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Initializes the object when its added to an UIStage\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.initialize = function () {\r\n this.initialized = true;\r\n this.stage = this.parent.stage;\r\n if (this.draggable) {\r\n this.initDraggable();\r\n }\r\n\r\n if (this.droppable) {\r\n this.initDroppable();\r\n }\r\n};\r\n\r\nUIBase.prototype.clearDraggable = function () {\r\n if (this.dragInitialized) {\r\n this.dragInitialized = false;\r\n this.drag.stopEvent();\r\n }\r\n};\r\n\r\nUIBase.prototype.initDraggable = function () {\r\n if (!this.dragInitialized) {\r\n this.dragInitialized = true;\r\n var containerStart = new PIXI.Point(),\r\n stageOffset = new PIXI.Point(),\r\n self = this;\r\n\r\n this._dragPosition = new PIXI.Point();\r\n this.drag = new DragEvent(this);\r\n this.drag.onDragStart = function (e) {\r\n \r\n var added = DragDropController.add(this, e);\r\n if (!this.dragging && added) {\r\n this.dragging = true;\r\n this.container.interactive = false;\r\n containerStart.copy(this.container.position);\r\n if (this.dragContainer) {\r\n var c = this.dragContainer.container ? this.dragContainer.container : this.dragContainer;\r\n if (c) {\r\n //_this.container._recursivePostUpdateTransform();\r\n stageOffset.set(c.worldTransform.tx - this.parent.container.worldTransform.tx, c.worldTransform.ty - this.parent.container.worldTransform.ty);\r\n c.addChild(this.container);\r\n }\r\n } else {\r\n stageOffset.set(0);\r\n }\r\n this.emit(\"draggablestart\", e);\r\n }\r\n\r\n \r\n };\r\n\r\n\r\n this.drag.onDragMove = function (e, offset) {\r\n if (this.dragging) {\r\n this._dragPosition.set(containerStart.x + offset.x - stageOffset.x, containerStart.y + offset.y - stageOffset.y);\r\n this.x = this._dragPosition.x;\r\n this.y = this._dragPosition.y;\r\n this.emit(\"draggablemove\", e);\r\n }\r\n \r\n };\r\n\r\n this.drag.onDragEnd = function (e) {\r\n if (this.dragging) {\r\n this.dragging = false;\r\n //Return to container after 0ms if not picked up by a droppable\r\n setTimeout(function () {\r\n self.container.interactive = true;\r\n var item = DragDropController.getItem(self);\r\n if (item) {\r\n var container = self.parent === self.stage ? self.stage : self.parent.container;\r\n container.toLocal(self.container.position, self.container.parent, self);\r\n if (container != self.container) {\r\n self.parent.addChild(self);\r\n }\r\n }\r\n self.emit(\"draggableend\", e);\r\n }, 0);\r\n }\r\n \r\n };\r\n }\r\n};\r\n\r\nUIBase.prototype.clearDroppable = function () {\r\n if (this.dropInitialized) {\r\n this.dropInitialized = false;\r\n this.container.removeListener('mouseup', this.onDrop);\r\n this.container.removeListener('touchend', this.onDrop);\r\n }\r\n};\r\n\r\nUIBase.prototype.initDroppable = function () {\r\n if (!this.dropInitialized) {\r\n this.dropInitialized = true;\r\n var container = this.container,\r\n self = this;\r\n\r\n this.container.interactive = true;\r\n this.onDrop = function (event) {\r\n var item = DragDropController.getEventItem(event, self.dropGroup);\r\n if (item && item.dragging) {\r\n item.dragging = false;\r\n item.container.interactive = true;\r\n var parent = self.droppableReparent !== null ? self.droppableReparent : self;\r\n parent.container.toLocal(item.container.position, item.container.parent, item);\r\n if (parent.container != item.container.parent)\r\n parent.addChild(item);\r\n }\r\n };\r\n\r\n container.on('mouseup', this.onDrop);\r\n container.on('touchend', this.onDrop);\r\n }\r\n};\r\n\r\nObject.defineProperties(UIBase.prototype, {\r\n x: {\r\n get: function () {\r\n return this.setting.left;\r\n },\r\n set: function (val) {\r\n this.left = val;\r\n }\r\n },\r\n y: {\r\n get: function () {\r\n return this.setting.top;\r\n },\r\n set: function (val) {\r\n this.top = val;\r\n }\r\n },\r\n width: {\r\n get: function () {\r\n return this.setting.width;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.widthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.widthPct = null;\r\n \r\n this.setting.width = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_width: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.widthPct !== null) {\r\n this._width = this.parent._width * this.setting.widthPct;\r\n }\r\n else {\r\n this._width = this.setting.width;\r\n }\r\n }\r\n return this._width;\r\n }\r\n },\r\n height: {\r\n get: function () {\r\n return this.setting.height;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.heightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.heightPct = null;\r\n \r\n this.setting.height = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_height: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.heightPct !== null) {\r\n this._height = this.parent._height * this.setting.heightPct;\r\n }\r\n else {\r\n this._height = this.setting.height;\r\n }\r\n }\r\n return this._height;\r\n }\r\n },\r\n minWidth: {\r\n get: function () {\r\n return this.setting.minWidth;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.minWidthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.minWidthPct = null;\r\n \r\n this.setting.minWidth = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_minWidth: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.minWidthPct !== null) {\r\n this._minWidth = this.parent._width * this.setting.minWidthPct;\r\n }\r\n else {\r\n this._minWidth = this.setting.minWidth;\r\n }\r\n }\r\n return this._minWidth;\r\n }\r\n },\r\n minHeight: {\r\n get: function () {\r\n return this.setting.minHeight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.minHeightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.minHeightPct = null;\r\n \r\n this.setting.minHeight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_minHeight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.minHeightPct !== null) {\r\n this._minHeight = this.parent._height * this.setting.minHeightPct;\r\n }\r\n else {\r\n this._minHeight = this.setting.minHeight;\r\n }\r\n }\r\n return this._minHeight;\r\n }\r\n },\r\n maxWidth: {\r\n get: function () {\r\n return this.setting.maxWidth;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.maxWidthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.maxWidthPct = null;\r\n \r\n\r\n this.setting.maxWidth = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_maxWidth: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.maxWidthPct !== null) {\r\n this._maxWidth = this.parent._width * this.setting.maxWidthPct;\r\n }\r\n else {\r\n this._maxWidth = this.setting.maxWidth;\r\n }\r\n }\r\n return this._maxWidth;\r\n }\r\n },\r\n maxHeight: {\r\n get: function () {\r\n return this.setting.maxHeight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.maxHeightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.maxHeightPct = null;\r\n \r\n this.setting.maxHeight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_maxHeight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.maxHeightPct !== null) {\r\n this._maxHeight = this.parent._height * this.setting.maxHeightPct;\r\n }\r\n else {\r\n this._maxHeight = this.setting.maxHeight;\r\n }\r\n }\r\n return this._maxHeight;\r\n }\r\n },\r\n anchorLeft: {\r\n get: function () {\r\n return this.setting.anchorLeft;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1) \r\n this.setting.anchorLeftPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else \r\n this.setting.anchorLeftPct = null;\r\n \r\n this.setting.anchorLeft = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorLeft: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorLeftPct !== null) {\r\n this._anchorLeft = this.parent._width * this.setting.anchorLeftPct;\r\n }\r\n else {\r\n this._anchorLeft = this.setting.anchorLeft;\r\n }\r\n }\r\n return this._anchorLeft;\r\n }\r\n },\r\n anchorRight: {\r\n get: function () {\r\n return this.setting.anchorRight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorRightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.anchorRightPct = null;\r\n \r\n this.setting.anchorRight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorRight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorRightPct !== null) {\r\n this._anchorRight = this.parent._width * this.setting.anchorRightPct;\r\n }\r\n else {\r\n this._anchorRight = this.setting.anchorRight;\r\n }\r\n }\r\n return this._anchorRight;\r\n }\r\n },\r\n anchorTop: {\r\n get: function () {\r\n return this.setting.anchorTop;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorTopPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.anchorTopPct = null;\r\n \r\n this.setting.anchorTop = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorTop: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorTopPct !== null) {\r\n this._anchorTop = this.parent._height * this.setting.anchorTopPct;\r\n }\r\n else {\r\n this._anchorTop = this.setting.anchorTop;\r\n }\r\n }\r\n return this._anchorTop;\r\n }\r\n },\r\n anchorBottom: {\r\n get: function () {\r\n return this.setting.anchorBottom;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorBottomPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else \r\n this.setting.anchorBottomPct = null;\r\n \r\n this.setting.anchorBottom = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorBottom: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorBottomPct !== null) {\r\n this._anchorBottom = this.parent._height * this.setting.anchorBottomPct;\r\n }\r\n else {\r\n this._anchorBottom = this.setting.anchorBottom;\r\n }\r\n }\r\n return this._anchorBottom;\r\n }\r\n },\r\n left: {\r\n get: function () {\r\n return this.setting.left;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.leftPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.leftPct = null;\r\n \r\n this.setting.left = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_left: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.leftPct !== null) {\r\n this._left = this.parent._width * this.setting.leftPct;\r\n }\r\n else {\r\n this._left = this.setting.left;\r\n }\r\n }\r\n return this._left;\r\n }\r\n },\r\n right: {\r\n get: function () {\r\n return this.setting.right;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.rightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.rightPct = null;\r\n\r\n this.setting.right = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_right: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.rightPct !== null) {\r\n this._right = this.parent._width * this.setting.rightPct;\r\n }\r\n else {\r\n this._right = this.setting.right;\r\n }\r\n }\r\n return this._right;\r\n }\r\n },\r\n top: {\r\n get: function () {\r\n return this.setting.top;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.topPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.topPct = null;\r\n\r\n this.setting.top = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_top: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.topPct !== null) {\r\n this._top = this.parent._height * this.setting.topPct;\r\n }\r\n else {\r\n this._top = this.setting.top;\r\n }\r\n }\r\n return this._top;\r\n }\r\n },\r\n bottom: {\r\n get: function () {\r\n return this.setting.bottom;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.bottomPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.bottomPct = null;\r\n\r\n this.setting.bottom = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_bottom: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.bottomPct !== null) {\r\n this._bottom = this.parent._height * this.setting.bottomPct;\r\n }\r\n else {\r\n this._bottom = this.setting.bottom;\r\n }\r\n }\r\n return this._bottom;\r\n }\r\n },\r\n verticalAlign: {\r\n get: function () {\r\n return this.setting.verticalAlign;\r\n },\r\n set: function (val) {\r\n this.setting.verticalAlign = val;\r\n this.baseupdate();\r\n }\r\n },\r\n horizontalAlign: {\r\n get: function () {\r\n return this.setting.horizontalAlign;\r\n },\r\n set: function (val) {\r\n this.setting.horizontalAlign = val;\r\n this.baseupdate();\r\n }\r\n },\r\n tint: {\r\n get: function () {\r\n return this.setting.tint;\r\n },\r\n set: function (val) {\r\n this.setting.tint = val;\r\n this.update();\r\n }\r\n },\r\n alpha: {\r\n get: function () {\r\n return this.setting.alpha;\r\n },\r\n set: function (val) {\r\n this.setting.alpha = val;\r\n this.container.alpha = val;\r\n }\r\n },\r\n rotation: {\r\n get: function () {\r\n return this.setting.rotation;\r\n },\r\n set: function (val) {\r\n this.setting.rotation = val;\r\n this.container.rotation = val;\r\n }\r\n },\r\n blendMode: {\r\n get: function () {\r\n return this.setting.blendMode;\r\n },\r\n set: function (val) {\r\n this.setting.blendMode = val;\r\n this.update();\r\n }\r\n },\r\n pivotX: {\r\n get: function () {\r\n return this.setting.pivotX;\r\n },\r\n set: function (val) {\r\n this.setting.pivotX = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n pivotY: {\r\n get: function () {\r\n return this.setting.pivotY;\r\n },\r\n set: function (val) {\r\n this.setting.pivotY = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n pivot: {\r\n set: function (val) {\r\n this.setting.pivotX = val;\r\n this.setting.pivotY = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n scaleX: {\r\n get: function () {\r\n return this.setting.scaleX;\r\n },\r\n set: function (val) {\r\n this.setting.scaleX = val;\r\n this.container.scale.x = val;\r\n }\r\n },\r\n scaleY: {\r\n get: function () {\r\n return this.setting.scaleY;\r\n },\r\n set: function (val) {\r\n this.setting.scaleY = val;\r\n this.container.scale.y = val;\r\n }\r\n },\r\n scale: {\r\n get: function () {\r\n return this.setting.scaleX;\r\n },\r\n set: function (val) {\r\n this.setting.scaleX = val;\r\n this.setting.scaleY = val;\r\n this.container.scale.x = val;\r\n this.container.scale.y = val;\r\n }\r\n },\r\n\r\n draggable: {\r\n get: function () {\r\n return this.setting.draggable;\r\n },\r\n set: function (val) {\r\n this.setting.draggable = val;\r\n if (this.initialized) {\r\n if (val)\r\n this.initDraggable();\r\n else\r\n this.clearDraggable();\r\n }\r\n }\r\n },\r\n dragRestricted: {\r\n get: function () {\r\n return this.setting.dragRestricted;\r\n },\r\n set: function (val) {\r\n this.setting.dragRestricted = val;\r\n }\r\n },\r\n dragRestrictAxis: {\r\n get: function () {\r\n return this.setting.dragRestrictAxis;\r\n },\r\n set: function (val) {\r\n this.setting.dragRestrictAxis = val;\r\n }\r\n },\r\n dragThreshold: {\r\n get: function () {\r\n return this.setting.dragThreshold;\r\n },\r\n set: function (val) {\r\n this.setting.dragThreshold = val;\r\n }\r\n },\r\n dragGroup: {\r\n get: function () {\r\n return this.setting.dragGroup;\r\n },\r\n set: function (val) {\r\n this.setting.dragGroup = val;\r\n }\r\n },\r\n dragContainer: {\r\n get: function () {\r\n return this.setting.dragContainer;\r\n },\r\n set: function (val) {\r\n this.setting.dragContainer = val;\r\n }\r\n },\r\n droppable: {\r\n get: function () {\r\n return this.setting.droppable;\r\n },\r\n set: function (val) {\r\n this.setting.droppable = true;\r\n if (this.initialized) {\r\n if (val)\r\n this.initDroppable();\r\n else\r\n this.clearDroppable();\r\n }\r\n }\r\n },\r\n droppableReparent: {\r\n get: function () {\r\n return this.setting.droppableReparent;\r\n },\r\n set: function (val) {\r\n this.setting.droppableReparent = val;\r\n }\r\n },\r\n dropGroup: {\r\n get: function () {\r\n return this.setting.dropGroup;\r\n },\r\n set: function (val) {\r\n this.setting.dropGroup = val;\r\n }\r\n },\r\n renderable: {\r\n get: function () {\r\n return this.container.renderable;\r\n },\r\n set: function (val) {\r\n this.container.renderable = val;\r\n }\r\n },\r\n visible: {\r\n get: function () {\r\n return this.container.visible;\r\n },\r\n set: function (val) {\r\n this.container.visible = val;\r\n }\r\n },\r\n cacheAsBitmap: {\r\n get: function () {\r\n return this.container.cacheAsBitmap;\r\n },\r\n set: function (val) {\r\n this.container.cacheAsBitmap = val;\r\n }\r\n },\r\n onClick: {\r\n get: function () {\r\n return this.container.click;\r\n },\r\n set: function (val) {\r\n this.container.click = val;\r\n }\r\n },\r\n interactive: {\r\n get: function () {\r\n return this.container.interactive;\r\n },\r\n set: function (val) {\r\n this.container.interactive = val;\r\n }\r\n },\r\n interactiveChildren: {\r\n get: function () {\r\n return this.container.interactiveChildren;\r\n },\r\n set: function (val) {\r\n this.container.interactiveChildren = val;\r\n }\r\n },\r\n parentLayer: {\r\n get: function () {\r\n return this.container.parentLayer;\r\n },\r\n set: function (val) {\r\n this.container.parentLayer = val;\r\n }\r\n }\r\n});","/**\r\n * Settings object for all UIObjects\r\n *\r\n * @class\r\n * @memberof PIXI.UI\r\n */\r\nfunction UISettings() {\r\n this.width = 0;\r\n this.height = 0;\r\n this.minHeight = 0;\r\n this.maxWidth = null;\r\n this.maxHeight = null;\r\n this.left = null;\r\n this.right = null;\r\n this.top = null;\r\n this.bottom = null;\r\n this.anchorLeft = null;\r\n this.anchorRight = null;\r\n this.anchorTop = null;\r\n this.anchorBottom = null;\r\n\r\n this.widthPct = null;\r\n this.heightPct = null;\r\n this.minWidthPct = null;\r\n this.minHeightPct = null;\r\n this.maxWidthPct = null;\r\n this.maxHeightPct = null;\r\n this.minWidth = 0;\r\n this.leftPct = null;\r\n this.rightPct = null;\r\n this.topPct = null;\r\n this.bottomPct = null;\r\n this.anchorLeftPct = null;\r\n this.anchorRightPct = null;\r\n this.anchorTopPct = null;\r\n this.anchorBottomPct = null;\r\n\r\n this.pivotX = 0;\r\n this.pivotY = 0;\r\n this.scaleX = 1;\r\n this.scaleY = 1;\r\n this.verticalAlign = null;\r\n this.horizontalAlign = null;\r\n this.rotation = null;\r\n this.blendMode = null;\r\n this.tint = null;\r\n this.alpha = 1;\r\n\r\n\r\n this.draggable = null;\r\n this.dragRestricted = false;\r\n this.dragRestrictAxis = null; //x, y\r\n this.dragThreshold = 0;\r\n this.dragGroup = null;\r\n this.dragContainer = null;\r\n this.droppable = null;\r\n this.droppableReparent = null;\r\n this.dropGroup = null;\r\n}\r\n\r\n\r\nmodule.exports = UISettings;\r\n\r\n\r\n","\r\nvar Library = {\r\n UI: require('./UI')\r\n};\r\n\r\n//dump everything into extras\r\n\r\nObject.assign(PIXI, Library);\r\n\r\nmodule.exports = Library;\r\n"],"sourceRoot":"."}