{"version":3,"file":"axes.js","sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 561488d8ae03d88e6d17","webpack:///./src/utils.ts","webpack:///./src/inputType/InputType.ts","webpack:///./src/Coordinate.ts","webpack:///./src/AxisManager.ts","webpack:///external {\"commonjs\":\"hammerjs\",\"commonjs2\":\"hammerjs\",\"amd\":\"hammerjs\",\"root\":\"Hammer\"}","webpack:///./src/const.ts","webpack:///./src/index.ts","webpack:///./src/Axes.ts","webpack:///external {\"commonjs\":\"@egjs/component\",\"commonjs2\":\"@egjs/component\",\"amd\":\"@egjs/component\",\"root\":[\"eg\",\"Component\"]}","webpack:///./src/AnimationManager.ts","webpack:///./src/EventManager.ts","webpack:///./src/InterruptManager.ts","webpack:///./src/InputObserver.ts","webpack:///./src/inputType/PanInput.ts","webpack:///./src/inputType/PinchInput.ts","webpack:///./src/inputType/WheelInput.ts","webpack:///./src/inputType/MoveKeyInput.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"hammerjs\"), require(\"@egjs/component\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"hammerjs\", \"@egjs/component\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Axes\"] = factory(require(\"hammerjs\"), require(\"@egjs/component\"));\n\telse\n\t\troot[\"eg\"] = root[\"eg\"] || {}, root[\"eg\"][\"Axes\"] = factory(root[\"Hammer\"], root[\"eg\"][\"Component\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_8__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 561488d8ae03d88e6d17","\"use strict\";\r\nexports.__esModule = true;\r\nfunction toArray(nodes) {\r\n // const el = Array.prototype.slice.call(nodes);\r\n // for IE8\r\n var el = [];\r\n for (var i = 0, len = nodes.length; i < len; i++) {\r\n el.push(nodes[i]);\r\n }\r\n return el;\r\n}\r\nexports.toArray = toArray;\r\nfunction $(param, multi) {\r\n if (multi === void 0) { multi = false; }\r\n var el;\r\n if (typeof param === \"string\") {\r\n // check if string is HTML tag format\r\n var match = param.match(/^<([a-z]+)\\s*([^>]*)>/);\r\n // creating element\r\n if (match) {\r\n var dummy = document.createElement(\"div\");\r\n dummy.innerHTML = param;\r\n el = toArray(dummy.childNodes);\r\n }\r\n else {\r\n el = toArray(document.querySelectorAll(param));\r\n }\r\n if (!multi) {\r\n el = el.length >= 1 ? el[0] : undefined;\r\n }\r\n }\r\n else if (param === window) {\r\n el = param;\r\n }\r\n else if (param.nodeName &&\r\n (param.nodeType === 1 || param.nodeType === 9)) {\r\n el = param;\r\n }\r\n else if ((\"jQuery\" in window && param instanceof jQuery) ||\r\n param.constructor.prototype.jquery) {\r\n el = multi ? param.toArray() : param.get(0);\r\n }\r\n else if (Array.isArray(param)) {\r\n el = param.map(function (v) { return $(v); });\r\n if (!multi) {\r\n el = el.length >= 1 ? el[0] : undefined;\r\n }\r\n }\r\n return el;\r\n}\r\nexports.$ = $;\r\nvar raf = window.requestAnimationFrame || window.webkitRequestAnimationFrame;\r\nvar caf = window.cancelAnimationFrame || window.webkitCancelAnimationFrame;\r\nif (raf && !caf) {\r\n var keyInfo_1 = {};\r\n var oldraf_1 = raf;\r\n raf = function (callback) {\r\n function wrapCallback(timestamp) {\r\n if (keyInfo_1[key]) {\r\n callback(timestamp);\r\n }\r\n }\r\n var key = oldraf_1(wrapCallback);\r\n keyInfo_1[key] = true;\r\n return key;\r\n };\r\n caf = function (key) {\r\n delete keyInfo_1[key];\r\n };\r\n}\r\nelse if (!(raf && caf)) {\r\n raf = function (callback) {\r\n return window.setTimeout(function () {\r\n callback(window.performance && window.performance.now && window.performance.now() || new Date().getTime());\r\n }, 16);\r\n };\r\n caf = window.clearTimeout;\r\n}\r\n/**\r\n * A polyfill for the window.requestAnimationFrame() method.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame\r\n * @private\r\n */\r\nfunction requestAnimationFrame(fp) {\r\n return raf(fp);\r\n}\r\nexports.requestAnimationFrame = requestAnimationFrame;\r\n;\r\n/**\r\n* A polyfill for the window.cancelAnimationFrame() method. It cancels an animation executed through a call to the requestAnimationFrame() method.\r\n* @param {Number} key −\tThe ID value returned through a call to the requestAnimationFrame() method. requestAnimationFrame() 메서드가 반환한 아이디 값\r\n* @see https://developer.mozilla.org/en-US/docs/Web/API/Window/cancelAnimationFrame\r\n* @private\r\n*/\r\nfunction cancelAnimationFrame(key) {\r\n caf(key);\r\n}\r\nexports.cancelAnimationFrame = cancelAnimationFrame;\r\n;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/utils.ts\n// module id = 0\n// module chunks = 0 1","\"use strict\";\r\nexports.__esModule = true;\r\nvar Hammer = require(\"hammerjs\");\r\nexports.SUPPORT_TOUCH = \"ontouchstart\" in window;\r\nexports.UNIQUEKEY = \"_EGJS_AXES_INPUTTYPE_\";\r\nfunction toAxis(source, offset) {\r\n return offset.reduce(function (acc, v, i) {\r\n if (source[i]) {\r\n acc[source[i]] = v;\r\n }\r\n return acc;\r\n }, {});\r\n}\r\nexports.toAxis = toAxis;\r\n;\r\nfunction createHammer(element, recognizers, inputClass) {\r\n try {\r\n var options = {\r\n recognizers: [\r\n recognizers\r\n ],\r\n // css properties were removed due to usablility issue\r\n // http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html\r\n cssProps: {\r\n userSelect: \"none\",\r\n touchSelect: \"none\",\r\n touchCallout: \"none\",\r\n userDrag: \"none\"\r\n }\r\n };\r\n inputClass && (options[\"inputClass\"] = inputClass);\r\n // create Hammer\r\n return new Hammer.Manager(element, options);\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n}\r\nexports.createHammer = createHammer;\r\n;\r\nfunction convertInputType(inputType) {\r\n if (inputType === void 0) { inputType = []; }\r\n var hasTouch = false;\r\n var hasMouse = false;\r\n inputType.forEach(function (v) {\r\n switch (v) {\r\n case \"mouse\":\r\n hasMouse = true;\r\n break;\r\n case \"touch\": hasTouch = exports.SUPPORT_TOUCH;\r\n }\r\n });\r\n return (hasTouch && Hammer.TouchInput) ||\r\n (hasMouse && Hammer.MouseInput) || null;\r\n}\r\nexports.convertInputType = convertInputType;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/inputType/InputType.ts\n// module id = 1\n// module chunks = 0 1","\"use strict\";\r\nexports.__esModule = true;\r\nvar Coordinate = {\r\n getInsidePosition: function (destPos, range, circular, bounce) {\r\n var toDestPos = destPos;\r\n var targetRange = [\r\n circular[0] ? range[0] : (bounce ? range[0] - bounce[0] : range[0]),\r\n circular[1] ? range[1] : (bounce ? range[1] + bounce[1] : range[1])\r\n ];\r\n toDestPos = Math.max(targetRange[0], toDestPos);\r\n toDestPos = Math.min(targetRange[1], toDestPos);\r\n return +toDestPos.toFixed(5);\r\n },\r\n // determine outside\r\n isOutside: function (pos, range) {\r\n return pos < range[0] || pos > range[1];\r\n },\r\n getDuration: function (distance, deceleration) {\r\n var duration = Math.sqrt(distance / deceleration * 2);\r\n // when duration is under 100, then value is zero\r\n return duration < 100 ? 0 : duration;\r\n },\r\n isCircularable: function (destPos, range, circular) {\r\n return (circular[1] && destPos > range[1]) ||\r\n (circular[0] && destPos < range[0]);\r\n },\r\n getCirculatedPos: function (pos, range, circular) {\r\n var toPos = pos;\r\n var min = range[0];\r\n var max = range[1];\r\n var length = max - min;\r\n if (circular[1] && pos > max) {\r\n toPos = (toPos - max) % length + min;\r\n }\r\n if (circular[0] && pos < min) {\r\n toPos = (toPos - min) % length + max;\r\n }\r\n return +toPos.toFixed(5);\r\n }\r\n};\r\nexports[\"default\"] = Coordinate;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/Coordinate.ts\n// module id = 2\n// module chunks = 0 1","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.__esModule = true;\r\nvar Coordinate_1 = require(\"./Coordinate\");\r\n;\r\nvar AxisManager = /** @class */ (function () {\r\n function AxisManager(axis, options) {\r\n var _this = this;\r\n this.axis = axis;\r\n this.options = options;\r\n this._complementOptions();\r\n this._pos = Object.keys(this.axis).reduce(function (acc, v) {\r\n acc[v] = _this.axis[v].range[0];\r\n return acc;\r\n }, {});\r\n }\r\n AxisManager.equal = function (target, base) {\r\n for (var k in target) {\r\n if (target[k] !== base[k]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n /**\r\n * set up 'css' expression\r\n * @private\r\n */\r\n AxisManager.prototype._complementOptions = function () {\r\n var _this = this;\r\n Object.keys(this.axis).forEach(function (axis) {\r\n _this.axis[axis] = __assign({\r\n range: [0, 100],\r\n bounce: [0, 0],\r\n circular: [false, false]\r\n }, _this.axis[axis]);\r\n [\"bounce\", \"circular\"].forEach(function (v) {\r\n var axisOption = _this.axis;\r\n var key = axisOption[axis][v];\r\n if (/string|number|boolean/.test(typeof key)) {\r\n axisOption[axis][v] = [key, key];\r\n }\r\n });\r\n });\r\n };\r\n AxisManager.prototype.getDelta = function (depaPos, destPos) {\r\n var fullDepaPos = this.get(depaPos);\r\n return this.map(this.get(destPos), function (v, k) { return v - fullDepaPos[k]; });\r\n };\r\n AxisManager.prototype.get = function (axes) {\r\n var _this = this;\r\n if (axes && Array.isArray(axes)) {\r\n return axes.reduce(function (acc, v) {\r\n if (v && (v in _this._pos)) {\r\n acc[v] = _this._pos[v];\r\n }\r\n return acc;\r\n }, {});\r\n }\r\n else {\r\n return __assign({}, this._pos, (axes || {}));\r\n }\r\n };\r\n AxisManager.prototype.moveTo = function (pos) {\r\n var _this = this;\r\n var delta = this.map(this._pos, function (v, key) {\r\n return pos[key] ? pos[key] - _this._pos[key] : 0;\r\n });\r\n this.set(pos);\r\n return {\r\n pos: __assign({}, this._pos),\r\n delta: delta\r\n };\r\n };\r\n AxisManager.prototype.set = function (pos) {\r\n for (var k in pos) {\r\n if (k && (k in this._pos)) {\r\n this._pos[k] = pos[k];\r\n }\r\n }\r\n };\r\n AxisManager.prototype.every = function (pos, callback) {\r\n var axisOptions = this.axis;\r\n for (var k in pos) {\r\n if (k) {\r\n if (!callback(pos[k], k, axisOptions[k])) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n AxisManager.prototype.filter = function (pos, callback) {\r\n var filtered = {};\r\n var axisOptions = this.axis;\r\n for (var k in pos) {\r\n if (k) {\r\n callback(pos[k], k, axisOptions[k]) && (filtered[k] = pos[k]);\r\n }\r\n }\r\n return filtered;\r\n };\r\n AxisManager.prototype.map = function (pos, callback) {\r\n var tranformed = {};\r\n var axisOptions = this.axis;\r\n for (var k in pos) {\r\n if (k) {\r\n tranformed[k] = callback(pos[k], k, axisOptions[k]);\r\n }\r\n }\r\n return tranformed;\r\n };\r\n AxisManager.prototype.isOutside = function (axes) {\r\n return !this.every(axes ? this.get(axes) : this._pos, function (v, k, opt) { return !Coordinate_1[\"default\"].isOutside(v, opt.range); });\r\n };\r\n return AxisManager;\r\n}());\r\nexports.AxisManager = AxisManager;\r\n;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/AxisManager.ts\n// module id = 3\n// module chunks = 0 1","module.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external {\"commonjs\":\"hammerjs\",\"commonjs2\":\"hammerjs\",\"amd\":\"hammerjs\",\"root\":\"Hammer\"}\n// module id = 4\n// module chunks = 0 1","\"use strict\";\r\nexports.__esModule = true;\r\nvar DIRECTION;\r\n(function (DIRECTION) {\r\n DIRECTION[DIRECTION[\"DIRECTION_NONE\"] = 1] = \"DIRECTION_NONE\";\r\n DIRECTION[DIRECTION[\"DIRECTION_LEFT\"] = 2] = \"DIRECTION_LEFT\";\r\n DIRECTION[DIRECTION[\"DIRECTION_RIGHT\"] = 4] = \"DIRECTION_RIGHT\";\r\n DIRECTION[DIRECTION[\"DIRECTION_HORIZONTAL\"] = 6] = \"DIRECTION_HORIZONTAL\";\r\n DIRECTION[DIRECTION[\"DIRECTION_UP\"] = 8] = \"DIRECTION_UP\";\r\n DIRECTION[DIRECTION[\"DIRECTION_DOWN\"] = 16] = \"DIRECTION_DOWN\";\r\n DIRECTION[DIRECTION[\"DIRECTION_VERTICAL\"] = 24] = \"DIRECTION_VERTICAL\";\r\n DIRECTION[DIRECTION[\"DIRECTION_ALL\"] = 30] = \"DIRECTION_ALL\";\r\n})(DIRECTION = exports.DIRECTION || (exports.DIRECTION = {}));\r\nexports.TRANSFORM = (function () {\r\n var bodyStyle = (document.head || document.getElementsByTagName(\"head\")[0]).style;\r\n var target = [\"transform\", \"webkitTransform\", \"msTransform\", \"mozTransform\"];\r\n for (var i = 0, len = target.length; i < len; i++) {\r\n if (target[i] in bodyStyle) {\r\n return target[i];\r\n }\r\n }\r\n return \"\";\r\n})();\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/const.ts\n// module id = 5\n// module chunks = 0 1","\"use strict\";\r\nvar Axes_1 = require(\"./Axes\");\r\nmodule.exports = Axes_1[\"default\"];\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/index.ts\n// module id = 6\n// module chunks = 0 1","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.__esModule = true;\r\nvar Component = require(\"@egjs/component\");\r\nvar AnimationManager_1 = require(\"./AnimationManager\");\r\nvar EventManager_1 = require(\"./EventManager\");\r\nvar InterruptManager_1 = require(\"./InterruptManager\");\r\nvar AxisManager_1 = require(\"./AxisManager\");\r\nvar InputObserver_1 = require(\"./InputObserver\");\r\nvar PanInput_1 = require(\"./inputType/PanInput\");\r\nvar PinchInput_1 = require(\"./inputType/PinchInput\");\r\nvar WheelInput_1 = require(\"./inputType/WheelInput\");\r\nvar MoveKeyInput_1 = require(\"./inputType/MoveKeyInput\");\r\nvar const_1 = require(\"./const\");\r\n/**\r\n * @typedef {Object} AxisOption The Axis information. The key of the axis specifies the name to use as the logical virtual coordinate system.\r\n * @ko 축 정보. 축의 키는 논리적인 가상 좌표계로 사용할 이름을 지정한다.\r\n * @property {Number[]} [range] The coordinate of range 좌표 범위\r\n * @property {Number} [range.0=0] The coordinate of the minimum 최소 좌표\r\n * @property {Number} [range.1=0] The coordinate of the maximum 최대 좌표\r\n * @property {Number[]} [bounce] The size of bouncing area. The coordinates can exceed the coordinate area as much as the bouncing area based on user action. If the coordinates does not exceed the bouncing area when an element is dragged, the coordinates where bouncing effects are applied are retuned back into the coordinate area바운스 영역의 크기. 사용자의 동작에 따라 좌표가 좌표 영역을 넘어 바운스 영역의 크기만큼 더 이동할 수 있다. 사용자가 끌어다 놓는 동작을 했을 때 좌표가 바운스 영역에 있으면, 바운스 효과가 적용된 좌표가 다시 좌표 영역 안으로 들어온다\r\n * @property {Number} [bounce.0=0] The size of coordinate of the minimum area 최소 좌표 바운스 영역의 크기\r\n * @property {Number} [bounce.1=0] The size of coordinate of the maximum area 최대 좌표 바운스 영역의 크기\r\n * @property {Boolean[]} [circular] Indicates whether a circular element is available. If it is set to \"true\" and an element is dragged outside the coordinate area, the element will appear on the other side.순환 여부. 'true'로 설정한 방향의 좌표 영역 밖으로 엘리먼트가 이동하면 반대 방향에서 엘리먼트가 나타난다\r\n * @property {Boolean} [circular.0=false] Indicates whether to circulate to the coordinate of the minimum 최소 좌표 방향의 순환 여부\r\n * @property {Boolean} [circular.1=false] Indicates whether to circulate to the coordinate of the maximum 최대 좌표 방향의 순환 여부\r\n**/\r\n/**\r\n * @typedef {Object} AxesOption The option object of the eg.Axes module\r\n * @ko eg.Axes 모듈의 옵션 객체\r\n * @property {Function} [easing=easing.easeOutCubic] The easing function to apply to an animation 애니메이션에 적용할 easing 함수\r\n * @property {Number} [maximumDuration=Infinity] Maximum duration of the animation 가속도에 의해 애니메이션이 동작할 때의 최대 좌표 이동 시간\r\n * @property {Number} [minimumDuration=0] Minimum duration of the animation 가속도에 의해 애니메이션이 동작할 때의 최소 좌표 이동 시간\r\n * @property {Number} [deceleration=0.0006] Deceleration of the animation where acceleration is manually enabled by user. A higher value indicates shorter running time. 사용자의 동작으로 가속도가 적용된 애니메이션의 감속도. 값이 높을수록 애니메이션 실행 시간이 짧아진다\r\n * @property {Boolean} [interruptable=true] Indicates whether an animation is interruptible.
- true: It can be paused or stopped by user action or the API.
- false: It cannot be paused or stopped by user action or the API while it is running.진행 중인 애니메이션 중지 가능 여부.
- true: 사용자의 동작이나 API로 애니메이션을 중지할 수 있다.
- false: 애니메이션이 진행 중일 때는 사용자의 동작이나 API가 적용되지 않는다
\r\n**/\r\n/**\r\n * @class eg.Axes\r\n * @classdesc A module used to change the information of user action entered by various input devices such as touch screen or mouse into the logical virtual coordinates. You can easily create a UI that responds to user actions.\r\n * @ko 터치 입력 장치나 마우스와 같은 다양한 입력 장치를 통해 전달 받은 사용자의 동작을 논리적인 가상 좌표로 변경하는 모듈이다. 사용자 동작에 반응하는 UI를 손쉽게 만들수 있다.\r\n * @extends eg.Component\r\n *\r\n * @param {Object.} axis Axis information managed by eg.Axes. The key of the axis specifies the name to use as the logical virtual coordinate system. eg.Axes가 관리하는 축 정보. 축의 키는 논리적인 가상 좌표계로 사용할 이름을 지정한다.\r\n * @param {AxesOption} [options] The option object of the eg.Axes moduleeg.Axes 모듈의 옵션 객체\r\n * @param {Object.} [startPos] The coordinates to be moved when creating an instance. not triggering change event.인스턴스 생성시 이동할 좌표, change 이벤트는 발생하지 않음.\r\n *\r\n * @support {\"ie\": \"10+\", \"ch\" : \"latest\", \"ff\" : \"latest\", \"sf\" : \"latest\", \"edge\" : \"latest\", \"ios\" : \"7+\", \"an\" : \"2.3+ (except 3.x)\"}\r\n * @example\r\n *\r\n * // 1. Initialize eg.Axes\r\n * const axes = new eg.Axes({\r\n *\tsomething1: {\r\n *\t\trange: [0, 150],\r\n *\t\tbounce: 50\r\n *\t},\r\n *\tsomething2: {\r\n *\t\trange: [0, 200],\r\n *\t\tbounce: 100\r\n *\t},\r\n *\tsomethingN: {\r\n *\t\trange: [1, 10],\r\n *\t}\r\n * }, {\r\n * deceleration : 0.0024\r\n * });\r\n *\r\n * // 2. attach event handler\r\n * axes.on({\r\n *\t\"hold\" : function(evt) {\r\n *\t},\r\n *\t\"release\" : function(evt) {\r\n *\t},\r\n *\t\"animationStart\" : function(evt) {\r\n *\t},\r\n *\t\"animationEnd\" : function(evt) {\r\n *\t},\r\n *\t\"change\" : function(evt) {\r\n *\t}\r\n * });\r\n *\r\n * // 3. Initialize inputTypes\r\n * const panInputArea = new eg.Axes.PanInput(\"#area\", {\r\n *\tscale: [0.5, 1]\r\n * });\r\n * const panInputHmove = new eg.Axes.PanInput(\"#hmove\");\r\n * const panInputVmove = new eg.Axes.PanInput(\"#vmove\");\r\n * const pinchInputArea = new eg.Axes.PinchInput(\"#area\", {\r\n *\tscale: 1.5\r\n * });\r\n *\r\n * // 4. Connect eg.Axes and InputTypes\r\n * // [PanInput] When the mouse or touchscreen is down and moved.\r\n * // Connect the 'something2' axis to the mouse or touchscreen x position and\r\n * // connect the 'somethingN' axis to the mouse or touchscreen y position.\r\n * axes.connect([\"something2\", \"somethingN\"], panInputArea); // or axes.connect(\"something2 somethingN\", panInputArea);\r\n *\r\n * // Connect only one 'something1' axis to the mouse or touchscreen x position.\r\n * axes.connect([\"something1\"], panInputHmove); // or axes.connect(\"something1\", panInputHmove);\r\n *\r\n * // Connect only one 'something2' axis to the mouse or touchscreen y position.\r\n * axes.connect([\"\", \"something2\"], panInputVmove); // or axes.connect(\" something2\", panInputVmove);\r\n *\r\n * // [PinchInput] Connect 'something2' axis when two pointers are moving toward (zoom-in) or away from each other (zoom-out).\r\n * axes.connect(\"something2\", pinchInputArea);\r\n */\r\nvar Axes = /** @class */ (function (_super) {\r\n __extends(Axes, _super);\r\n function Axes(axis, options, startPos) {\r\n if (axis === void 0) { axis = {}; }\r\n var _this = _super.call(this) || this;\r\n _this.axis = axis;\r\n _this._inputs = [];\r\n _this.options = __assign({\r\n easing: function easeOutCubic(x) {\r\n return 1 - Math.pow(1 - x, 3);\r\n },\r\n interruptable: true,\r\n maximumDuration: Infinity,\r\n minimumDuration: 0,\r\n deceleration: 0.0006\r\n }, options);\r\n _this.itm = new InterruptManager_1.InterruptManager(_this.options);\r\n _this.axm = new AxisManager_1.AxisManager(_this.axis, _this.options);\r\n _this.em = new EventManager_1.EventManager(_this);\r\n _this.am = new AnimationManager_1.AnimationManager(_this);\r\n _this.io = new InputObserver_1.InputObserver(_this);\r\n _this.em.setAnimationManager(_this.am);\r\n startPos && _this.em.triggerChange(startPos);\r\n return _this;\r\n }\r\n /**\r\n * Connect the axis of eg.Axes to the inputType.\r\n * @ko eg.Axes의 축과 inputType을 연결한다\r\n * @method eg.Axes#connect\r\n * @param {(String[]|String)} axes The name of the axis to associate with inputType inputType과 연결할 축의 이름\r\n * @param {Object} inputType The inputType instance to associate with the axis of eg.Axes eg.Axes의 축과 연결할 inputType 인스턴스\r\n * @return {eg.Axes} An instance of a module itself 모듈 자신의 인스턴스\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"xOther\": {\r\n * range: [-100, 100]\r\n * }\r\n * });\r\n *\r\n * axes.connect(\"x\", new eg.Axes.PanInput(\"#area1\"))\r\n * .connect(\"x xOther\", new eg.Axes.PanInput(\"#area2\"))\r\n * .connect(\" xOther\", new eg.Axes.PanInput(\"#area3\"))\r\n * .connect([\"x\"], new eg.Axes.PanInput(\"#area4\"))\r\n * .connect([\"xOther\", \"x\"], new eg.Axes.PanInput(\"#area5\"))\r\n * .connect([\"\", \"xOther\"], new eg.Axes.PanInput(\"#area6\"));\r\n */\r\n Axes.prototype.connect = function (axes, inputType) {\r\n var mapped;\r\n if (typeof axes === \"string\") {\r\n mapped = axes.split(\" \");\r\n }\r\n else {\r\n mapped = axes.concat();\r\n }\r\n // check same instance\r\n if (~this._inputs.indexOf(inputType)) {\r\n this.disconnect(inputType);\r\n }\r\n // check same element in hammer type for share\r\n if (\"hammer\" in inputType) {\r\n var targets = this._inputs.filter(function (v) { return v.hammer && v.element === inputType.element; });\r\n if (targets.length) {\r\n inputType.hammer = targets[0].hammer;\r\n }\r\n }\r\n inputType.mapAxes(mapped);\r\n inputType.connect(this.io);\r\n this._inputs.push(inputType);\r\n return this;\r\n };\r\n /**\r\n * Disconnect the axis of eg.Axes from the inputType.\r\n * @ko eg.Axes의 축과 inputType의 연결을 끊는다.\r\n * @method eg.Axes#disconnect\r\n * @param {Object} [inputType] An inputType instance associated with the axis of eg.Axes eg.Axes의 축과 연결한 inputType 인스턴스\r\n * @return {eg.Axes} An instance of a module itself 모듈 자신의 인스턴스\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"xOther\": {\r\n * range: [-100, 100]\r\n * }\r\n * });\r\n *\r\n * const input1 = new eg.Axes.PanInput(\"#area1\");\r\n * const input2 = new eg.Axes.PanInput(\"#area2\");\r\n * const input3 = new eg.Axes.PanInput(\"#area3\");\r\n *\r\n * axes.connect(\"x\", input1);\r\n * .connect(\"x xOther\", input2)\r\n * .connect([\"xOther\", \"x\"], input3);\r\n *\r\n * axes.disconnect(input1); // disconnects input1\r\n * axes.disconnect(); // disconnects all of them\r\n */\r\n Axes.prototype.disconnect = function (inputType) {\r\n if (inputType) {\r\n var index = this._inputs.indexOf(inputType);\r\n if (index >= 0) {\r\n this._inputs[index].disconnect();\r\n this._inputs.splice(index, 1);\r\n }\r\n }\r\n else {\r\n this._inputs.forEach(function (v) { return v.disconnect(); });\r\n this._inputs = [];\r\n }\r\n return this;\r\n };\r\n /**\r\n * Returns the current position of the coordinates.\r\n * @ko 좌표의 현재 위치를 반환한다\r\n * @method eg.Axes#get\r\n * @param {Object} [axes] The names of the axis 축 이름들\r\n * @return {Object.} Axis coordinate information 축 좌표 정보\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"xOther\": {\r\n * range: [-100, 100]\r\n * },\r\n * \t \"zoom\": {\r\n * range: [50, 30]\r\n * }\r\n * });\r\n *\r\n * axes.get(); // {\"x\": 0, \"xOther\": -100, \"zoom\": 50}\r\n * axes.get([\"x\", \"zoom\"]); // {\"x\": 0, \"zoom\": 50}\r\n */\r\n Axes.prototype.get = function (axes) {\r\n return this.axm.get(axes);\r\n };\r\n /**\r\n * Moves an axis to specific coordinates.\r\n * @ko 좌표를 이동한다.\r\n * @method eg.Axes#setTo\r\n * @param {Object.} pos The coordinate to move to 이동할 좌표\r\n * @param {Number} [duration=0] Duration of the animation (unit: ms) 애니메이션 진행 시간(단위: ms)\r\n * @return {eg.Axes} An instance of a module itself 모듈 자신의 인스턴스\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"xOther\": {\r\n * range: [-100, 100]\r\n * },\r\n * \t \"zoom\": {\r\n * range: [50, 30]\r\n * }\r\n * });\r\n *\r\n * axes.setTo({\"x\": 30, \"zoom\": 60});\r\n * axes.get(); // {\"x\": 30, \"xOther\": -100, \"zoom\": 60}\r\n *\r\n * axes.setTo({\"x\": 100, \"xOther\": 60}, 1000); // animatation\r\n *\r\n * // after 1000 ms\r\n * axes.get(); // {\"x\": 100, \"xOther\": 60, \"zoom\": 60}\r\n */\r\n Axes.prototype.setTo = function (pos, duration) {\r\n if (duration === void 0) { duration = 0; }\r\n this.am.setTo(pos, duration);\r\n return this;\r\n };\r\n /**\r\n * Moves an axis from the current coordinates to specific coordinates.\r\n * @ko 현재 좌표를 기준으로 좌표를 이동한다.\r\n * @method eg.Axes#setBy\r\n * @param {Object.} pos The coordinate to move to 이동할 좌표\r\n * @param {Number} [duration=0] Duration of the animation (unit: ms) 애니메이션 진행 시간(단위: ms)\r\n * @return {eg.Axes} An instance of a module itself 모듈 자신의 인스턴스\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"xOther\": {\r\n * range: [-100, 100]\r\n * },\r\n * \t \"zoom\": {\r\n * range: [50, 30]\r\n * }\r\n * });\r\n *\r\n * axes.setBy({\"x\": 30, \"zoom\": 10});\r\n * axes.get(); // {\"x\": 30, \"xOther\": -100, \"zoom\": 60}\r\n *\r\n * axes.setBy({\"x\": 70, \"xOther\": 60}, 1000); // animatation\r\n *\r\n * // after 1000 ms\r\n * axes.get(); // {\"x\": 100, \"xOther\": -40, \"zoom\": 60}\r\n */\r\n Axes.prototype.setBy = function (pos, duration) {\r\n if (duration === void 0) { duration = 0; }\r\n this.am.setBy(pos, duration);\r\n return this;\r\n };\r\n /**\r\n * Returns whether there is a coordinate in the bounce area of ​​the target axis.\r\n * @ko 대상 축 중 bounce영역에 좌표가 존재하는지를 반환한다\r\n * @method eg.Axes#isBounceArea\r\n * @param {Object} [axes] The names of the axis 축 이름들\r\n * @return {Boolen} Whether the bounce area exists. bounce 영역 존재 여부\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"xOther\": {\r\n * range: [-100, 100]\r\n * },\r\n * \t \"zoom\": {\r\n * range: [50, 30]\r\n * }\r\n * });\r\n *\r\n * axes.isBounceArea([\"x\"]);\r\n * axes.isBounceArea([\"x\", \"zoom\"]);\r\n * axes.isBounceArea();\r\n */\r\n Axes.prototype.isBounceArea = function (axes) {\r\n return this.axm.isOutside(axes);\r\n };\r\n /**\r\n * Destroys properties, and events used in a module and disconnect all connections to inputTypes.\r\n * @ko 모듈에 사용한 속성, 이벤트를 해제한다. 모든 inputType과의 연결을 끊는다.\r\n * @method eg.Axes#destroy\r\n */\r\n Axes.prototype.destroy = function () {\r\n this.disconnect();\r\n this.em.destroy();\r\n };\r\n Axes.VERSION = \"#__VERSION__#\";\r\n Axes.PanInput = PanInput_1.PanInput;\r\n Axes.PinchInput = PinchInput_1.PinchInput;\r\n Axes.WheelInput = WheelInput_1.WheelInput;\r\n Axes.MoveKeyInput = MoveKeyInput_1.MoveKeyInput;\r\n /**\r\n * @name eg.Axes.TRANSFORM\r\n * @desc Returns the transform attribute with CSS vendor prefixes.\r\n * @ko CSS vendor prefixes를 붙인 transform 속성을 반환한다.\r\n *\r\n * @constant\r\n * @type {String}\r\n * @example\r\n * eg.Axes.TRANSFORM; // \"transform\" or \"webkitTransform\"\r\n */\r\n Axes.TRANSFORM = const_1.TRANSFORM;\r\n /**\r\n * @name eg.Axes.DIRECTION_NONE\r\n * @constant\r\n * @type {Number}\r\n */\r\n Axes.DIRECTION_NONE = const_1.DIRECTION.DIRECTION_NONE;\r\n /**\r\n * @name eg.Axes.DIRECTION_LEFT\r\n * @constant\r\n * @type {Number}\r\n */\r\n Axes.DIRECTION_LEFT = const_1.DIRECTION.DIRECTION_LEFT;\r\n /**\r\n * @name eg.Axes.DIRECTION_RIGHT\r\n * @constant\r\n * @type {Number}\r\n */\r\n Axes.DIRECTION_RIGHT = const_1.DIRECTION.DIRECTION_RIGHT;\r\n /**\r\n * @name eg.Axes.DIRECTION_UP\r\n * @constant\r\n * @type {Number}\r\n */\r\n Axes.DIRECTION_UP = const_1.DIRECTION.DIRECTION_UP;\r\n /**\r\n * @name eg.Axes.DIRECTION_DOWN\r\n * @constant\r\n * @type {Number}\r\n */\r\n Axes.DIRECTION_DOWN = const_1.DIRECTION.DIRECTION_DOWN;\r\n /**\r\n * @name eg.Axes.DIRECTION_HORIZONTAL\r\n * @constant\r\n * @type {Number}\r\n */\r\n Axes.DIRECTION_HORIZONTAL = const_1.DIRECTION.DIRECTION_HORIZONTAL;\r\n /**\r\n * @name eg.Axes.DIRECTION_VERTICAL\r\n * @constant\r\n * @type {Number}\r\n */\r\n Axes.DIRECTION_VERTICAL = const_1.DIRECTION.DIRECTION_VERTICAL;\r\n /**\r\n * @name eg.Axes.DIRECTION_ALL\r\n * @constant\r\n * @type {Number}\r\n */\r\n Axes.DIRECTION_ALL = const_1.DIRECTION.DIRECTION_ALL;\r\n return Axes;\r\n}(Component));\r\nexports[\"default\"] = Axes;\r\n;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/Axes.ts\n// module id = 7\n// module chunks = 0 1","module.exports = __WEBPACK_EXTERNAL_MODULE_8__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external {\"commonjs\":\"@egjs/component\",\"commonjs2\":\"@egjs/component\",\"amd\":\"@egjs/component\",\"root\":[\"eg\",\"Component\"]}\n// module id = 8\n// module chunks = 0 1","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.__esModule = true;\r\nvar Coordinate_1 = require(\"./Coordinate\");\r\nvar AxisManager_1 = require(\"./AxisManager\");\r\nvar utils_1 = require(\"./utils\");\r\nvar AnimationManager = /** @class */ (function () {\r\n function AnimationManager(_a) {\r\n var options = _a.options, itm = _a.itm, em = _a.em, axm = _a.axm;\r\n this.options = options;\r\n this.itm = itm;\r\n this.em = em;\r\n this.axm = axm;\r\n this.animationEnd = this.animationEnd.bind(this);\r\n }\r\n AnimationManager.getDuration = function (duration, min, max) {\r\n return Math.max(Math.min(duration, max), min);\r\n };\r\n AnimationManager.prototype.getDuration = function (depaPos, destPos, wishDuration) {\r\n var _this = this;\r\n var duration;\r\n if (typeof wishDuration !== \"undefined\") {\r\n duration = wishDuration;\r\n }\r\n else {\r\n var durations_1 = this.axm.map(destPos, function (v, k) { return Coordinate_1[\"default\"].getDuration(Math.abs(Math.abs(v) - Math.abs(depaPos[k])), _this.options.deceleration); });\r\n duration = Object.keys(durations_1).reduce(function (max, v) { return Math.max(max, durations_1[v]); }, -Infinity);\r\n }\r\n return AnimationManager.getDuration(duration, this.options.minimumDuration, this.options.maximumDuration);\r\n };\r\n AnimationManager.prototype.createAnimationParam = function (pos, duration, option) {\r\n var depaPos = this.axm.get();\r\n var destPos = pos;\r\n var inputEvent = option && option.event || null;\r\n return {\r\n depaPos: depaPos,\r\n destPos: destPos,\r\n duration: AnimationManager.getDuration(duration, this.options.minimumDuration, this.options.maximumDuration),\r\n delta: this.axm.getDelta(depaPos, destPos),\r\n inputEvent: inputEvent,\r\n input: option && option.input || null,\r\n isTrusted: !!inputEvent,\r\n done: this.animationEnd\r\n };\r\n };\r\n AnimationManager.prototype.grab = function (axes, option) {\r\n if (this._animateParam && axes.length) {\r\n var orgPos_1 = this.axm.get(axes);\r\n var pos = this.axm.map(orgPos_1, function (v, k, opt) { return Coordinate_1[\"default\"].getCirculatedPos(v, opt.range, opt.circular); });\r\n if (!this.axm.every(pos, function (v, k) { return orgPos_1[k] === v; })) {\r\n this.em.triggerChange(pos, option, !!option);\r\n }\r\n this._animateParam = null;\r\n this._raf && utils_1.cancelAnimationFrame(this._raf);\r\n this._raf = null;\r\n this.em.triggerAnimationEnd(!!(option && option.event));\r\n }\r\n };\r\n AnimationManager.prototype.getEventInfo = function () {\r\n if (this._animateParam && this._animateParam.input && this._animateParam.inputEvent) {\r\n return {\r\n input: this._animateParam.input,\r\n event: this._animateParam.inputEvent\r\n };\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n AnimationManager.prototype.restore = function (option) {\r\n var pos = this.axm.get();\r\n var destPos = this.axm.map(pos, function (v, k, opt) { return Math.min(opt.range[1], Math.max(opt.range[0], v)); });\r\n this.animateTo(destPos, this.getDuration(pos, destPos), option);\r\n };\r\n AnimationManager.prototype.animationEnd = function () {\r\n var beforeParam = this.getEventInfo();\r\n this._animateParam = null;\r\n // for Circular\r\n var circularTargets = this.axm.filter(this.axm.get(), function (v, k, opt) { return Coordinate_1[\"default\"].isCircularable(v, opt.range, opt.circular); });\r\n Object.keys(circularTargets).length > 0 && this.setTo(this.axm.map(circularTargets, function (v, k, opt) { return Coordinate_1[\"default\"].getCirculatedPos(v, opt.range, opt.circular); }));\r\n this.itm.setInterrupt(false);\r\n this.em.triggerAnimationEnd(!!beforeParam);\r\n if (this.axm.isOutside()) {\r\n this.restore(beforeParam);\r\n }\r\n else {\r\n this.em.triggerFinish(!!beforeParam);\r\n }\r\n };\r\n AnimationManager.prototype.animateLoop = function (param, complete) {\r\n this._animateParam = __assign({}, param);\r\n this._animateParam.startTime = new Date().getTime();\r\n if (param.duration) {\r\n var info_1 = this._animateParam;\r\n var self_1 = this;\r\n (function loop() {\r\n self_1._raf = null;\r\n if (self_1.frame(info_1) >= 1) {\r\n if (!AxisManager_1.AxisManager.equal(param.destPos, self_1.axm.get(Object.keys(param.destPos)))) {\r\n self_1.em.triggerChange(param.destPos);\r\n }\r\n complete();\r\n return;\r\n } // animationEnd\r\n self_1._raf = utils_1.requestAnimationFrame(loop);\r\n })();\r\n }\r\n else {\r\n this.em.triggerChange(param.destPos);\r\n complete();\r\n }\r\n };\r\n AnimationManager.prototype.getUserControll = function (param) {\r\n var userWish = param.setTo();\r\n userWish.destPos = this.axm.get(userWish.destPos);\r\n userWish.duration = AnimationManager.getDuration(userWish.duration, this.options.minimumDuration, this.options.maximumDuration);\r\n return userWish;\r\n };\r\n AnimationManager.prototype.animateTo = function (destPos, duration, option) {\r\n var _this = this;\r\n var param = this.createAnimationParam(destPos, duration, option);\r\n var depaPos = __assign({}, param.depaPos);\r\n var retTrigger = this.em.triggerAnimationStart(param);\r\n // to control\r\n var userWish = this.getUserControll(param);\r\n // You can't stop the 'animationStart' event when 'circular' is true.\r\n if (!retTrigger && this.axm.every(userWish.destPos, function (v, k, opt) { return Coordinate_1[\"default\"].isCircularable(v, opt.range, opt.circular); })) {\r\n console.warn(\"You can't stop the 'animation' event when 'circular' is true.\");\r\n }\r\n if (retTrigger && !AxisManager_1.AxisManager.equal(userWish.destPos, depaPos)) {\r\n var inputEvent = option && option.event || null;\r\n this.animateLoop({\r\n depaPos: depaPos,\r\n destPos: userWish.destPos,\r\n duration: userWish.duration,\r\n delta: this.axm.getDelta(depaPos, userWish.destPos),\r\n isTrusted: !!inputEvent,\r\n inputEvent: inputEvent,\r\n input: option && option.input || null\r\n }, function () { return _this.animationEnd(); });\r\n }\r\n };\r\n // animation frame (0~1)\r\n AnimationManager.prototype.frame = function (param) {\r\n var curTime = new Date().getTime() - param.startTime;\r\n var easingPer = this.easing(curTime / param.duration);\r\n var toPos = param.depaPos;\r\n toPos = this.axm.map(toPos, function (v, k, opt) {\r\n v += param.delta[k] * easingPer;\r\n return Coordinate_1[\"default\"].getCirculatedPos(v, opt.range, opt.circular);\r\n });\r\n this.em.triggerChange(toPos);\r\n return easingPer;\r\n };\r\n AnimationManager.prototype.easing = function (p) {\r\n return p > 1 ? 1 : this.options.easing(p);\r\n };\r\n AnimationManager.prototype.setTo = function (pos, duration) {\r\n if (duration === void 0) { duration = 0; }\r\n var axes = Object.keys(pos);\r\n this.grab(axes);\r\n var orgPos = this.axm.get(axes);\r\n if (AxisManager_1.AxisManager.equal(pos, orgPos)) {\r\n return this;\r\n }\r\n this.itm.setInterrupt(true);\r\n var movedPos = this.axm.filter(pos, function (v, k) { return orgPos[k] !== v; });\r\n if (!Object.keys(movedPos).length) {\r\n return this;\r\n }\r\n movedPos = this.axm.map(movedPos, function (v, k, opt) {\r\n if (opt.circular && (opt.circular[0] || opt.circular[1])) {\r\n return duration > 0 ? v : Coordinate_1[\"default\"].getCirculatedPos(v, opt.range, opt.circular);\r\n }\r\n else {\r\n return Coordinate_1[\"default\"].getInsidePosition(v, opt.range, opt.circular);\r\n }\r\n });\r\n if (AxisManager_1.AxisManager.equal(movedPos, orgPos)) {\r\n return this;\r\n }\r\n if (duration > 0) {\r\n this.animateTo(movedPos, duration);\r\n }\r\n else {\r\n this.em.triggerChange(movedPos);\r\n this.itm.setInterrupt(false);\r\n }\r\n return this;\r\n };\r\n AnimationManager.prototype.setBy = function (pos, duration) {\r\n if (duration === void 0) { duration = 0; }\r\n return this.setTo(this.axm.map(this.axm.get(Object.keys(pos)), function (v, k) { return v + pos[k]; }), duration);\r\n };\r\n return AnimationManager;\r\n}());\r\nexports.AnimationManager = AnimationManager;\r\n;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/AnimationManager.ts\n// module id = 9\n// module chunks = 0 1","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.__esModule = true;\r\nvar EventManager = /** @class */ (function () {\r\n function EventManager(axes) {\r\n this.axes = axes;\r\n }\r\n /**\r\n * This event is fired when a user holds an element on the screen of the device.\r\n * @ko 사용자가 기기의 화면에 손을 대고 있을 때 발생하는 이벤트\r\n * @name eg.Axes#hold\r\n * @event\r\n * @type {object} The object of data to be sent when the event is fired이벤트가 발생할 때 전달되는 데이터 객체\r\n * @property {Object.} pos coordinate 좌표 정보\r\n * @property {Object} input The instance of inputType where the event occurred이벤트가 발생한 inputType 인스턴스\r\n * @property {Object} inputEvent The event object received from inputType inputType으로 부터 받은 이벤트 객체\r\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\r\n *\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"zoom\": {\r\n * range: [50, 30]\r\n * }\r\n * }).on(\"hold\", function(event) {\r\n * // event.pos\r\n * // event.input\r\n * // event.inputEvent\r\n * // isTrusted\r\n * });\r\n */\r\n EventManager.prototype.triggerHold = function (pos, option) {\r\n this.axes.trigger(\"hold\", {\r\n pos: pos,\r\n input: option.input || null,\r\n inputEvent: option.event || null,\r\n isTrusted: true\r\n });\r\n };\r\n /** Specifies the coordinates to move after the 'change' event. It works when the holding value of the change event is true.\r\n * @ko 'change' 이벤트 이후 이동할 좌표를 지정한다. change이벤트의 holding 값이 true일 경우에 동작한다\r\n * @name set\r\n * @function\r\n * @param {Object.} pos The coordinate to move to 이동할 좌표\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"zoom\": {\r\n * range: [50, 30]\r\n * }\r\n * }).on(\"change\", function(event) {\r\n * event.holding && event.set({x: 10});\r\n * });\r\n */\r\n /** Specifies the animation coordinates to move after the 'release' or 'animationStart' events.\r\n * @ko 'release' 또는 'animationStart' 이벤트 이후 이동할 좌표를 지정한다.\r\n * @name setTo\r\n * @function\r\n * @param {Object.} pos The coordinate to move to 이동할 좌표\r\n * @param {Number} [duration] Duration of the animation (unit: ms) 애니메이션 진행 시간(단위: ms)\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"zoom\": {\r\n * range: [50, 30]\r\n * }\r\n * }).on(\"animationStart\", function(event) {\r\n * event.setTo({x: 10}, 2000);\r\n * });\r\n */\r\n /**\r\n * This event is fired when a user release an element on the screen of the device.\r\n * @ko 사용자가 기기의 화면에서 손을 뗐을 때 발생하는 이벤트\r\n * @name eg.Axes#release\r\n * @event\r\n * @type {object} The object of data to be sent when the event is fired이벤트가 발생할 때 전달되는 데이터 객체\r\n * @property {Object.} depaPos The coordinates when releasing an element손을 뗐을 때의 좌표 \r\n * @property {Object.} destPos The coordinates to move to after releasing an element손을 뗀 뒤에 이동할 좌표\r\n * @property {Object.} delta The movement variation of coordinate 좌표의 변화량\r\n * @property {Object} inputEvent The event object received from inputType inputType으로 부터 받은 이벤트 객체\r\n * @property {Object} input The instance of inputType where the event occurred이벤트가 발생한 inputType 인스턴스\r\n * @property {setTo} setTo Specifies the animation coordinates to move after the event 이벤트 이후 이동할 애니메이션 좌표를 지정한다\r\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\r\n *\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"zoom\": {\r\n * range: [50, 30]\r\n * }\r\n * }).on(\"release\", function(event) {\r\n * // event.depaPos\r\n * // event.destPos\r\n * // event.delta\r\n * // event.input\r\n * // event.inputEvent\r\n * // event.setTo\r\n * // event.isTrusted\r\n *\r\n * // if you want to change the animation coordinates to move after the 'release' event.\r\n * event.setTo({x: 10}, 2000);\r\n * });\r\n */\r\n EventManager.prototype.triggerRelease = function (param) {\r\n param.setTo = this.createUserControll(param.destPos, param.duration);\r\n this.axes.trigger(\"release\", param);\r\n };\r\n /**\r\n * This event is fired when coordinate changes.\r\n * @ko 좌표가 변경됐을 때 발생하는 이벤트\r\n * @name eg.Axes#change\r\n * @event\r\n * @type {object} The object of data to be sent when the event is fired 이벤트가 발생할 때 전달되는 데이터 객체\r\n * @property {Object.} pos The coordinate 좌표\r\n * @property {Object.} delta The movement variation of coordinate 좌표의 변화량\r\n * @property {Boolean} holding Indicates whether a user holds an element on the screen of the device.사용자가 기기의 화면을 누르고 있는지 여부\r\n * @property {Object} input The instance of inputType where the event occurred. If the value is changed by animation, it returns 'null'.이벤트가 발생한 inputType 인스턴스. 애니메이션에 의해 값이 변경될 경우에는 'null'을 반환한다.\r\n * @property {Object} inputEvent The event object received from inputType. If the value is changed by animation, it returns 'null'.inputType으로 부터 받은 이벤트 객체. 애니메이션에 의해 값이 변경될 경우에는 'null'을 반환한다.\r\n * @property {set} set Specifies the coordinates to move after the event. It works when the holding value is true 이벤트 이후 이동할 좌표를 지정한다. holding 값이 true일 경우에 동작한다.\r\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\r\n *\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"zoom\": {\r\n * range: [50, 30]\r\n * }\r\n * }).on(\"change\", function(event) {\r\n * // event.pos\r\n * // event.delta\r\n * // event.input\r\n * // event.inputEvent\r\n * // event.holding\r\n * // event.set\r\n * // event.isTrusted\r\n *\r\n * // if you want to change the coordinates to move after the 'change' event.\r\n * // it works when the holding value of the change event is true.\r\n * event.holding && event.set({x: 10});\r\n * });\r\n */\r\n EventManager.prototype.triggerChange = function (pos, option, holding) {\r\n if (option === void 0) { option = null; }\r\n if (holding === void 0) { holding = false; }\r\n var eventInfo = this.am.getEventInfo();\r\n var moveTo = this.am.axm.moveTo(pos);\r\n var inputEvent = option && option.event || eventInfo && eventInfo.event || null;\r\n var param = {\r\n pos: moveTo.pos,\r\n delta: moveTo.delta,\r\n holding: holding,\r\n inputEvent: inputEvent,\r\n isTrusted: !!inputEvent,\r\n input: option && option.input || eventInfo && eventInfo.input || null,\r\n set: inputEvent ? this.createUserControll(moveTo.pos) : function () { }\r\n };\r\n this.axes.trigger(\"change\", param);\r\n inputEvent && this.am.axm.set(param.set()[\"destPos\"]);\r\n };\r\n /**\r\n * This event is fired when animation starts.\r\n * @ko 에니메이션이 시작할 때 발생한다.\r\n * @name eg.Axes#animationStart\r\n * @event\r\n * @type {object} The object of data to be sent when the event is fired이벤트가 발생할 때 전달되는 데이터 객체\r\n * @property {Object.} depaPos The coordinates when animation starts애니메이션이 시작 되었을 때의 좌표 \r\n * @property {Object.} destPos The coordinates to move to. If you change this value, you can run the animation이동할 좌표. 이값을 변경하여 애니메이션을 동작시킬수 있다\r\n * @property {Object.} delta The movement variation of coordinate 좌표의 변화량\r\n * @property {Number} duration Duration of the animation (unit: ms). If you change this value, you can control the animation duration time.애니메이션 진행 시간(단위: ms). 이값을 변경하여 애니메이션의 이동시간을 조절할 수 있다.\r\n * @property {Object} input The instance of inputType where the event occurred. If the value is changed by animation, it returns 'null'.이벤트가 발생한 inputType 인스턴스. 애니메이션에 의해 값이 변경될 경우에는 'null'을 반환한다.\r\n * @property {Object} inputEvent The event object received from inputType inputType으로 부터 받은 이벤트 객체\r\n * @property {setTo} setTo Specifies the animation coordinates to move after the event 이벤트 이후 이동할 애니메이션 좌표를 지정한다\r\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\r\n *\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"zoom\": {\r\n * range: [50, 30]\r\n * }\r\n * }).on(\"release\", function(event) {\r\n * // event.depaPos\r\n * // event.destPos\r\n * // event.delta\r\n * // event.input\r\n * // event.inputEvent\r\n * // event.setTo\r\n * // event.isTrusted\r\n *\r\n * // if you want to change the animation coordinates to move after the 'animationStart' event.\r\n * event.setTo({x: 10}, 2000);\r\n * });\r\n */\r\n EventManager.prototype.triggerAnimationStart = function (param) {\r\n param.setTo = this.createUserControll(param.destPos, param.duration);\r\n return this.axes.trigger(\"animationStart\", param);\r\n };\r\n /**\r\n * This event is fired when animation ends.\r\n * @ko 에니메이션이 끝났을 때 발생한다.\r\n * @name eg.Axes#animationEnd\r\n * @event\r\n * @type {object} The object of data to be sent when the event is fired이벤트가 발생할 때 전달되는 데이터 객체\r\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\r\n *\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"zoom\": {\r\n * range: [50, 30]\r\n * }\r\n * }).on(\"animationEnd\", function(event) {\r\n * // event.isTrusted\r\n * });\r\n */\r\n EventManager.prototype.triggerAnimationEnd = function (isTrusted) {\r\n if (isTrusted === void 0) { isTrusted = false; }\r\n this.axes.trigger(\"animationEnd\", {\r\n isTrusted: isTrusted\r\n });\r\n };\r\n /**\r\n * This event is fired when all actions have been completed.\r\n * @ko 에니메이션이 끝났을 때 발생한다.\r\n * @name eg.Axes#finish\r\n * @event\r\n * @type {object} The object of data to be sent when the event is fired이벤트가 발생할 때 전달되는 데이터 객체\r\n * @property {Boolean} isTrusted Returns true if an event was generated by the user action, or false if it was caused by a script or API call 사용자의 액션에 의해 이벤트가 발생하였으면 true, 스크립트나 API호출에 의해 발생하였을 경우에는 false를 반환한다.\r\n *\r\n * @example\r\n * const axes = new eg.Axes({\r\n * \"x\": {\r\n * range: [0, 100]\r\n * },\r\n * \"zoom\": {\r\n * range: [50, 30]\r\n * }\r\n * }).on(\"finish\", function(event) {\r\n * // event.isTrusted\r\n * });\r\n */\r\n EventManager.prototype.triggerFinish = function (isTrusted) {\r\n if (isTrusted === void 0) { isTrusted = false; }\r\n this.axes.trigger(\"finish\", {\r\n isTrusted: isTrusted\r\n });\r\n };\r\n EventManager.prototype.createUserControll = function (pos, duration) {\r\n if (duration === void 0) { duration = 0; }\r\n // to controll\r\n var userControl = {\r\n destPos: __assign({}, pos),\r\n duration: duration\r\n };\r\n return function (toPos, userDuration) {\r\n toPos && (userControl.destPos = __assign({}, toPos));\r\n (userDuration !== undefined) && (userControl.duration = userDuration);\r\n return userControl;\r\n };\r\n };\r\n EventManager.prototype.setAnimationManager = function (am) {\r\n this.am = am;\r\n };\r\n EventManager.prototype.destroy = function () {\r\n this.axes.off();\r\n };\r\n return EventManager;\r\n}());\r\nexports.EventManager = EventManager;\r\n;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/EventManager.ts\n// module id = 10\n// module chunks = 0 1","\"use strict\";\r\nexports.__esModule = true;\r\nvar InterruptManager = /** @class */ (function () {\r\n function InterruptManager(options) {\r\n this.options = options;\r\n this._prevented = false; // check whether the animation event was prevented\r\n }\r\n InterruptManager.prototype.isInterrupting = function () {\r\n // when interruptable is 'true', return value is always 'true'.\r\n return this.options.interruptable || this._prevented;\r\n };\r\n InterruptManager.prototype.isInterrupted = function () {\r\n return !this.options.interruptable && this._prevented;\r\n };\r\n InterruptManager.prototype.setInterrupt = function (prevented) {\r\n !this.options.interruptable && (this._prevented = prevented);\r\n };\r\n return InterruptManager;\r\n}());\r\nexports.InterruptManager = InterruptManager;\r\n;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/InterruptManager.ts\n// module id = 11\n// module chunks = 0 1","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.__esModule = true;\r\nvar AxisManager_1 = require(\"./AxisManager\");\r\nvar Coordinate_1 = require(\"./Coordinate\");\r\nvar InputObserver = /** @class */ (function () {\r\n function InputObserver(_a) {\r\n var options = _a.options, itm = _a.itm, em = _a.em, axm = _a.axm, am = _a.am;\r\n this.isOutside = false;\r\n this.moveDistance = null;\r\n this.options = options;\r\n this.itm = itm;\r\n this.em = em;\r\n this.axm = axm;\r\n this.am = am;\r\n }\r\n // when move pointer is held in outside\r\n InputObserver.prototype.atOutside = function (pos) {\r\n var _this = this;\r\n if (this.isOutside) {\r\n return this.axm.map(pos, function (v, k, opt) {\r\n var tn = opt.range[0] - opt.bounce[0];\r\n var tx = opt.range[1] + opt.bounce[1];\r\n return v > tx ? tx : (v < tn ? tn : v);\r\n });\r\n }\r\n else {\r\n // when start pointer is held in inside\r\n // get a initialization slope value to prevent smooth animation.\r\n var initSlope_1 = this.am.easing(0.00001) / 0.00001;\r\n return this.axm.map(pos, function (v, k, opt) {\r\n var min = opt.range[0];\r\n var max = opt.range[1];\r\n var out = opt.bounce;\r\n if (v < min) {\r\n return min - _this.am.easing((min - v) / (out[0] * initSlope_1)) * out[0];\r\n }\r\n else if (v > max) {\r\n return max + _this.am.easing((v - max) / (out[1] * initSlope_1)) * out[1];\r\n }\r\n return v;\r\n });\r\n }\r\n };\r\n InputObserver.prototype.get = function (input) {\r\n return this.axm.get(input.axes);\r\n };\r\n InputObserver.prototype.hold = function (input, event) {\r\n if (this.itm.isInterrupted() || !input.axes.length) {\r\n return;\r\n }\r\n var changeOption = {\r\n input: input,\r\n event: event\r\n };\r\n this.itm.setInterrupt(true);\r\n this.am.grab(input.axes, changeOption);\r\n !this.moveDistance && this.em.triggerHold(this.axm.get(), changeOption);\r\n this.isOutside = this.axm.isOutside(input.axes);\r\n this.moveDistance = this.axm.get(input.axes);\r\n };\r\n InputObserver.prototype.change = function (input, event, offset) {\r\n if (!this.itm.isInterrupting() || this.axm.every(offset, function (v) { return v === 0; })) {\r\n return;\r\n }\r\n var depaPos = this.axm.get(input.axes);\r\n var destPos;\r\n // for outside logic\r\n destPos = this.axm.map(this.moveDistance || depaPos, function (v, k) { return v + (offset[k] || 0); });\r\n this.moveDistance && (this.moveDistance = destPos);\r\n destPos = this.axm.map(destPos, function (v, k, opt) { return Coordinate_1[\"default\"].getCirculatedPos(v, opt.range, opt.circular); });\r\n // from outside to inside\r\n if (this.isOutside &&\r\n this.axm.every(depaPos, function (v, k, opt) { return !Coordinate_1[\"default\"].isOutside(v, opt.range); })) {\r\n this.isOutside = false;\r\n }\r\n destPos = this.atOutside(destPos);\r\n this.em.triggerChange(destPos, {\r\n input: input,\r\n event: event\r\n }, true);\r\n };\r\n InputObserver.prototype.release = function (input, event, offset, inputDuration) {\r\n if (!this.itm.isInterrupting()) {\r\n return;\r\n }\r\n if (!this.moveDistance) {\r\n return;\r\n }\r\n var pos = this.axm.get(input.axes);\r\n var depaPos = this.axm.get();\r\n var destPos = this.axm.get(this.axm.map(offset, function (v, k, opt) {\r\n if (opt.circular && (opt.circular[0] || opt.circular[1])) {\r\n return pos[k] + v;\r\n }\r\n else {\r\n return Coordinate_1[\"default\"].getInsidePosition(pos[k] + v, opt.range, opt.circular, opt.bounce);\r\n }\r\n }));\r\n var duration = this.am.getDuration(destPos, pos, inputDuration);\r\n if (duration === 0) {\r\n destPos = __assign({}, depaPos);\r\n }\r\n // prepare params\r\n var param = {\r\n depaPos: depaPos,\r\n destPos: destPos,\r\n duration: duration,\r\n delta: this.axm.getDelta(depaPos, destPos),\r\n inputEvent: event,\r\n input: input,\r\n isTrusted: true\r\n };\r\n this.em.triggerRelease(param);\r\n this.moveDistance = null;\r\n // to contol\r\n var userWish = this.am.getUserControll(param);\r\n var isEqual = AxisManager_1.AxisManager.equal(userWish.destPos, depaPos);\r\n var changeOption = {\r\n input: input,\r\n event: event\r\n };\r\n if (isEqual || userWish.duration === 0) {\r\n !isEqual && this.em.triggerChange(userWish.destPos, changeOption, true);\r\n this.itm.setInterrupt(false);\r\n if (this.axm.isOutside()) {\r\n this.am.restore(changeOption);\r\n }\r\n else {\r\n this.em.triggerFinish(true);\r\n }\r\n }\r\n else {\r\n this.am.animateTo(userWish.destPos, userWish.duration, changeOption);\r\n }\r\n };\r\n return InputObserver;\r\n}());\r\nexports.InputObserver = InputObserver;\r\n;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/InputObserver.ts\n// module id = 12\n// module chunks = 0 1","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.__esModule = true;\r\nvar Hammer = require(\"hammerjs\");\r\nvar const_1 = require(\"../const\");\r\nvar utils_1 = require(\"../utils\");\r\nvar InputType_1 = require(\"./InputType\");\r\n/**\r\n * @typedef {Object} PanInputOption The option object of the eg.Axes.PanInput module.\r\n * @ko eg.Axes.PanInput 모듈의 옵션 객체\r\n * @property {String[]} [inputType=[\"touch\",\"mouse\"]] Types of input devices.
- touch: Touch screen
- mouse: Mouse 입력 장치 종류.
- touch: 터치 입력 장치
- mouse: 마우스
\r\n * @property {Number[]} [scale] Coordinate scale that a user can move사용자의 동작으로 이동하는 좌표의 배율\r\n * @property {Number} [scale.0=1] horizontal axis scale 수평축 배율\r\n * @property {Number} [scale.1=1] vertical axis scale 수직축 배율\r\n * @property {Number} [thresholdAngle=45] The threshold value that determines whether user action is horizontal or vertical (0~90) 사용자의 동작이 가로 방향인지 세로 방향인지 판단하는 기준 각도(0~90)\r\n * @property {Number} [threshold=0] Minimal pan distance required before recognizing 사용자의 Pan 동작을 인식하기 위해산 최소한의 거리\r\n**/\r\n/**\r\n * @class eg.Axes.PanInput\r\n * @classdesc A module that passes the amount of change to eg.Axes when the mouse or touchscreen is down and moved. use less than two axes.\r\n * @ko 마우스나 터치 스크린을 누르고 움직일때의 변화량을 eg.Axes에 전달하는 모듈. 두개 이하의 축을 사용한다.\r\n *\r\n * @example\r\n * const pan = new eg.Axes.PanInput(\"#area\", {\r\n * \t\tinputType: [\"touch\"],\r\n * \t\tscale: [1, 1.3],\r\n * });\r\n *\r\n * // Connect the 'something2' axis to the mouse or touchscreen x position when the mouse or touchscreen is down and moved.\r\n * // Connect the 'somethingN' axis to the mouse or touchscreen y position when the mouse or touchscreen is down and moved.\r\n * axes.connect([\"something2\", \"somethingN\"], pan); // or axes.connect(\"something2 somethingN\", pan);\r\n *\r\n * // Connect only one 'something1' axis to the mouse or touchscreen x position when the mouse or touchscreen is down and moved.\r\n * axes.connect([\"something1\"], pan); // or axes.connect(\"something1\", pan);\r\n *\r\n * // Connect only one 'something2' axis to the mouse or touchscreen y position when the mouse or touchscreen is down and moved.\r\n * axes.connect([\"\", \"something2\"], pan); // or axes.connect(\" something2\", pan);\r\n *\r\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.PanInput module eg.Axes.PanInput 모듈을 사용할 엘리먼트\r\n * @param {PanInputOption} [options] The option object of the eg.Axes.PanInput moduleeg.Axes.PanInput 모듈의 옵션 객체\r\n */\r\nvar PanInput = /** @class */ (function () {\r\n function PanInput(el, options) {\r\n this.axes = [];\r\n this.hammer = null;\r\n this.element = null;\r\n /**\r\n * Hammer helps you add support for touch gestures to your page\r\n *\r\n * @external Hammer\r\n * @see {@link http://hammerjs.github.io|Hammer.JS}\r\n * @see {@link http://hammerjs.github.io/jsdoc/Hammer.html|Hammer.JS API documents}\r\n * @see Hammer.JS applies specific CSS properties by {@link http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html|default} when creating an instance. The eg.Axes module removes all default CSS properties provided by Hammer.JS\r\n */\r\n if (typeof Hammer === \"undefined\") {\r\n throw new Error(\"The Hammerjs must be loaded before eg.Axes.PanInput.\\nhttp://hammerjs.github.io/\");\r\n }\r\n this.element = utils_1.$(el);\r\n this.options = __assign({\r\n inputType: [\"touch\", \"mouse\"],\r\n scale: [1, 1],\r\n thresholdAngle: 45,\r\n threshold: 0\r\n }, options);\r\n this.onHammerInput = this.onHammerInput.bind(this);\r\n this.onPanmove = this.onPanmove.bind(this);\r\n this.onPanend = this.onPanend.bind(this);\r\n }\r\n // get user's direction\r\n PanInput.getDirectionByAngle = function (angle, thresholdAngle) {\r\n if (thresholdAngle < 0 || thresholdAngle > 90) {\r\n return const_1.DIRECTION.DIRECTION_NONE;\r\n }\r\n var toAngle = Math.abs(angle);\r\n return toAngle > thresholdAngle && toAngle < 180 - thresholdAngle ?\r\n const_1.DIRECTION.DIRECTION_VERTICAL : const_1.DIRECTION.DIRECTION_HORIZONTAL;\r\n };\r\n PanInput.getNextOffset = function (speeds, deceleration) {\r\n var normalSpeed = Math.sqrt(speeds[0] * speeds[0] + speeds[1] * speeds[1]);\r\n var duration = Math.abs(normalSpeed / -deceleration);\r\n return [\r\n speeds[0] / 2 * duration,\r\n speeds[1] / 2 * duration\r\n ];\r\n };\r\n PanInput.useDirection = function (checkType, direction, userDirection) {\r\n if (userDirection) {\r\n return !!((direction === const_1.DIRECTION.DIRECTION_ALL) ||\r\n ((direction & checkType) && (userDirection & checkType)));\r\n }\r\n else {\r\n return !!(direction & checkType);\r\n }\r\n };\r\n PanInput.prototype.mapAxes = function (axes) {\r\n var useHorizontal = !!axes[0];\r\n var useVertical = !!axes[1];\r\n if (useHorizontal && useVertical) {\r\n this._direction = const_1.DIRECTION.DIRECTION_ALL;\r\n }\r\n else if (useHorizontal) {\r\n this._direction = const_1.DIRECTION.DIRECTION_HORIZONTAL;\r\n }\r\n else if (useVertical) {\r\n this._direction = const_1.DIRECTION.DIRECTION_VERTICAL;\r\n }\r\n else {\r\n this._direction = const_1.DIRECTION.DIRECTION_NONE;\r\n }\r\n this.axes = axes;\r\n };\r\n PanInput.prototype.connect = function (observer) {\r\n var hammerOption = {\r\n direction: this._direction,\r\n threshold: this.options.threshold\r\n };\r\n if (this.hammer) {\r\n this.dettachEvent();\r\n // hammer remove previous PanRecognizer.\r\n this.hammer.add(new Hammer.Pan(hammerOption));\r\n }\r\n else {\r\n var keyValue = this.element[InputType_1.UNIQUEKEY];\r\n if (keyValue) {\r\n this.hammer.destroy();\r\n }\r\n else {\r\n keyValue = String(Math.round(Math.random() * new Date().getTime()));\r\n }\r\n var inputClass = InputType_1.convertInputType(this.options.inputType);\r\n if (!inputClass) {\r\n throw new Error(\"Wrong inputType parameter!\");\r\n }\r\n this.hammer = InputType_1.createHammer(this.element, [Hammer.Pan, hammerOption], inputClass);\r\n this.element[InputType_1.UNIQUEKEY] = keyValue;\r\n }\r\n this.attachEvent(observer);\r\n return this;\r\n };\r\n PanInput.prototype.disconnect = function () {\r\n if (this.hammer) {\r\n this.dettachEvent();\r\n }\r\n this._direction = const_1.DIRECTION.DIRECTION_NONE;\r\n return this;\r\n };\r\n /**\r\n * Destroys elements, properties, and events used in a module.\r\n * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\r\n * @method eg.Axes.PanInput#destroy\r\n */\r\n PanInput.prototype.destroy = function () {\r\n this.disconnect();\r\n if (this.hammer) {\r\n this.hammer.destroy();\r\n }\r\n delete this.element[InputType_1.UNIQUEKEY];\r\n this.element = null;\r\n this.hammer = null;\r\n };\r\n /**\r\n * Enables input devices\r\n * @ko 입력 장치를 사용할 수 있게 한다\r\n * @method eg.Axes.PanInput#enable\r\n * @return {eg.Axes.PanInput} An instance of a module itself 모듈 자신의 인스턴스\r\n */\r\n PanInput.prototype.enable = function () {\r\n this.hammer && (this.hammer.get(\"pan\").options.enable = true);\r\n return this;\r\n };\r\n /**\r\n * Disables input devices\r\n * @ko 입력 장치를 사용할 수 없게 한다.\r\n * @method eg.Axes.PanInput#disable\r\n * @return {eg.Axes.PanInput} An instance of a module itself 모듈 자신의 인스턴스\r\n */\r\n PanInput.prototype.disable = function () {\r\n this.hammer && (this.hammer.get(\"pan\").options.enable = false);\r\n return this;\r\n };\r\n /**\r\n * Returns whether to use an input device\r\n * @ko 입력 장치를 사용 여부를 반환한다.\r\n * @method eg.Axes.PanInput#isEnable\r\n * @return {Boolean} Whether to use an input device 입력장치 사용여부\r\n */\r\n PanInput.prototype.isEnable = function () {\r\n return !!(this.hammer && this.hammer.get(\"pan\").options.enable);\r\n };\r\n PanInput.prototype.onHammerInput = function (event) {\r\n if (this.isEnable()) {\r\n if (event.isFirst) {\r\n this.observer.hold(this, event);\r\n }\r\n else if (event.isFinal) {\r\n this.onPanend(event);\r\n }\r\n }\r\n };\r\n PanInput.prototype.onPanmove = function (event) {\r\n var userDirection = PanInput.getDirectionByAngle(event.angle, this.options.thresholdAngle);\r\n // not support offset properties in Hammerjs - start\r\n var prevInput = this.hammer.session.prevInput;\r\n /* eslint-disable no-param-reassign */\r\n if (prevInput) {\r\n event.offsetX = event.deltaX - prevInput.deltaX;\r\n event.offsetY = event.deltaY - prevInput.deltaY;\r\n }\r\n else {\r\n event.offsetX = 0;\r\n event.offsetY = 0;\r\n }\r\n var offset = this.getOffset([event.offsetX, event.offsetY], [\r\n PanInput.useDirection(const_1.DIRECTION.DIRECTION_HORIZONTAL, this._direction, userDirection),\r\n PanInput.useDirection(const_1.DIRECTION.DIRECTION_VERTICAL, this._direction, userDirection)\r\n ]);\r\n var prevent = offset.some(function (v) { return v !== 0; });\r\n if (prevent) {\r\n event.srcEvent.preventDefault();\r\n event.srcEvent.stopPropagation();\r\n }\r\n event.preventSystemEvent = prevent;\r\n prevent && this.observer.change(this, event, InputType_1.toAxis(this.axes, offset));\r\n };\r\n PanInput.prototype.onPanend = function (event) {\r\n var offset = this.getOffset([\r\n Math.abs(event.velocityX) * (event.deltaX < 0 ? -1 : 1),\r\n Math.abs(event.velocityY) * (event.deltaY < 0 ? -1 : 1)\r\n ], [\r\n PanInput.useDirection(const_1.DIRECTION.DIRECTION_HORIZONTAL, this._direction),\r\n PanInput.useDirection(const_1.DIRECTION.DIRECTION_VERTICAL, this._direction)\r\n ]);\r\n offset = PanInput.getNextOffset(offset, this.observer.options.deceleration);\r\n this.observer.release(this, event, InputType_1.toAxis(this.axes, offset));\r\n };\r\n PanInput.prototype.attachEvent = function (observer) {\r\n this.observer = observer;\r\n this.hammer.on(\"hammer.input\", this.onHammerInput)\r\n .on(\"panstart panmove\", this.onPanmove);\r\n };\r\n PanInput.prototype.dettachEvent = function () {\r\n this.hammer.off(\"hammer.input\", this.onHammerInput)\r\n .off(\"panstart panmove\", this.onPanmove);\r\n this.observer = null;\r\n };\r\n PanInput.prototype.getOffset = function (properties, useDirection) {\r\n var offset = [0, 0];\r\n var scale = this.options.scale;\r\n if (useDirection[0]) {\r\n offset[0] = (properties[0] * scale[0]);\r\n }\r\n if (useDirection[1]) {\r\n offset[1] = (properties[1] * scale[1]);\r\n }\r\n return offset;\r\n };\r\n return PanInput;\r\n}());\r\nexports.PanInput = PanInput;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/inputType/PanInput.ts\n// module id = 13\n// module chunks = 0 1","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.__esModule = true;\r\nvar Hammer = require(\"hammerjs\");\r\nvar utils_1 = require(\"../utils\");\r\nvar InputType_1 = require(\"./InputType\");\r\n/**\r\n * @typedef {Object} PinchInputOption The option object of the eg.Axes.PinchInput module\r\n * @ko eg.Axes.PinchInput 모듈의 옵션 객체\r\n * @property {Number} [scale=1] Coordinate scale that a user can move사용자의 동작으로 이동하는 좌표의 배율\r\n * @property {Number} [threshold=0] Minimal scale before recognizing 사용자의 Pinch 동작을 인식하기 위해산 최소한의 배율\r\n**/\r\n/**\r\n * @class eg.Axes.PinchInput\r\n * @classdesc A module that passes the amount of change to eg.Axes when two pointers are moving toward (zoom-in) or away from each other (zoom-out). use one axis.\r\n * @ko 2개의 pointer를 이용하여 zoom-in하거나 zoom-out 하는 동작의 변화량을 eg.Axes에 전달하는 모듈. 한 개 의 축을 사용한다.\r\n * @example\r\n * const pinch = new eg.Axes.PinchInput(\"#area\", {\r\n * \t\tscale: 1\r\n * });\r\n *\r\n * // Connect 'something' axis when two pointers are moving toward (zoom-in) or away from each other (zoom-out).\r\n * axes.connect(\"something\", pinch);\r\n *\r\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.PinchInput module eg.Axes.PinchInput 모듈을 사용할 엘리먼트\r\n * @param {PinchInputOption} [options] The option object of the eg.Axes.PinchInput moduleeg.Axes.PinchInput 모듈의 옵션 객체\r\n */\r\nvar PinchInput = /** @class */ (function () {\r\n function PinchInput(el, options) {\r\n this.axes = [];\r\n this.hammer = null;\r\n this.element = null;\r\n this._base = null;\r\n this._prev = null;\r\n /**\r\n * Hammer helps you add support for touch gestures to your page\r\n *\r\n * @external Hammer\r\n * @see {@link http://hammerjs.github.io|Hammer.JS}\r\n * @see {@link http://hammerjs.github.io/jsdoc/Hammer.html|Hammer.JS API documents}\r\n * @see Hammer.JS applies specific CSS properties by {@link http://hammerjs.github.io/jsdoc/Hammer.defaults.cssProps.html|default} when creating an instance. The eg.Axes module removes all default CSS properties provided by Hammer.JS\r\n */\r\n if (typeof Hammer === \"undefined\") {\r\n throw new Error(\"The Hammerjs must be loaded before eg.Axes.PinchInput.\\nhttp://hammerjs.github.io/\");\r\n }\r\n this.element = utils_1.$(el);\r\n this.options = __assign({\r\n scale: 1,\r\n threshold: 0\r\n }, options);\r\n this.onPinchStart = this.onPinchStart.bind(this);\r\n this.onPinchMove = this.onPinchMove.bind(this);\r\n this.onPinchEnd = this.onPinchEnd.bind(this);\r\n }\r\n PinchInput.prototype.mapAxes = function (axes) {\r\n this.axes = axes;\r\n };\r\n PinchInput.prototype.connect = function (observer) {\r\n var hammerOption = {\r\n threshold: this.options.threshold\r\n };\r\n if (this.hammer) {\r\n this.dettachEvent();\r\n // hammer remove previous PinchRecognizer.\r\n this.hammer.add(new Hammer.Pinch(hammerOption));\r\n }\r\n else {\r\n var keyValue = this.element[InputType_1.UNIQUEKEY];\r\n if (keyValue) {\r\n this.hammer.destroy();\r\n }\r\n else {\r\n keyValue = String(Math.round(Math.random() * new Date().getTime()));\r\n }\r\n this.hammer = InputType_1.createHammer(this.element, [Hammer.Pinch, hammerOption], Hammer.TouchInput);\r\n this.element[InputType_1.UNIQUEKEY] = keyValue;\r\n }\r\n this.attachEvent(observer);\r\n return this;\r\n };\r\n PinchInput.prototype.disconnect = function () {\r\n if (this.hammer) {\r\n this.dettachEvent();\r\n }\r\n return this;\r\n };\r\n /**\r\n * Destroys elements, properties, and events used in a module.\r\n * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\r\n * @method eg.Axes.PinchInput#destroy\r\n */\r\n PinchInput.prototype.destroy = function () {\r\n this.disconnect();\r\n if (this.hammer) {\r\n this.hammer.destroy();\r\n }\r\n delete this.element[InputType_1.UNIQUEKEY];\r\n this.element = null;\r\n this.hammer = null;\r\n };\r\n PinchInput.prototype.onPinchStart = function (event) {\r\n this._base = this.observer.get(this)[this.axes[0]];\r\n var offset = this.getOffset(event.scale);\r\n this.observer.hold(this, event);\r\n this.observer.change(this, event, InputType_1.toAxis(this.axes, [offset]));\r\n this._prev = event.scale;\r\n };\r\n PinchInput.prototype.onPinchMove = function (event) {\r\n var offset = this.getOffset(event.scale, this._prev);\r\n this.observer.change(this, event, InputType_1.toAxis(this.axes, [offset]));\r\n this._prev = event.scale;\r\n };\r\n PinchInput.prototype.onPinchEnd = function (event) {\r\n var offset = this.getOffset(event.scale, this._prev);\r\n this.observer.change(this, event, InputType_1.toAxis(this.axes, [offset]));\r\n this.observer.release(this, event, InputType_1.toAxis(this.axes, [0]), 0);\r\n this._base = null;\r\n this._prev = null;\r\n };\r\n PinchInput.prototype.getOffset = function (pinchScale, prev) {\r\n if (prev === void 0) { prev = 1; }\r\n return this._base * (pinchScale - prev) * this.options.scale;\r\n };\r\n PinchInput.prototype.attachEvent = function (observer) {\r\n this.observer = observer;\r\n this.hammer.on(\"pinchstart\", this.onPinchStart)\r\n .on(\"pinchmove\", this.onPinchMove)\r\n .on(\"pinchend\", this.onPinchEnd);\r\n };\r\n PinchInput.prototype.dettachEvent = function () {\r\n this.hammer.off(\"pinchstart\", this.onPinchStart)\r\n .off(\"pinchmove\", this.onPinchMove)\r\n .off(\"pinchend\", this.onPinchEnd);\r\n this.observer = null;\r\n this._prev = null;\r\n };\r\n /**\r\n * Enables input devices\r\n * @ko 입력 장치를 사용할 수 있게 한다\r\n * @method eg.Axes.PinchInput#enable\r\n * @return {eg.Axes.PinchInput} An instance of a module itself 모듈 자신의 인스턴스\r\n */\r\n PinchInput.prototype.enable = function () {\r\n this.hammer && (this.hammer.get(\"pinch\").options.enable = true);\r\n return this;\r\n };\r\n /**\r\n * Disables input devices\r\n * @ko 입력 장치를 사용할 수 없게 한다.\r\n * @method eg.Axes.PinchInput#disable\r\n * @return {eg.Axes.PinchInput} An instance of a module itself 모듈 자신의 인스턴스\r\n */\r\n PinchInput.prototype.disable = function () {\r\n this.hammer && (this.hammer.get(\"pinch\").options.enable = false);\r\n return this;\r\n };\r\n /**\r\n * Returns whether to use an input device\r\n * @ko 입력 장치를 사용 여부를 반환한다.\r\n * @method eg.Axes.PinchInput#isEnable\r\n * @return {Boolean} Whether to use an input device 입력장치 사용여부\r\n */\r\n PinchInput.prototype.isEnable = function () {\r\n return !!(this.hammer && this.hammer.get(\"pinch\").options.enable);\r\n };\r\n return PinchInput;\r\n}());\r\nexports.PinchInput = PinchInput;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/inputType/PinchInput.ts\n// module id = 14\n// module chunks = 0 1","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.__esModule = true;\r\nvar utils_1 = require(\"../utils\");\r\nvar InputType_1 = require(\"./InputType\");\r\n/**\r\n * @typedef {Object} WheelInputOption The option object of the eg.Axes.WheelInput module\r\n * @ko eg.Axes.WheelInput 모듈의 옵션 객체\r\n * @property {Number} [scale=1] Coordinate scale that a user can move사용자의 동작으로 이동하는 좌표의 배율\r\n**/\r\n/**\r\n * @class eg.Axes.WheelInput\r\n * @classdesc A module that passes the amount of change to eg.Axes when the mouse wheel is moved. use one axis.\r\n * @ko 마우스 휠이 움직일때의 변화량을 eg.Axes에 전달하는 모듈. 한 개 의 축을 사용한다.\r\n *\r\n * @example\r\n * const wheel = new eg.Axes.WheelInput(\"#area\", {\r\n * \t\tscale: 1\r\n * });\r\n *\r\n * // Connect 'something' axis when the mousewheel is moved.\r\n * axes.connect(\"something\", wheel);\r\n *\r\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.WheelInput module eg.Axes.WheelInput 모듈을 사용할 엘리먼트\r\n * @param {WheelInputOption} [options] The option object of the eg.Axes.WheelInput moduleeg.Axes.WheelInput 모듈의 옵션 객체\r\n */\r\nvar WheelInput = /** @class */ (function () {\r\n function WheelInput(el, options) {\r\n this.axes = [];\r\n this.element = null;\r\n this._isEnabled = false;\r\n this._isHolded = false;\r\n this._timer = null;\r\n this.element = utils_1.$(el);\r\n this.options = __assign({\r\n scale: 1\r\n }, options);\r\n this.onWheel = this.onWheel.bind(this);\r\n }\r\n WheelInput.prototype.mapAxes = function (axes) {\r\n this.axes = axes;\r\n };\r\n WheelInput.prototype.connect = function (observer) {\r\n this.dettachEvent();\r\n this.attachEvent(observer);\r\n return this;\r\n };\r\n WheelInput.prototype.disconnect = function () {\r\n this.dettachEvent();\r\n return this;\r\n };\r\n /**\r\n * Destroys elements, properties, and events used in a module.\r\n * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\r\n * @method eg.Axes.WheelInput#destroy\r\n */\r\n WheelInput.prototype.destroy = function () {\r\n this.disconnect();\r\n this.element = null;\r\n };\r\n WheelInput.prototype.onWheel = function (event) {\r\n var _this = this;\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n event.preventDefault();\r\n if (event.deltaY === 0) {\r\n return;\r\n }\r\n if (!this._isHolded) {\r\n this.observer.hold(this, event);\r\n this._isHolded = true;\r\n }\r\n var offset = (event.deltaY > 0 ? -1 : 1) * this.options.scale;\r\n this.observer.change(this, event, InputType_1.toAxis(this.axes, [offset]));\r\n clearTimeout(this._timer);\r\n this._timer = setTimeout(function () {\r\n if (_this._isHolded) {\r\n _this.observer.release(_this, event, InputType_1.toAxis(_this.axes, [0]));\r\n _this._isHolded = false;\r\n }\r\n }, 50);\r\n };\r\n WheelInput.prototype.attachEvent = function (observer) {\r\n this.observer = observer;\r\n this.element.addEventListener(\"wheel\", this.onWheel);\r\n this._isEnabled = true;\r\n };\r\n WheelInput.prototype.dettachEvent = function () {\r\n this.element.removeEventListener(\"wheel\", this.onWheel);\r\n this._isEnabled = false;\r\n this.observer = null;\r\n };\r\n /**\r\n * Enables input devices\r\n * @ko 입력 장치를 사용할 수 있게 한다\r\n * @method eg.Axes.WheelInput#enable\r\n * @return {eg.Axes.WheelInput} An instance of a module itself 모듈 자신의 인스턴스\r\n */\r\n WheelInput.prototype.enable = function () {\r\n this._isEnabled = true;\r\n return this;\r\n };\r\n /**\r\n * Disables input devices\r\n * @ko 입력 장치를 사용할 수 없게 한다.\r\n * @method eg.Axes.WheelInput#disable\r\n * @return {eg.Axes.WheelInput} An instance of a module itself 모듈 자신의 인스턴스\r\n */\r\n WheelInput.prototype.disable = function () {\r\n this._isEnabled = false;\r\n return this;\r\n };\r\n /**\r\n * Returns whether to use an input device\r\n * @ko 입력 장치를 사용 여부를 반환한다.\r\n * @method eg.Axes.WheelInput#isEnable\r\n * @return {Boolean} Whether to use an input device 입력장치 사용여부\r\n */\r\n WheelInput.prototype.isEnable = function () {\r\n return this._isEnabled;\r\n };\r\n return WheelInput;\r\n}());\r\nexports.WheelInput = WheelInput;\r\n;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/inputType/WheelInput.ts\n// module id = 15\n// module chunks = 0 1","\"use strict\";\r\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nexports.__esModule = true;\r\nvar utils_1 = require(\"../utils\");\r\nvar InputType_1 = require(\"./InputType\");\r\nexports.KEYMAP = {\r\n LEFT_ARROW: 37,\r\n A: 65,\r\n UP_ARROW: 38,\r\n W: 87,\r\n RIGHT_ARROW: 39,\r\n D: 68,\r\n DOWN_ARROW: 40,\r\n S: 83\r\n};\r\n/**\r\n * @typedef {Object} MoveKeyInputOption The option object of the eg.Axes.MoveKeyInput module\r\n * @ko eg.Axes.MoveKeyInput 모듈의 옵션 객체\r\n * @property {Array} [scale] Coordinate scale that a user can move사용자의 동작으로 이동하는 좌표의 배율\r\n * @property {Number} [scale[0]=1] Coordinate scale for the first axis첫번째 축의 배율\r\n * @property {Number} [scale[1]=1] Coordinate scale for the decond axis두번째 축의 배율\r\n**/\r\n/**\r\n * @class eg.Axes.MoveKeyInput\r\n * @classdesc A module that passes the amount of change to eg.Axes when the move key stroke is occured. use two axis.\r\n * @ko 이동키 입력이 발생했을 때의 변화량을 eg.Axes에 전달하는 모듈. 두 개 의 축을 사용한다.\r\n *\r\n * @example\r\n * const moveKey = new eg.Axes.MoveKeyInput(\"#area\", {\r\n * \t\tscale: [1, 1]\r\n * });\r\n *\r\n * // Connect 'x', 'y' axes when the moveKey is pressed.\r\n * axes.connect([\"x\", \"y\"], moveKey);\r\n *\r\n * @param {HTMLElement|String|jQuery} element An element to use the eg.Axes.MoveKeyInput module eg.Axes.MoveKeyInput 모듈을 사용할 엘리먼트\r\n * @param {MoveKeyInputOption} [options] The option object of the eg.Axes.MoveKeyInput moduleeg.Axes.MoveKeyInput 모듈의 옵션 객체\r\n */\r\nvar MoveKeyInput = /** @class */ (function () {\r\n function MoveKeyInput(el, options) {\r\n this.axes = [];\r\n this.element = null;\r\n this._isEnabled = false;\r\n this._isHolded = false;\r\n this.element = utils_1.$(el);\r\n this.options = __assign({\r\n scale: [1, 1]\r\n }, options);\r\n this.onKeydown = this.onKeydown.bind(this);\r\n }\r\n MoveKeyInput.prototype.mapAxes = function (axes) {\r\n this.axes = axes;\r\n };\r\n MoveKeyInput.prototype.connect = function (observer) {\r\n this.dettachEvent();\r\n // add tabindex=\"0\" to the container for making it focusable\r\n if (this.element.getAttribute(\"tabindex\") !== \"0\") {\r\n this.element.setAttribute(\"tabindex\", \"0\");\r\n }\r\n this.attachEvent(observer);\r\n return this;\r\n };\r\n MoveKeyInput.prototype.disconnect = function () {\r\n this.dettachEvent();\r\n return this;\r\n };\r\n /**\r\n * Destroys elements, properties, and events used in a module.\r\n * @ko 모듈에 사용한 엘리먼트와 속성, 이벤트를 해제한다.\r\n * @method eg.Axes.MoveKeyInput#destroy\r\n */\r\n MoveKeyInput.prototype.destroy = function () {\r\n this.disconnect();\r\n this.element = null;\r\n };\r\n MoveKeyInput.prototype.onKeydown = function (event) {\r\n if (!this._isEnabled) {\r\n return;\r\n }\r\n event.preventDefault();\r\n var isMoveKey = true;\r\n var offsets;\r\n var e = event;\r\n switch (e.keyCode) {\r\n case exports.KEYMAP.LEFT_ARROW:\r\n case exports.KEYMAP.A:\r\n offsets = [-this.options.scale[0], 0];\r\n break;\r\n case exports.KEYMAP.RIGHT_ARROW:\r\n case exports.KEYMAP.D:\r\n offsets = [this.options.scale[0], 0];\r\n break;\r\n case exports.KEYMAP.UP_ARROW:\r\n case exports.KEYMAP.W:\r\n offsets = [0, this.options.scale[1]];\r\n break;\r\n case exports.KEYMAP.DOWN_ARROW:\r\n case exports.KEYMAP.S:\r\n offsets = [0, -this.options.scale[1]];\r\n break;\r\n default:\r\n isMoveKey = false;\r\n }\r\n if (isMoveKey) {\r\n this.observer.change(this, event, InputType_1.toAxis(this.axes, offsets));\r\n // Suppress \"double action\" if event handled\r\n e.preventDefault();\r\n }\r\n };\r\n MoveKeyInput.prototype.attachEvent = function (observer) {\r\n this.observer = observer;\r\n this.element.addEventListener(\"keydown\", this.onKeydown, false);\r\n this._isEnabled = true;\r\n };\r\n MoveKeyInput.prototype.dettachEvent = function () {\r\n this.element.removeEventListener(\"keydown\", this.onKeydown, false);\r\n this._isEnabled = false;\r\n this.observer = null;\r\n };\r\n /**\r\n * Enables input devices\r\n * @ko 입력 장치를 사용할 수 있게 한다\r\n * @method eg.Axes.MoveKeyInput#enable\r\n * @return {eg.Axes.MoveKeyInput} An instance of a module itself 모듈 자신의 인스턴스\r\n */\r\n MoveKeyInput.prototype.enable = function () {\r\n this._isEnabled = true;\r\n return this;\r\n };\r\n /**\r\n * Disables input devices\r\n * @ko 입력 장치를 사용할 수 없게 한다.\r\n * @method eg.Axes.MoveKeyInput#disable\r\n * @return {eg.Axes.MoveKeyInput} An instance of a module itself 모듈 자신의 인스턴스\r\n */\r\n MoveKeyInput.prototype.disable = function () {\r\n this._isEnabled = false;\r\n return this;\r\n };\r\n /**\r\n * Returns whether to use an input device\r\n * @ko 입력 장치를 사용 여부를 반환한다.\r\n * @method eg.Axes.MoveKeyInput#isEnable\r\n * @return {Boolean} Whether to use an input device 입력장치 사용여부\r\n */\r\n MoveKeyInput.prototype.isEnable = function () {\r\n return this._isEnabled;\r\n };\r\n return MoveKeyInput;\r\n}());\r\nexports.MoveKeyInput = MoveKeyInput;\r\n;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/inputType/MoveKeyInput.ts\n// module id = 16\n// module chunks = 0 1"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;A;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC7HA;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACtBA;AACA;AACA;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC7aA;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC5MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AClJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AC9KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;A","sourceRoot":""}