{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///shifty.js","webpack:///webpack/bootstrap 028c2bc4e6fbb5737598","webpack:///./src/tweenable.js","webpack:///./~/object-assign/index.js","webpack:///./src/bezier.js","webpack:///./src/interpolate.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/easing-functions.js","webpack:///./src/main.js","webpack:///./src/token.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","global","_interopRequireWildcard","obj","newObj","key","default","_classCallCheck","instance","Constructor","TypeError","tween","config","arguments","length","undefined","tweenable","Tweenable","promise","composeEasingObject","tweenProps","clone","each","_createClass","defineProperties","target","props","descriptor","writable","protoProps","staticProps","_typeof","Symbol","iterator","constructor","_easingFunctions","easingFunctions","_objectAssign","_objectAssign2","_token","token","window","cancelTimer","cancelAnimationFrame","webkitCancelAnimationFrame","oCancelAnimationFrame","msCancelAnimationFrame","mozCancelRequestAnimationFrame","clearTimeout","DEFAULT_SCHEDULE_FUNCTION","requestAnimationFrame","webkitRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","mozRequestAnimationFrame","setTimeout","noop","fn","keys","forEach","formulas","tweenProp","start","end","easingFunc","position","forPosition","currentState","originalState","targetState","duration","timestamp","easing","normalizedPosition","easingObjectProp","easingFn","fromTweenParams","composedEasing","typeofEasing","prop","initialState","_currentState","_configured","_scheduleFunction","setConfig","filterName","_this","filters","args","_filterArgs","filter","apply","currentTimeOverride","_this2","_arguments","_delay","_duration","_step","_targetState","_timestamp","endTime","currentTime","Math","min","now","hasEnded","offset","isPlaying","_attachment","stop","_scheduleId","_timeoutHandler","_applyFilter","_originalState","_easing","_isTweening","_start","resume","_this3","attachment","_pausedAtTime","delay","step","from","to","Promised","Promise","_promise","resolve","reject","_resolve","_reject","catch","state","_isPaused","millisecond","max","pause","gotoEnd","scheduleFunction","_this4","Date","_","toObject","val","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","assign","test1","String","getOwnPropertyNames","test2","fromCharCode","map","join","test3","split","letter","err","source","symbols","cubicBezierAtTime","t","p1x","p1y","p2x","p2y","ax","bx","cx","ay","by","cy","sampleCurveX","sampleCurveY","sampleCurveDerivativeX","fabs","solveCurveX","x","epsilon","t0","t1","t2","x2","d2","unsetBezierFunction","setBezierFunction","_tweenable","getCubicBezierTransition","x1","y1","y2","pos","displayName","interpolate","mockTweenable","current","easingObject","set","interpolatedValues","g","Function","eval","e","linear","easeInQuad","pow","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","PI","easeOutSine","sin","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeOutBounce","easeInBack","easeOutBack","easeInOutBack","elastic","swingFromTo","swingFrom","swingTo","bounce","bouncePast","easeFromTo","easeFrom","easeTo","_interpolate","_bezier","hexToDec","hex","parseInt","tweenCreated","fromState","toState","sanitizeObjectForHexProps","_tokenData","getFormatSignatures","beforeTween","expandEasingObject","expandFormattedProperties","afterTween","collapseFormattedProperties","collapseEasingObject","R_RGB","number","comma","RegExp","R_HEX","getFormatChunksFrom","rawValues","prefix","getFormatStringFrom","formattedString","chunks","match","charAt","unshift","hexToRGBArray","replace","substr","convertHexToRGB","hexString","filterStringChunks","pattern","unfilteredString","patternMatches","filteredString","sanitizeHexChunksToRGB","str","stateObject","currentProp","sanitizeRGBChunk","rgbChunk","numbers","floor","sanitizeRGBChunks","getValuesFrom","signatures","propertyName","formatString","chunkNames","formatSignatures","extractPropertyChunks","extractedValues","chunkName","getValuesList","getFormattedValues","rawValue","toFixed","_formatSignatures$pro","tokenData","easingNames","defaultEasing","firstEasing","easingName"],"mappings":"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","file":"shifty.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"shifty\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"shifty\"] = factory();\n\telse\n\t\troot[\"shifty\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"shifty\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"shifty\"] = factory();\n\telse\n\t\troot[\"shifty\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \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// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\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 = \"/assets/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 6);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Tweenable = exports.composeEasingObject = exports.tweenProps = exports.clone = exports.each = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.tween = tween;\n\nvar _easingFunctions = __webpack_require__(5);\n\nvar easingFunctions = _interopRequireWildcard(_easingFunctions);\n\nvar _objectAssign = __webpack_require__(1);\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nvar _token = __webpack_require__(7);\n\nvar token = _interopRequireWildcard(_token);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// CONSTANTS\nvar DEFAULT_EASING = 'linear';\nvar DEFAULT_DURATION = 500;\nvar UPDATE_TIME = 1000 / 60;\nvar root = typeof window !== 'undefined' ? window : global;\n\nvar cancelTimer = root.cancelAnimationFrame || root.webkitCancelAnimationFrame || root.oCancelAnimationFrame || root.msCancelAnimationFrame || root.mozCancelRequestAnimationFrame || root.clearTimeout;\n\n// requestAnimationFrame() shim by Paul Irish (modified for Shifty)\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\nvar DEFAULT_SCHEDULE_FUNCTION = root.requestAnimationFrame || root.webkitRequestAnimationFrame || root.oRequestAnimationFrame || root.msRequestAnimationFrame || root.mozCancelRequestAnimationFrame && root.mozRequestAnimationFrame || setTimeout;\n\nvar noop = function noop() {};\n\n/**\n * Handy shortcut for doing a for-in loop. This is not a \"normal\" each\n * function, it is optimized for Shifty. The iterator function only receives\n * the property name, not the value.\n * @param {Object} obj\n * @param {Function(string)} fn\n * @private\n */\nvar each = exports.each = function each(obj, fn) {\n return Object.keys(obj).forEach(fn);\n};\n\n/**\n * @param {Object} obj\n * @return {Object}\n * @private\n */\nvar clone = exports.clone = function clone(obj) {\n return (0, _objectAssign2.default)({}, obj);\n};\n\nvar formulas = clone(easingFunctions);\n\n/**\n * Tweens a single property.\n * @param {number} start The value that the tween started from.\n * @param {number} end The value that the tween should end at.\n * @param {Function} easingFunc The easing curve to apply to the tween.\n * @param {number} position The normalized position (between 0.0 and 1.0) to\n * calculate the midpoint of 'start' and 'end' against.\n * @return {number} The tweened value.\n * @private\n */\nvar tweenProp = function tweenProp(start, end, easingFunc, position) {\n return start + (end - start) * easingFunc(position);\n};\n\n/**\n * Calculates the interpolated tween values of an Object for a given\n * timestamp.\n * @param {Number} forPosition The position to compute the state for.\n * @param {Object} currentState Current state properties.\n * @param {Object} originalState: The original state properties the Object is\n * tweening from.\n * @param {Object} targetState: The destination state properties the Object\n * is tweening to.\n * @param {number} duration: The length of the tween in milliseconds.\n * @param {number} timestamp: The UNIX epoch time at which the tween began.\n * @param {Object.} easing: This Object's keys must correspond\n * to the keys in targetState.\n * @private\n */\nvar tweenProps = exports.tweenProps = function tweenProps(forPosition, currentState, originalState, targetState, duration, timestamp, easing) {\n var normalizedPosition = forPosition < timestamp ? 0 : (forPosition - timestamp) / duration;\n\n each(currentState, function (key) {\n var easingObjectProp = easing[key];\n var easingFn = typeof easingObjectProp === 'function' ? easingObjectProp : formulas[easingObjectProp];\n\n currentState[key] = tweenProp(originalState[key], targetState[key], easingFn, normalizedPosition);\n });\n\n return currentState;\n};\n\n/**\n * Creates a usable easing Object from a string, a function or another easing\n * Object. If `easing` is an Object, then this function clones it and fills\n * in the missing properties with `\"linear\"`.\n * @param {Object.} fromTweenParams\n * @param {Object|string|Function} easing\n * @return {Object.}\n * @private\n */\nvar composeEasingObject = exports.composeEasingObject = function composeEasingObject(fromTweenParams) {\n var easing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_EASING;\n\n var composedEasing = {};\n var typeofEasing = typeof easing === 'undefined' ? 'undefined' : _typeof(easing);\n\n if (typeofEasing === 'string' || typeofEasing === 'function') {\n each(fromTweenParams, function (prop) {\n return composedEasing[prop] = easing;\n });\n } else {\n each(fromTweenParams, function (prop) {\n return composedEasing[prop] = composedEasing[prop] || easing[prop] || DEFAULT_EASING;\n });\n }\n\n return composedEasing;\n};\n\nvar Tweenable = exports.Tweenable = function () {\n /**\n * @param {Object} [initialState={}] The values that the initial tween should\n * start at if a `from` value is not provided to {@link\n * shifty.Tweenable#tween} or {@link shifty.Tweenable#setConfig}.\n * @param {shifty.tweenConfig} [config] Configuration object to be passed to\n * {@link shifty.Tweenable#setConfig}.\n * @constructs shifty.Tweenable\n */\n function Tweenable() {\n var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;\n\n _classCallCheck(this, Tweenable);\n\n this._currentState = initialState;\n this._configured = false;\n this._scheduleFunction = DEFAULT_SCHEDULE_FUNCTION;\n\n // To prevent unnecessary calls to setConfig do not set default\n // configuration here. Only set default configuration immediately before\n // tweening if none has been set.\n if (config !== undefined) {\n this.setConfig(config);\n }\n }\n\n /**\n * Applies a filter to Tweenable instance.\n * @param {shifty.Tweenable} tweenable The `Tweenable` instance to call the filter\n * upon.\n * @param {string} filterName The name of the filter to apply.\n * @private\n */\n\n\n _createClass(Tweenable, [{\n key: '_applyFilter',\n value: function _applyFilter(filterName) {\n var _this = this;\n\n var filters = Tweenable.filters;\n var args = this._filterArgs;\n\n each(filters, function (name) {\n var filter = filters[name][filterName];\n\n if (typeof filter !== 'undefined') {\n filter.apply(_this, args);\n }\n });\n }\n\n /**\n * Handles the update logic for one step of a tween.\n * @param {number} [currentTimeOverride] Needed for accurate timestamp in\n * shifty.Tweenable#seek.\n * @private\n */\n\n }, {\n key: '_timeoutHandler',\n value: function _timeoutHandler(currentTimeOverride) {\n var _this2 = this,\n _arguments = arguments;\n\n var _currentState = this._currentState,\n _delay = this._delay;\n var _duration = this._duration,\n _step = this._step,\n _targetState = this._targetState,\n _timestamp = this._timestamp;\n\n\n var endTime = _timestamp + _delay + _duration;\n var currentTime = Math.min(currentTimeOverride || Tweenable.now(), endTime);\n var hasEnded = currentTime >= endTime;\n var offset = _duration - (endTime - currentTime);\n\n if (this.isPlaying()) {\n if (hasEnded) {\n _step(_targetState, this._attachment, offset);\n this.stop(true);\n } else {\n // This function needs to be .call-ed because it is a native method in\n // some environments:\n // http://stackoverflow.com/a/9678166\n this._scheduleId = this._scheduleFunction.call(root, function () {\n return _this2._timeoutHandler.apply(_this2, _arguments);\n }, UPDATE_TIME);\n\n this._applyFilter('beforeTween');\n\n // If the animation has not yet reached the start point (e.g., there was\n // delay that has not yet completed), just interpolate the starting\n // position of the tween.\n if (currentTime < _timestamp + _delay) {\n currentTime = 1;\n _duration = 1;\n _timestamp = 1;\n } else {\n _timestamp += _delay;\n }\n\n tweenProps(currentTime, _currentState, this._originalState, _targetState, _duration, _timestamp, this._easing);\n\n this._applyFilter('afterTween');\n _step(_currentState, this._attachment, offset);\n }\n }\n }\n\n /**\n * Configure and start a tween.\n * @method shifty.Tweenable#tween\n * @param {shifty.tweenConfig} [config] Gets passed to {@link\n * shifty.Tweenable#setConfig}\n * @return {external:Promise}\n */\n\n }, {\n key: 'tween',\n value: function tween() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n var _attachment = this._attachment,\n _configured = this._configured,\n _isTweening = this._isTweening;\n\n\n if (_isTweening) {\n return this;\n }\n\n // Only set default config if no configuration has been set previously and\n // none is provided now.\n if (config !== undefined || !_configured) {\n this.setConfig(config);\n }\n\n this._timestamp = Tweenable.now();\n this._start(this.get(), _attachment);\n return this.resume();\n }\n\n /**\n * Configure a tween that will start at some point in the future.\n * @method shifty.Tweenable#setConfig\n * @param {shifty.tweenConfig} [config={}]\n * @return {shifty.Tweenable}\n */\n\n }, {\n key: 'setConfig',\n value: function setConfig() {\n var _this3 = this;\n\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._configured = true;\n\n // Attach something to this Tweenable instance (e.g.: a DOM element, an\n // object, a string, etc.);\n this._attachment = config.attachment;\n\n // Init the internal state\n (0, _objectAssign2.default)(this, {\n _pausedAtTime: null,\n _scheduleId: null,\n _delay: config.delay || 0,\n _start: config.start || noop,\n _step: config.step || noop,\n _duration: config.duration || DEFAULT_DURATION,\n _currentState: clone(config.from || this.get())\n });\n\n // Separate Object.assign here; it depends on _currentState being set above\n (0, _objectAssign2.default)(this, {\n _originalState: this.get(),\n _targetState: clone(config.to || this.get())\n });\n\n var currentState = this._currentState;\n // Ensure that there is always something to tween to.\n this._targetState = (0, _objectAssign2.default)({}, currentState, this._targetState);\n\n this._easing = composeEasingObject(currentState, config.easing);\n this._filterArgs = [currentState, this._originalState, this._targetState, this._easing];\n this._applyFilter('tweenCreated');\n\n var Promised = config.promise || Promise;\n this._promise = new Promised(function (resolve, reject) {\n _this3._resolve = resolve;\n _this3._reject = reject;\n });\n\n // Needed to silence (harmless) logged errors when a .catch handler is not\n // added by downsteam code\n this._promise.catch(noop);\n\n return this;\n }\n\n /**\n * @method shifty.Tweenable#get\n * @return {Object} The current state.\n */\n\n }, {\n key: 'get',\n value: function get() {\n return clone(this._currentState);\n }\n\n /**\n * Set the current state.\n * @method shifty.Tweenable#set\n * @param {Object} state The state to set.\n */\n\n }, {\n key: 'set',\n value: function set(state) {\n this._currentState = state;\n }\n\n /**\n * Pause a tween. Paused tweens can be resumed from the point at which they\n * were paused. This is different from {@link shifty.Tweenable#stop}, as\n * that method causes a tween to start over when it is resumed.\n * @method shifty.Tweenable#pause\n * @return {shifty.Tweenable}\n */\n\n }, {\n key: 'pause',\n value: function pause() {\n this._pausedAtTime = Tweenable.now();\n this._isPaused = true;\n\n return this;\n }\n\n /**\n * Resume a paused tween.\n * @method shifty.Tweenable#resume\n * @return {external:Promise}\n */\n\n }, {\n key: 'resume',\n value: function resume() {\n if (this._isPaused) {\n this._timestamp += Tweenable.now() - this._pausedAtTime;\n }\n\n this._isPaused = false;\n this._isTweening = true;\n this._timeoutHandler();\n\n return this._promise;\n }\n\n /**\n * Move the state of the animation to a specific point in the tween's\n * timeline. If the animation is not running, this will cause {@link\n * shifty.stepFunction} handlers to be called.\n * @method shifty.Tweenable#seek\n * @param {millisecond} millisecond The millisecond of the animation to seek\n * to. This must not be less than `0`.\n * @return {shifty.Tweenable}\n */\n\n }, {\n key: 'seek',\n value: function seek(millisecond) {\n millisecond = Math.max(millisecond, 0);\n var currentTime = Tweenable.now();\n\n if (this._timestamp + millisecond === 0) {\n return this;\n }\n\n this._timestamp = currentTime - millisecond;\n\n if (!this.isPlaying()) {\n this._isTweening = true;\n this._isPaused = false;\n\n // If the animation is not running, call _timeoutHandler to make sure that\n // any step handlers are run.\n this._timeoutHandler(currentTime);\n\n this.pause();\n }\n\n return this;\n }\n\n /**\n * Stops and cancels a tween.\n * @param {boolean} [gotoEnd] If `false`, the tween just stops at its current\n * state, and the tween promise is not resolved. If `true`, the tweened\n * object's values are instantly set to the target values, and the promise is\n * resolved.\n * @method shifty.Tweenable#stop\n * @return {shifty.Tweenable}\n */\n\n }, {\n key: 'stop',\n value: function stop() {\n var gotoEnd = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var _attachment = this._attachment,\n _currentState = this._currentState,\n _easing = this._easing,\n _originalState = this._originalState,\n _targetState = this._targetState;\n\n\n this._isTweening = false;\n this._isPaused = false;\n\n cancelTimer(this._scheduleId);\n\n if (gotoEnd) {\n this._applyFilter('beforeTween');\n tweenProps(1, _currentState, _originalState, _targetState, 1, 0, _easing);\n this._applyFilter('afterTween');\n this._applyFilter('afterTweenEnd');\n this._resolve(_currentState, _attachment);\n } else {\n this._reject(_currentState, _attachment);\n }\n\n return this;\n }\n\n /**\n * Whether or not a tween is running.\n * @method shifty.Tweenable#isPlaying\n * @return {boolean}\n */\n\n }, {\n key: 'isPlaying',\n value: function isPlaying() {\n return this._isTweening && !this._isPaused;\n }\n\n /**\n * Set a custom schedule function.\n *\n * By default,\n * [`requestAnimationFrame`](https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame)\n * is used if available, otherwise\n * [`setTimeout`](https://developer.mozilla.org/en-US/docs/Web/API/Window.setTimeout)\n * is used.\n * @method shifty.Tweenable#setScheduleFunction\n * @param {Function(Function,number)} scheduleFunction The function to be\n * used to schedule the next frame to be rendered.\n */\n\n }, {\n key: 'setScheduleFunction',\n value: function setScheduleFunction(scheduleFunction) {\n this._scheduleFunction = scheduleFunction;\n }\n\n /**\n * `delete` all \"own\" properties. Call this when the {@link\n * shifty.Tweenable} instance is no longer needed to free memory.\n * @method shifty.Tweenable#dispose\n */\n\n }, {\n key: 'dispose',\n value: function dispose() {\n var _this4 = this;\n\n each(this, function (prop) {\n return delete _this4[prop];\n });\n }\n }]);\n\n return Tweenable;\n}();\n\n(0, _objectAssign2.default)(Tweenable, {\n formulas: formulas,\n\n /**\n * The {@link shifty.filter}s available for use. These filters are\n * automatically applied at tween-time by Shifty.\n * @member shifty.Tweenable.filters\n * @type {Object.}\n */\n filters: { token: token },\n\n /**\n * @method shifty.Tweenable.now\n * @static\n * @returns {number} The current timestamp\n */\n now: Date.now || function (_) {\n return +new Date();\n }\n});\n\n/**\n * @method shifty.tween\n * @param {shifty.tweenConfig} [config={}]\n * @description Standalone convenience method that functions identically to\n * {@link shifty.Tweenable#tween}. You can use this to create tweens without\n * needing to set up a {@link shifty.Tweenable} instance.\n *\n * import { tween } from 'shifty';\n *\n * tween({ from: { x: 0 }, to: { x: 10 } }).then(\n * () => console.log('All done!')\n * );\n *\n * @returns {external:Promise}\n */\nfunction tween() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var tweenable = new Tweenable();\n var promise = tweenable.tween(config);\n promise.tweenable = tweenable;\n\n return promise;\n}\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\n\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.unsetBezierFunction = exports.setBezierFunction = undefined;\n\nvar _tweenable = __webpack_require__(0);\n\nvar _objectAssign = __webpack_require__(1);\n\nvar _objectAssign2 = _interopRequireDefault(_objectAssign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * The Bezier magic in this file is adapted/copied almost wholesale from\n * [Scripty2](https://github.com/madrobby/scripty2/blob/master/src/effects/transitions/cubic-bezier.js),\n * which was adapted from Apple code (which probably came from\n * [here](http://opensource.apple.com/source/WebCore/WebCore-955.66/platform/graphics/UnitBezier.h)).\n * Special thanks to Apple and Thomas Fuchs for much of this code.\n */\n\n/**\n * Copyright (c) 2006 Apple Computer, Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder(s) nor the names of any\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n// port of webkit cubic bezier handling by http://www.netzgesta.de/dev/\n\n/**\n * @private\n */\nfunction cubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {\n var ax = 0,\n bx = 0,\n cx = 0,\n ay = 0,\n by = 0,\n cy = 0;\n\n var sampleCurveX = function sampleCurveX(t) {\n return ((ax * t + bx) * t + cx) * t;\n };\n\n var sampleCurveY = function sampleCurveY(t) {\n return ((ay * t + by) * t + cy) * t;\n };\n\n var sampleCurveDerivativeX = function sampleCurveDerivativeX(t) {\n return (3 * ax * t + 2 * bx) * t + cx;\n };\n\n var solveEpsilon = function solveEpsilon(duration) {\n return 1 / (200 * duration);\n };\n\n var fabs = function fabs(n) {\n return n >= 0 ? n : 0 - n;\n };\n\n var solveCurveX = function solveCurveX(x, epsilon) {\n var t0 = void 0,\n t1 = void 0,\n t2 = void 0,\n x2 = void 0,\n d2 = void 0,\n i = void 0;\n\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sampleCurveX(t2) - x;\n\n if (fabs(x2) < epsilon) {\n return t2;\n }\n\n d2 = sampleCurveDerivativeX(t2);\n\n if (fabs(d2) < 1e-6) {\n break;\n }\n\n t2 = t2 - x2 / d2;\n }\n\n t0 = 0;\n t1 = 1;\n t2 = x;\n\n if (t2 < t0) {\n return t0;\n }\n\n if (t2 > t1) {\n return t1;\n }\n\n while (t0 < t1) {\n x2 = sampleCurveX(t2);\n\n if (fabs(x2 - x) < epsilon) {\n return t2;\n }\n\n if (x > x2) {\n t0 = t2;\n } else {\n t1 = t2;\n }\n\n t2 = (t1 - t0) * 0.5 + t0;\n }\n\n return t2; // Failure.\n };\n\n var solve = function solve(x, epsilon) {\n return sampleCurveY(solveCurveX(x, epsilon));\n };\n\n cx = 3 * p1x;\n bx = 3 * (p2x - p1x) - cx;\n ax = 1 - cx - bx;\n cy = 3 * p1y;\n by = 3 * (p2y - p1y) - cy;\n ay = 1 - cy - by;\n\n return solve(t, solveEpsilon(duration));\n}\n// End ported code\n\n/**\n * getCubicBezierTransition(x1, y1, x2, y2) -> Function\n *\n * Generates a transition easing function that is compatible\n * with WebKit's CSS transitions `-webkit-transition-timing-function`\n * CSS property.\n *\n * The W3C has more information about CSS3 transition timing functions:\n * http://www.w3.org/TR/css3-transitions/#transition-timing-function_tag\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @return {function}\n * @private\n */\nvar getCubicBezierTransition = function getCubicBezierTransition(x1, y1, x2, y2) {\n return function (pos) {\n return cubicBezierAtTime(pos, x1, y1, x2, y2, 1);\n };\n};\n\n/**\n * Create a Bezier easing function and attach it to {@link\n * shifty.Tweenable.formulas}. This function gives you total control over the\n * easing curve. Matthew Lein's [Ceaser](http://matthewlein.com/ceaser/) is a\n * useful tool for visualizing the curves you can make with this function.\n * @method shifty.setBezierFunction\n * @param {string} name The name of the easing curve. Overwrites the old\n * easing function on {@link shifty.Tweenable.formulas} if it exists.\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @return {shifty.easingFunction} The {@link shifty.easingFunction} that was\n * attached to {@link shifty.Tweenable.formulas}.\n */\nvar setBezierFunction = exports.setBezierFunction = function setBezierFunction(name, x1, y1, x2, y2) {\n return _tweenable.Tweenable.formulas[name] = (0, _objectAssign2.default)(getCubicBezierTransition(x1, y1, x2, y2), {\n displayName: name,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n });\n};\n\n/**\n * `delete` an easing function from {@link shifty.Tweenable.formulas}. Be\n * careful with this method, as it `delete`s whatever easing formula matches\n * `name` (which means you can delete standard Shifty easing functions).\n * @method shifty.unsetBezierFunction\n * @param {string} name The name of the easing function to delete.\n * @return {Boolean} Whether or not the functions was `delete`d.\n */\nvar unsetBezierFunction = exports.unsetBezierFunction = function unsetBezierFunction(name) {\n return delete _tweenable.Tweenable.formulas[name];\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.interpolate = undefined;\n\nvar _tweenable = __webpack_require__(0);\n\n// Fake a Tweenable and patch some internals. This approach allows us to\n// skip uneccessary processing and object recreation, cutting down on garbage\n// collection pauses.\nvar mockTweenable = new _tweenable.Tweenable();\nmockTweenable._filterArgs = [];\n\n/**\n * Compute the midpoint of two Objects. This method effectively calculates a\n * specific frame of animation that {@link shifty.Tweenable#tween} does many times\n * over the course of a full tween.\n *\n * import { interpolate } from 'shifty';\n *\n * const interpolatedValues = interpolate({\n * width: '100px',\n * opacity: 0,\n * color: '#fff'\n * }, {\n * width: '200px',\n * opacity: 1,\n * color: '#000'\n * },\n * 0.5\n * );\n *\n * console.log(interpolatedValues);\n * // {opacity: 0.5, width: \"150px\", color: \"rgb(127,127,127)\"}\n *\n * @method shifty.interpolate\n * @param {Object} from The starting values to tween from.\n * @param {Object} to The ending values to tween to.\n * @param {number} position The normalized position value (between `0.0` and\n * `1.0`) to interpolate the values between `from` and `to` for. `from`\n * represents `0` and `to` represents `1`.\n * @param {Object.|string|shifty.easingFunction}\n * easing The easing curve(s) to calculate the midpoint against. You can\n * reference any easing function attached to {@link shifty.Tweenable.formulas},\n * or provide the {@link shifty.easingFunction}(s) directly. If omitted, this\n * defaults to \"linear\".\n * @param {number} [delay=0] Optional delay to pad the beginning of the\n * interpolated tween with. This increases the range of `position` from (`0`\n * through `1`) to (`0` through `1 + delay`). So, a delay of `0.5` would\n * increase all valid values of `position` to numbers between `0` and `1.5`.\n * @return {Object}\n */\nvar interpolate = exports.interpolate = function interpolate(from, to, position, easing) {\n var delay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n\n var current = (0, _tweenable.clone)(from);\n var easingObject = (0, _tweenable.composeEasingObject)(from, easing);\n\n mockTweenable.set({});\n mockTweenable._filterArgs = [current, from, to, easingObject];\n\n // Any defined value transformation must be applied\n mockTweenable._applyFilter('tweenCreated');\n mockTweenable._applyFilter('beforeTween');\n\n var interpolatedValues = (0, _tweenable.tweenProps)(position, current, from, to, 1, delay, easingObject);\n\n // Transform data in interpolatedValues back into its original format\n mockTweenable._applyFilter('afterTween');\n\n return interpolatedValues;\n};\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar g;\n\n// This works in non-strict mode\ng = function () {\n\treturn this;\n}();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/*!\n * All equations are adapted from Thomas Fuchs'\n * [Scripty2](https://github.com/madrobby/scripty2/blob/master/src/effects/transitions/penner.js).\n *\n * Based on Easing Equations (c) 2003 [Robert\n * Penner](http://www.robertpenner.com/), all rights reserved. This work is\n * [subject to terms](http://www.robertpenner.com/easing_terms_of_use.html).\n */\n\n/*!\n * TERMS OF USE - EASING EQUATIONS\n * Open source under the BSD License.\n * Easing Equations (c) 2003 Robert Penner, all rights reserved.\n */\n\n/**\n * @member shifty.Tweenable.formulas\n * @description A static Object of {@link shifty.easingFunction}s that can by\n * used by Shifty. The default values are defined in\n * [`easing-functions.js`](easing-functions.js.html), but you can add your own\n * {@link shifty.easingFunction}s by defining them as keys to this Object.\n *\n * Shifty ships with an implementation of [Robert Penner's easing\n * equations](http://robertpenner.com/easing/), as adapted from\n * [Scripty2](https://github.com/madrobby/scripty2/blob/master/src/effects/transitions/penner.js)'s\n * implementation.\n *

See the Pen Shifty - Easing formula\n * names by Jeremy Kahn (@jeremyckahn) on CodePen.

\n * \n * @type {Object.}\n * @static\n */\nvar linear = exports.linear = function linear(pos) {\n return pos;\n};\n\nvar easeInQuad = exports.easeInQuad = function easeInQuad(pos) {\n return Math.pow(pos, 2);\n};\n\nvar easeOutQuad = exports.easeOutQuad = function easeOutQuad(pos) {\n return -(Math.pow(pos - 1, 2) - 1);\n};\n\nvar easeInOutQuad = exports.easeInOutQuad = function easeInOutQuad(pos) {\n return (pos /= 0.5) < 1 ? 0.5 * Math.pow(pos, 2) : -0.5 * ((pos -= 2) * pos - 2);\n};\n\nvar easeInCubic = exports.easeInCubic = function easeInCubic(pos) {\n return Math.pow(pos, 3);\n};\n\nvar easeOutCubic = exports.easeOutCubic = function easeOutCubic(pos) {\n return Math.pow(pos - 1, 3) + 1;\n};\n\nvar easeInOutCubic = exports.easeInOutCubic = function easeInOutCubic(pos) {\n return (pos /= 0.5) < 1 ? 0.5 * Math.pow(pos, 3) : 0.5 * (Math.pow(pos - 2, 3) + 2);\n};\n\nvar easeInQuart = exports.easeInQuart = function easeInQuart(pos) {\n return Math.pow(pos, 4);\n};\n\nvar easeOutQuart = exports.easeOutQuart = function easeOutQuart(pos) {\n return -(Math.pow(pos - 1, 4) - 1);\n};\n\nvar easeInOutQuart = exports.easeInOutQuart = function easeInOutQuart(pos) {\n return (pos /= 0.5) < 1 ? 0.5 * Math.pow(pos, 4) : -0.5 * ((pos -= 2) * Math.pow(pos, 3) - 2);\n};\n\nvar easeInQuint = exports.easeInQuint = function easeInQuint(pos) {\n return Math.pow(pos, 5);\n};\n\nvar easeOutQuint = exports.easeOutQuint = function easeOutQuint(pos) {\n return Math.pow(pos - 1, 5) + 1;\n};\n\nvar easeInOutQuint = exports.easeInOutQuint = function easeInOutQuint(pos) {\n return (pos /= 0.5) < 1 ? 0.5 * Math.pow(pos, 5) : 0.5 * (Math.pow(pos - 2, 5) + 2);\n};\n\nvar easeInSine = exports.easeInSine = function easeInSine(pos) {\n return -Math.cos(pos * (Math.PI / 2)) + 1;\n};\n\nvar easeOutSine = exports.easeOutSine = function easeOutSine(pos) {\n return Math.sin(pos * (Math.PI / 2));\n};\n\nvar easeInOutSine = exports.easeInOutSine = function easeInOutSine(pos) {\n return -0.5 * (Math.cos(Math.PI * pos) - 1);\n};\n\nvar easeInExpo = exports.easeInExpo = function easeInExpo(pos) {\n return pos === 0 ? 0 : Math.pow(2, 10 * (pos - 1));\n};\n\nvar easeOutExpo = exports.easeOutExpo = function easeOutExpo(pos) {\n return pos === 1 ? 1 : -Math.pow(2, -10 * pos) + 1;\n};\n\nvar easeInOutExpo = exports.easeInOutExpo = function easeInOutExpo(pos) {\n if (pos === 0) {\n return 0;\n }\n\n if (pos === 1) {\n return 1;\n }\n\n if ((pos /= 0.5) < 1) {\n return 0.5 * Math.pow(2, 10 * (pos - 1));\n }\n\n return 0.5 * (-Math.pow(2, -10 * --pos) + 2);\n};\n\nvar easeInCirc = exports.easeInCirc = function easeInCirc(pos) {\n return -(Math.sqrt(1 - pos * pos) - 1);\n};\n\nvar easeOutCirc = exports.easeOutCirc = function easeOutCirc(pos) {\n return Math.sqrt(1 - Math.pow(pos - 1, 2));\n};\n\nvar easeInOutCirc = exports.easeInOutCirc = function easeInOutCirc(pos) {\n return (pos /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - pos * pos) - 1) : 0.5 * (Math.sqrt(1 - (pos -= 2) * pos) + 1);\n};\n\nvar easeOutBounce = exports.easeOutBounce = function easeOutBounce(pos) {\n if (pos < 1 / 2.75) {\n return 7.5625 * pos * pos;\n } else if (pos < 2 / 2.75) {\n return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75;\n } else if (pos < 2.5 / 2.75) {\n return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375;\n } else {\n return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375;\n }\n};\n\nvar easeInBack = exports.easeInBack = function easeInBack(pos) {\n var s = 1.70158;\n return pos * pos * ((s + 1) * pos - s);\n};\n\nvar easeOutBack = exports.easeOutBack = function easeOutBack(pos) {\n var s = 1.70158;\n return (pos = pos - 1) * pos * ((s + 1) * pos + s) + 1;\n};\n\nvar easeInOutBack = exports.easeInOutBack = function easeInOutBack(pos) {\n var s = 1.70158;\n if ((pos /= 0.5) < 1) {\n return 0.5 * (pos * pos * (((s *= 1.525) + 1) * pos - s));\n }\n return 0.5 * ((pos -= 2) * pos * (((s *= 1.525) + 1) * pos + s) + 2);\n};\n\nvar elastic = exports.elastic = function elastic(pos) {\n return -1 * Math.pow(4, -8 * pos) * Math.sin((pos * 6 - 1) * (2 * Math.PI) / 2) + 1;\n};\n\nvar swingFromTo = exports.swingFromTo = function swingFromTo(pos) {\n var s = 1.70158;\n return (pos /= 0.5) < 1 ? 0.5 * (pos * pos * (((s *= 1.525) + 1) * pos - s)) : 0.5 * ((pos -= 2) * pos * (((s *= 1.525) + 1) * pos + s) + 2);\n};\n\nvar swingFrom = exports.swingFrom = function swingFrom(pos) {\n var s = 1.70158;\n return pos * pos * ((s + 1) * pos - s);\n};\n\nvar swingTo = exports.swingTo = function swingTo(pos) {\n var s = 1.70158;\n return (pos -= 1) * pos * ((s + 1) * pos + s) + 1;\n};\n\nvar bounce = exports.bounce = function bounce(pos) {\n if (pos < 1 / 2.75) {\n return 7.5625 * pos * pos;\n } else if (pos < 2 / 2.75) {\n return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75;\n } else if (pos < 2.5 / 2.75) {\n return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375;\n } else {\n return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375;\n }\n};\n\nvar bouncePast = exports.bouncePast = function bouncePast(pos) {\n if (pos < 1 / 2.75) {\n return 7.5625 * pos * pos;\n } else if (pos < 2 / 2.75) {\n return 2 - (7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75);\n } else if (pos < 2.5 / 2.75) {\n return 2 - (7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375);\n } else {\n return 2 - (7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375);\n }\n};\n\nvar easeFromTo = exports.easeFromTo = function easeFromTo(pos) {\n return (pos /= 0.5) < 1 ? 0.5 * Math.pow(pos, 4) : -0.5 * ((pos -= 2) * Math.pow(pos, 3) - 2);\n};\n\nvar easeFrom = exports.easeFrom = function easeFrom(pos) {\n return Math.pow(pos, 4);\n};\n\nvar easeTo = exports.easeTo = function easeTo(pos) {\n return Math.pow(pos, 0.25);\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _tweenable = __webpack_require__(0);\n\nObject.defineProperty(exports, 'Tweenable', {\n enumerable: true,\n get: function get() {\n return _tweenable.Tweenable;\n }\n});\nObject.defineProperty(exports, 'tween', {\n enumerable: true,\n get: function get() {\n return _tweenable.tween;\n }\n});\n\nvar _interpolate = __webpack_require__(3);\n\nObject.defineProperty(exports, 'interpolate', {\n enumerable: true,\n get: function get() {\n return _interpolate.interpolate;\n }\n});\n\nvar _bezier = __webpack_require__(2);\n\nObject.defineProperty(exports, 'setBezierFunction', {\n enumerable: true,\n get: function get() {\n return _bezier.setBezierFunction;\n }\n});\nObject.defineProperty(exports, 'unsetBezierFunction', {\n enumerable: true,\n get: function get() {\n return _bezier.unsetBezierFunction;\n }\n});\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.tweenCreated = tweenCreated;\nexports.beforeTween = beforeTween;\nexports.afterTween = afterTween;\n\nvar _tweenable = __webpack_require__(0);\n\nvar R_NUMBER_COMPONENT = /(\\d|\\-|\\.)/;\nvar R_FORMAT_CHUNKS = /([^\\-0-9\\.]+)/g;\nvar R_UNFORMATTED_VALUES = /[0-9.\\-]+/g;\nvar R_RGB = function () {\n var number = R_UNFORMATTED_VALUES.source;\n var comma = /,\\s*/.source;\n\n return new RegExp('rgb\\\\(' + number + comma + number + comma + number + '\\\\)', 'g');\n}();\nvar R_RGB_PREFIX = /^.*\\(/;\nvar R_HEX = /#([0-9]|[a-f]){3,6}/gi;\nvar VALUE_PLACEHOLDER = 'VAL';\n\n// HELPERS\n\n/**\n * @param {Array.number} rawValues\n * @param {string} prefix\n *\n * @return {Array.}\n * @private\n */\nvar getFormatChunksFrom = function getFormatChunksFrom(rawValues, prefix) {\n return rawValues.map(function (val, i) {\n return '_' + prefix + '_' + i;\n });\n};\n\n/**\n * @param {string} formattedString\n *\n * @return {string}\n * @private\n */\nvar getFormatStringFrom = function getFormatStringFrom(formattedString) {\n var chunks = formattedString.match(R_FORMAT_CHUNKS);\n\n if (!chunks) {\n // chunks will be null if there were no tokens to parse in\n // formattedString (for example, if formattedString is '2'). Coerce\n // chunks to be useful here.\n chunks = ['', ''];\n\n // If there is only one chunk, assume that the string is a number\n // followed by a token...\n // NOTE: This may be an unwise assumption.\n } else if (chunks.length === 1 ||\n // ...or if the string starts with a number component (\".\", \"-\", or a\n // digit)...\n formattedString.charAt(0).match(R_NUMBER_COMPONENT)) {\n\n // ...prepend an empty string here to make sure that the formatted number\n // is properly replaced by VALUE_PLACEHOLDER\n chunks.unshift('');\n }\n\n return chunks.join(VALUE_PLACEHOLDER);\n};\n\n/**\n * Convert a base-16 number to base-10.\n *\n * @param {Number|String} hex The value to convert\n *\n * @returns {Number} The base-10 equivalent of `hex`.\n * @private\n */\nfunction hexToDec(hex) {\n return parseInt(hex, 16);\n}\n\n/**\n * Convert a hexadecimal string to an array with three items, one each for\n * the red, blue, and green decimal values.\n *\n * @param {string} hex A hexadecimal string.\n *\n * @returns {Array.} The converted Array of RGB values if `hex` is a\n * valid string, or an Array of three 0's.\n * @private\n */\nvar hexToRGBArray = function hexToRGBArray(hex) {\n hex = hex.replace(/#/, '');\n\n // If the string is a shorthand three digit hex notation, normalize it to\n // the standard six digit notation\n if (hex.length === 3) {\n hex = hex.split('');\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n\n return [hexToDec(hex.substr(0, 2)), hexToDec(hex.substr(2, 2)), hexToDec(hex.substr(4, 2))];\n};\n\n/**\n * @param {string} hexString\n *\n * @return {string}\n * @private\n */\nvar convertHexToRGB = function convertHexToRGB(hexString) {\n return 'rgb(' + hexToRGBArray(hexString).join(',') + ')';\n};\n\n/**\n * TODO: Can this be rewritten to leverage String#replace more efficiently?\n * Runs a filter operation on all chunks of a string that match a RegExp\n *\n * @param {RegExp} pattern\n * @param {string} unfilteredString\n * @param {function(string)} filter\n *\n * @return {string}\n * @private\n */\nvar filterStringChunks = function filterStringChunks(pattern, unfilteredString, filter) {\n var patternMatches = unfilteredString.match(pattern);\n var filteredString = unfilteredString.replace(pattern, VALUE_PLACEHOLDER);\n\n if (patternMatches) {\n patternMatches.forEach(function (match) {\n return filteredString = filteredString.replace(VALUE_PLACEHOLDER, filter(match));\n });\n }\n\n return filteredString;\n};\n\n/**\n * @param {string} str\n *\n * @return {string}\n * @private\n */\nvar sanitizeHexChunksToRGB = function sanitizeHexChunksToRGB(str) {\n return filterStringChunks(R_HEX, str, convertHexToRGB);\n};\n\n/**\n * Convert all hex color values within a string to an rgb string.\n *\n * @param {Object} stateObject\n *\n * @return {Object} The modified obj\n * @private\n */\nvar sanitizeObjectForHexProps = function sanitizeObjectForHexProps(stateObject) {\n (0, _tweenable.each)(stateObject, function (prop) {\n var currentProp = stateObject[prop];\n\n if (typeof currentProp === 'string' && currentProp.match(R_HEX)) {\n stateObject[prop] = sanitizeHexChunksToRGB(currentProp);\n }\n });\n};\n\n/**\n * @param {string} rgbChunk\n *\n * @return {string}\n * @private\n */\nvar sanitizeRGBChunk = function sanitizeRGBChunk(rgbChunk) {\n var numbers = rgbChunk.match(R_UNFORMATTED_VALUES).map(Math.floor);\n var prefix = rgbChunk.match(R_RGB_PREFIX)[0];\n\n return '' + prefix + numbers.join(',') + ')';\n};\n\n/**\n * Check for floating point values within rgb strings and round them.\n *\n * @param {string} formattedString\n *\n * @return {string}\n * @private\n */\nvar sanitizeRGBChunks = function sanitizeRGBChunks(formattedString) {\n return filterStringChunks(R_RGB, formattedString, sanitizeRGBChunk);\n};\n\n/**\n * Note: It's the duty of the caller to convert the Array elements of the\n * return value into numbers. This is a performance optimization.\n *\n * @param {string} formattedString\n *\n * @return {Array.|null}\n * @private\n */\nvar getValuesFrom = function getValuesFrom(formattedString) {\n return formattedString.match(R_UNFORMATTED_VALUES);\n};\n\n/**\n * @param {Object} stateObject\n *\n * @return {Object} An Object of formatSignatures that correspond to\n * the string properties of stateObject\n * @private\n */\nvar getFormatSignatures = function getFormatSignatures(stateObject) {\n var signatures = {};\n\n (0, _tweenable.each)(stateObject, function (propertyName) {\n var property = stateObject[propertyName];\n\n if (typeof property === 'string') {\n signatures[propertyName] = {\n formatString: getFormatStringFrom(property),\n chunkNames: getFormatChunksFrom(getValuesFrom(property), propertyName)\n };\n }\n });\n\n return signatures;\n};\n\n/**\n * @param {Object} stateObject\n * @param {Object} formatSignatures\n * @private\n */\nvar expandFormattedProperties = function expandFormattedProperties(stateObject, formatSignatures) {\n (0, _tweenable.each)(formatSignatures, function (propertyName) {\n getValuesFrom(stateObject[propertyName]).forEach(function (number, i) {\n return stateObject[formatSignatures[propertyName].chunkNames[i]] = +number;\n });\n\n delete stateObject[propertyName];\n });\n};\n\n/**\n * @param {Object} stateObject\n * @param {Array.} chunkNames\n *\n * @return {Object} The extracted value chunks.\n * @private\n */\nvar extractPropertyChunks = function extractPropertyChunks(stateObject, chunkNames) {\n var extractedValues = {};\n\n chunkNames.forEach(function (chunkName) {\n extractedValues[chunkName] = stateObject[chunkName];\n delete stateObject[chunkName];\n });\n\n return extractedValues;\n};\n\n/**\n * @param {Object} stateObject\n * @param {Array.} chunkNames\n *\n * @return {Array.}\n * @private\n */\nvar getValuesList = function getValuesList(stateObject, chunkNames) {\n return chunkNames.map(function (chunkName) {\n return stateObject[chunkName];\n });\n};\n\n/**\n * @param {string} formatString\n * @param {Array.} rawValues\n *\n * @return {string}\n * @private\n */\nvar getFormattedValues = function getFormattedValues(formatString, rawValues) {\n rawValues.forEach(function (rawValue) {\n return formatString = formatString.replace(VALUE_PLACEHOLDER, +rawValue.toFixed(4));\n });\n\n return formatString;\n};\n\n/**\n * @param {Object} stateObject\n * @param {Object} formatSignatures\n * @private\n */\nvar collapseFormattedProperties = function collapseFormattedProperties(stateObject, formatSignatures) {\n (0, _tweenable.each)(formatSignatures, function (prop) {\n var _formatSignatures$pro = formatSignatures[prop],\n chunkNames = _formatSignatures$pro.chunkNames,\n formatString = _formatSignatures$pro.formatString;\n\n\n var currentProp = getFormattedValues(formatString, getValuesList(extractPropertyChunks(stateObject, chunkNames), chunkNames));\n\n stateObject[prop] = sanitizeRGBChunks(currentProp);\n });\n};\n\n/**\n * @param {Object} easingObject\n * @param {Object} tokenData\n * @private\n */\nvar expandEasingObject = function expandEasingObject(easingObject, tokenData) {\n (0, _tweenable.each)(tokenData, function (prop) {\n var chunkNames = tokenData[prop].chunkNames;\n\n var easing = easingObject[prop];\n\n if (typeof easing === 'string') {\n (function () {\n var easingNames = easing.split(' ');\n var defaultEasing = easingNames[easingNames.length - 1];\n\n chunkNames.forEach(function (chunkName, i) {\n return easingObject[chunkName] = easingNames[i] || defaultEasing;\n });\n })();\n } else {\n // easing is a function\n chunkNames.forEach(function (chunkName) {\n return easingObject[chunkName] = easing;\n });\n }\n\n delete easingObject[prop];\n });\n};\n\n/**\n * @param {Object} easingObject\n * @param {Object} tokenData\n * @private\n */\nvar collapseEasingObject = function collapseEasingObject(easingObject, tokenData) {\n (0, _tweenable.each)(tokenData, function (prop) {\n var chunkNames = tokenData[prop].chunkNames;\n var length = chunkNames.length;\n\n var firstEasing = easingObject[chunkNames[0]];\n\n if (typeof firstEasing === 'string') {\n easingObject[prop] = chunkNames.map(function (chunkName) {\n var easingName = easingObject[chunkName];\n delete easingObject[chunkName];\n\n return easingName;\n }).join(' ');\n } else {\n // firstEasing is a function\n easingObject[prop] = firstEasing;\n }\n });\n};\n\nfunction tweenCreated(currentState, fromState, toState) {\n [currentState, fromState, toState].forEach(sanitizeObjectForHexProps);\n\n this._tokenData = getFormatSignatures(currentState);\n}\n\nfunction beforeTween(currentState, fromState, toState, easingObject) {\n var _tokenData = this._tokenData;\n\n expandEasingObject(easingObject, _tokenData);\n\n [currentState, fromState, toState].forEach(function (state) {\n return expandFormattedProperties(state, _tokenData);\n });\n}\n\nfunction afterTween(currentState, fromState, toState, easingObject) {\n var _tokenData = this._tokenData;\n\n [currentState, fromState, toState].forEach(function (state) {\n return collapseFormattedProperties(state, _tokenData);\n });\n\n collapseEasingObject(easingObject, _tokenData);\n}\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// shifty.js"," \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// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\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 = \"/assets/\";\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 028c2bc4e6fbb5737598","import * as easingFunctions from './easing-functions';\nimport assign from 'object-assign';\nimport * as token from './token';\n\n// CONSTANTS\nconst DEFAULT_EASING = 'linear';\nconst DEFAULT_DURATION = 500;\nconst UPDATE_TIME = 1000 / 60;\nconst root = typeof window !== 'undefined' ? window : global;\n\nconst cancelTimer = (\n root.cancelAnimationFrame ||\n root.webkitCancelAnimationFrame ||\n root.oCancelAnimationFrame ||\n root.msCancelAnimationFrame ||\n root.mozCancelRequestAnimationFrame ||\n root.clearTimeout\n);\n\n// requestAnimationFrame() shim by Paul Irish (modified for Shifty)\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\nconst DEFAULT_SCHEDULE_FUNCTION = (\n root.requestAnimationFrame\n || root.webkitRequestAnimationFrame\n || root.oRequestAnimationFrame\n || root.msRequestAnimationFrame\n || (root.mozCancelRequestAnimationFrame && root.mozRequestAnimationFrame)\n || setTimeout\n);\n\nconst noop = () => {};\n\n/**\n * Handy shortcut for doing a for-in loop. This is not a \"normal\" each\n * function, it is optimized for Shifty. The iterator function only receives\n * the property name, not the value.\n * @param {Object} obj\n * @param {Function(string)} fn\n * @private\n */\nexport const each = (obj, fn) => Object.keys(obj).forEach(fn);\n\n/**\n * @param {Object} obj\n * @return {Object}\n * @private\n */\nexport const clone = obj => assign({}, obj);\n\nconst formulas = clone(easingFunctions);\n\n/**\n * Tweens a single property.\n * @param {number} start The value that the tween started from.\n * @param {number} end The value that the tween should end at.\n * @param {Function} easingFunc The easing curve to apply to the tween.\n * @param {number} position The normalized position (between 0.0 and 1.0) to\n * calculate the midpoint of 'start' and 'end' against.\n * @return {number} The tweened value.\n * @private\n */\nconst tweenProp = (start, end, easingFunc, position) =>\n start + (end - start) * easingFunc(position);\n\n/**\n * Calculates the interpolated tween values of an Object for a given\n * timestamp.\n * @param {Number} forPosition The position to compute the state for.\n * @param {Object} currentState Current state properties.\n * @param {Object} originalState: The original state properties the Object is\n * tweening from.\n * @param {Object} targetState: The destination state properties the Object\n * is tweening to.\n * @param {number} duration: The length of the tween in milliseconds.\n * @param {number} timestamp: The UNIX epoch time at which the tween began.\n * @param {Object.} easing: This Object's keys must correspond\n * to the keys in targetState.\n * @private\n */\nexport const tweenProps = (\n forPosition,\n currentState,\n originalState,\n targetState,\n duration,\n timestamp,\n easing\n) => {\n const normalizedPosition = forPosition < timestamp ?\n 0 :\n (forPosition - timestamp) / duration;\n\n each(currentState, key => {\n const easingObjectProp = easing[key];\n const easingFn = typeof easingObjectProp === 'function' ?\n easingObjectProp :\n formulas[easingObjectProp];\n\n currentState[key] = tweenProp(\n originalState[key],\n targetState[key],\n easingFn,\n normalizedPosition\n );\n });\n\n return currentState;\n};\n\n\n/**\n * Creates a usable easing Object from a string, a function or another easing\n * Object. If `easing` is an Object, then this function clones it and fills\n * in the missing properties with `\"linear\"`.\n * @param {Object.} fromTweenParams\n * @param {Object|string|Function} easing\n * @return {Object.}\n * @private\n */\nexport const composeEasingObject = (fromTweenParams, easing = DEFAULT_EASING) => {\n const composedEasing = {};\n let typeofEasing = typeof easing;\n\n if (typeofEasing === 'string' || typeofEasing === 'function') {\n each(fromTweenParams, prop => composedEasing[prop] = easing);\n } else {\n each(fromTweenParams, prop =>\n composedEasing[prop] =\n composedEasing[prop] || easing[prop] || DEFAULT_EASING\n );\n }\n\n return composedEasing;\n};\n\nexport class Tweenable {\n /**\n * @param {Object} [initialState={}] The values that the initial tween should\n * start at if a `from` value is not provided to {@link\n * shifty.Tweenable#tween} or {@link shifty.Tweenable#setConfig}.\n * @param {shifty.tweenConfig} [config] Configuration object to be passed to\n * {@link shifty.Tweenable#setConfig}.\n * @constructs shifty.Tweenable\n */\n constructor (initialState = {}, config = undefined) {\n this._currentState = initialState;\n this._configured = false;\n this._scheduleFunction = DEFAULT_SCHEDULE_FUNCTION;\n\n // To prevent unnecessary calls to setConfig do not set default\n // configuration here. Only set default configuration immediately before\n // tweening if none has been set.\n if (config !== undefined) {\n this.setConfig(config);\n }\n }\n\n /**\n * Applies a filter to Tweenable instance.\n * @param {shifty.Tweenable} tweenable The `Tweenable` instance to call the filter\n * upon.\n * @param {string} filterName The name of the filter to apply.\n * @private\n */\n _applyFilter (filterName) {\n let filters = Tweenable.filters;\n let args = this._filterArgs;\n\n each(filters, name => {\n let filter = filters[name][filterName];\n\n if (typeof filter !== 'undefined') {\n filter.apply(this, args);\n }\n });\n }\n\n /**\n * Handles the update logic for one step of a tween.\n * @param {number} [currentTimeOverride] Needed for accurate timestamp in\n * shifty.Tweenable#seek.\n * @private\n */\n _timeoutHandler (currentTimeOverride) {\n const {\n _currentState,\n _delay\n } = this;\n let {\n _duration,\n _step,\n _targetState,\n _timestamp\n } = this;\n\n const endTime = _timestamp + _delay + _duration;\n let currentTime =\n Math.min(currentTimeOverride || Tweenable.now(), endTime);\n const hasEnded = currentTime >= endTime;\n const offset = _duration - (endTime - currentTime);\n\n if (this.isPlaying()) {\n if (hasEnded) {\n _step(_targetState, this._attachment, offset);\n this.stop(true);\n } else {\n // This function needs to be .call-ed because it is a native method in\n // some environments:\n // http://stackoverflow.com/a/9678166\n this._scheduleId = this._scheduleFunction.call(\n root,\n () => this._timeoutHandler(...arguments),\n UPDATE_TIME\n );\n\n this._applyFilter('beforeTween');\n\n // If the animation has not yet reached the start point (e.g., there was\n // delay that has not yet completed), just interpolate the starting\n // position of the tween.\n if (currentTime < (_timestamp + _delay)) {\n currentTime = 1;\n _duration = 1;\n _timestamp = 1;\n } else {\n _timestamp += _delay;\n }\n\n tweenProps(\n currentTime,\n _currentState,\n this._originalState,\n _targetState,\n _duration,\n _timestamp,\n this._easing\n );\n\n this._applyFilter('afterTween');\n _step(_currentState, this._attachment, offset);\n }\n }\n }\n\n /**\n * Configure and start a tween.\n * @method shifty.Tweenable#tween\n * @param {shifty.tweenConfig} [config] Gets passed to {@link\n * shifty.Tweenable#setConfig}\n * @return {external:Promise}\n */\n tween (config = undefined) {\n const {\n _attachment,\n _configured,\n _isTweening\n } = this;\n\n if (_isTweening) {\n return this;\n }\n\n // Only set default config if no configuration has been set previously and\n // none is provided now.\n if (config !== undefined || !_configured) {\n this.setConfig(config);\n }\n\n this._timestamp = Tweenable.now();\n this._start(this.get(), _attachment);\n return this.resume();\n }\n\n /**\n * Configure a tween that will start at some point in the future.\n * @method shifty.Tweenable#setConfig\n * @param {shifty.tweenConfig} [config={}]\n * @return {shifty.Tweenable}\n */\n setConfig (config = {}) {\n this._configured = true;\n\n // Attach something to this Tweenable instance (e.g.: a DOM element, an\n // object, a string, etc.);\n this._attachment = config.attachment;\n\n // Init the internal state\n assign(this, {\n _pausedAtTime: null,\n _scheduleId: null,\n _delay: config.delay || 0,\n _start: config.start || noop,\n _step: config.step || noop,\n _duration: config.duration || DEFAULT_DURATION,\n _currentState: clone(config.from || this.get()),\n });\n\n // Separate Object.assign here; it depends on _currentState being set above\n assign(this, {\n _originalState: this.get(),\n _targetState: clone(config.to || this.get())\n });\n\n let currentState = this._currentState;\n // Ensure that there is always something to tween to.\n this._targetState = assign({}, currentState, this._targetState);\n\n this._easing = composeEasingObject(currentState, config.easing);\n this._filterArgs =\n [currentState, this._originalState, this._targetState, this._easing];\n this._applyFilter('tweenCreated');\n\n const Promised = config.promise || Promise;\n this._promise = new Promised(\n (resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n }\n );\n\n // Needed to silence (harmless) logged errors when a .catch handler is not\n // added by downsteam code\n this._promise.catch(noop);\n\n return this;\n }\n\n /**\n * @method shifty.Tweenable#get\n * @return {Object} The current state.\n */\n get () {\n return clone(this._currentState);\n }\n\n /**\n * Set the current state.\n * @method shifty.Tweenable#set\n * @param {Object} state The state to set.\n */\n set (state) {\n this._currentState = state;\n }\n\n /**\n * Pause a tween. Paused tweens can be resumed from the point at which they\n * were paused. This is different from {@link shifty.Tweenable#stop}, as\n * that method causes a tween to start over when it is resumed.\n * @method shifty.Tweenable#pause\n * @return {shifty.Tweenable}\n */\n pause () {\n this._pausedAtTime = Tweenable.now();\n this._isPaused = true;\n\n return this;\n }\n\n /**\n * Resume a paused tween.\n * @method shifty.Tweenable#resume\n * @return {external:Promise}\n */\n resume () {\n if (this._isPaused) {\n this._timestamp += Tweenable.now() - this._pausedAtTime;\n }\n\n this._isPaused = false;\n this._isTweening = true;\n this._timeoutHandler();\n\n return this._promise;\n }\n\n /**\n * Move the state of the animation to a specific point in the tween's\n * timeline. If the animation is not running, this will cause {@link\n * shifty.stepFunction} handlers to be called.\n * @method shifty.Tweenable#seek\n * @param {millisecond} millisecond The millisecond of the animation to seek\n * to. This must not be less than `0`.\n * @return {shifty.Tweenable}\n */\n seek (millisecond) {\n millisecond = Math.max(millisecond, 0);\n const currentTime = Tweenable.now();\n\n if ((this._timestamp + millisecond) === 0) {\n return this;\n }\n\n this._timestamp = currentTime - millisecond;\n\n if (!this.isPlaying()) {\n this._isTweening = true;\n this._isPaused = false;\n\n // If the animation is not running, call _timeoutHandler to make sure that\n // any step handlers are run.\n this._timeoutHandler(currentTime);\n\n this.pause();\n }\n\n return this;\n }\n\n /**\n * Stops and cancels a tween.\n * @param {boolean} [gotoEnd] If `false`, the tween just stops at its current\n * state, and the tween promise is not resolved. If `true`, the tweened\n * object's values are instantly set to the target values, and the promise is\n * resolved.\n * @method shifty.Tweenable#stop\n * @return {shifty.Tweenable}\n */\n stop (gotoEnd = false) {\n const {\n _attachment,\n _currentState,\n _easing,\n _originalState,\n _targetState\n } = this;\n\n this._isTweening = false;\n this._isPaused = false;\n\n cancelTimer(this._scheduleId);\n\n if (gotoEnd) {\n this._applyFilter('beforeTween');\n tweenProps(\n 1,\n _currentState,\n _originalState,\n _targetState,\n 1,\n 0,\n _easing\n );\n this._applyFilter('afterTween');\n this._applyFilter('afterTweenEnd');\n this._resolve(_currentState, _attachment);\n } else {\n this._reject(_currentState, _attachment);\n }\n\n return this;\n }\n\n /**\n * Whether or not a tween is running.\n * @method shifty.Tweenable#isPlaying\n * @return {boolean}\n */\n isPlaying () {\n return this._isTweening && !this._isPaused;\n }\n\n /**\n * Set a custom schedule function.\n *\n * By default,\n * [`requestAnimationFrame`](https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame)\n * is used if available, otherwise\n * [`setTimeout`](https://developer.mozilla.org/en-US/docs/Web/API/Window.setTimeout)\n * is used.\n * @method shifty.Tweenable#setScheduleFunction\n * @param {Function(Function,number)} scheduleFunction The function to be\n * used to schedule the next frame to be rendered.\n */\n setScheduleFunction (scheduleFunction) {\n this._scheduleFunction = scheduleFunction;\n }\n\n /**\n * `delete` all \"own\" properties. Call this when the {@link\n * shifty.Tweenable} instance is no longer needed to free memory.\n * @method shifty.Tweenable#dispose\n */\n dispose () {\n each(this, prop => delete this[prop]);\n }\n}\n\nassign(Tweenable, {\n formulas,\n\n /**\n * The {@link shifty.filter}s available for use. These filters are\n * automatically applied at tween-time by Shifty.\n * @member shifty.Tweenable.filters\n * @type {Object.}\n */\n filters: { token },\n\n /**\n * @method shifty.Tweenable.now\n * @static\n * @returns {number} The current timestamp\n */\n now: Date.now || (_ => +new Date())\n});\n\n/**\n * @method shifty.tween\n * @param {shifty.tweenConfig} [config={}]\n * @description Standalone convenience method that functions identically to\n * {@link shifty.Tweenable#tween}. You can use this to create tweens without\n * needing to set up a {@link shifty.Tweenable} instance.\n *\n * import { tween } from 'shifty';\n *\n * tween({ from: { x: 0 }, to: { x: 10 } }).then(\n * () => console.log('All done!')\n * );\n *\n * @returns {external:Promise}\n */\nexport function tween (config = {}) {\n const tweenable = new Tweenable();\n const promise = tweenable.tween(config);\n promise.tweenable = tweenable;\n\n return promise;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/tweenable.js","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./~/object-assign/index.js","import { Tweenable } from './tweenable';\nimport assign from 'object-assign';\n\n/**\n * The Bezier magic in this file is adapted/copied almost wholesale from\n * [Scripty2](https://github.com/madrobby/scripty2/blob/master/src/effects/transitions/cubic-bezier.js),\n * which was adapted from Apple code (which probably came from\n * [here](http://opensource.apple.com/source/WebCore/WebCore-955.66/platform/graphics/UnitBezier.h)).\n * Special thanks to Apple and Thomas Fuchs for much of this code.\n */\n\n/**\n * Copyright (c) 2006 Apple Computer, Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of the copyright holder(s) nor the names of any\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n// port of webkit cubic bezier handling by http://www.netzgesta.de/dev/\n\n/**\n * @private\n */\nfunction cubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {\n let ax = 0, bx = 0, cx = 0, ay = 0, by = 0, cy = 0;\n\n const sampleCurveX = t => ((ax * t + bx) * t + cx) * t;\n\n const sampleCurveY = t => ((ay * t + by) * t + cy) * t;\n\n const sampleCurveDerivativeX = t => (3 * ax * t + 2 * bx) * t + cx;\n\n const solveEpsilon = duration => 1 / (200 * duration);\n\n const fabs = n => n >= 0 ? n : 0 - n;\n\n const solveCurveX = (x, epsilon) => {\n let t0, t1, t2, x2, d2, i;\n\n for (t2 = x, i = 0; i < 8; i++) {\n x2 = sampleCurveX(t2) - x;\n\n if (fabs(x2) < epsilon) {\n return t2;\n }\n\n d2 = sampleCurveDerivativeX(t2);\n\n if (fabs(d2) < 1e-6) {\n break;\n }\n\n t2 = t2 - x2 / d2;\n }\n\n t0 = 0;\n t1 = 1;\n t2 = x;\n\n if (t2 < t0) {\n return t0;\n }\n\n if (t2 > t1) {\n return t1;\n }\n\n while (t0 < t1) {\n x2 = sampleCurveX(t2);\n\n if (fabs(x2 - x) < epsilon) {\n return t2;\n }\n\n if (x > x2) {\n t0 = t2;\n } else {\n t1 = t2;\n }\n\n t2 = (t1 - t0) * 0.5 + t0;\n }\n\n return t2; // Failure.\n };\n\n const solve = (x, epsilon) => sampleCurveY(solveCurveX(x, epsilon));\n\n cx = 3 * p1x;\n bx = 3 * (p2x - p1x) - cx;\n ax = 1 - cx - bx;\n cy = 3 * p1y;\n by = 3 * (p2y - p1y) - cy;\n ay = 1 - cy - by;\n\n return solve(t, solveEpsilon(duration));\n}\n// End ported code\n\n/**\n * getCubicBezierTransition(x1, y1, x2, y2) -> Function\n *\n * Generates a transition easing function that is compatible\n * with WebKit's CSS transitions `-webkit-transition-timing-function`\n * CSS property.\n *\n * The W3C has more information about CSS3 transition timing functions:\n * http://www.w3.org/TR/css3-transitions/#transition-timing-function_tag\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @return {function}\n * @private\n */\nconst getCubicBezierTransition = (x1, y1, x2, y2) =>\n pos =>\n cubicBezierAtTime(pos, x1, y1, x2, y2, 1);\n\n\n/**\n * Create a Bezier easing function and attach it to {@link\n * shifty.Tweenable.formulas}. This function gives you total control over the\n * easing curve. Matthew Lein's [Ceaser](http://matthewlein.com/ceaser/) is a\n * useful tool for visualizing the curves you can make with this function.\n * @method shifty.setBezierFunction\n * @param {string} name The name of the easing curve. Overwrites the old\n * easing function on {@link shifty.Tweenable.formulas} if it exists.\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @return {shifty.easingFunction} The {@link shifty.easingFunction} that was\n * attached to {@link shifty.Tweenable.formulas}.\n */\nexport const setBezierFunction = (name, x1, y1, x2, y2) =>\n Tweenable.formulas[name] =\n assign(getCubicBezierTransition(x1, y1, x2, y2), {\n displayName: name,\n x1,\n y1,\n x2,\n y2\n });\n\n/**\n * `delete` an easing function from {@link shifty.Tweenable.formulas}. Be\n * careful with this method, as it `delete`s whatever easing formula matches\n * `name` (which means you can delete standard Shifty easing functions).\n * @method shifty.unsetBezierFunction\n * @param {string} name The name of the easing function to delete.\n * @return {Boolean} Whether or not the functions was `delete`d.\n */\nexport const unsetBezierFunction = name => delete Tweenable.formulas[name];\n\n\n\n// WEBPACK FOOTER //\n// ./src/bezier.js","import { Tweenable, clone, composeEasingObject, tweenProps } from './tweenable';\n\n// Fake a Tweenable and patch some internals. This approach allows us to\n// skip uneccessary processing and object recreation, cutting down on garbage\n// collection pauses.\nconst mockTweenable = new Tweenable();\nmockTweenable._filterArgs = [];\n\n/**\n * Compute the midpoint of two Objects. This method effectively calculates a\n * specific frame of animation that {@link shifty.Tweenable#tween} does many times\n * over the course of a full tween.\n *\n * import { interpolate } from 'shifty';\n *\n * const interpolatedValues = interpolate({\n * width: '100px',\n * opacity: 0,\n * color: '#fff'\n * }, {\n * width: '200px',\n * opacity: 1,\n * color: '#000'\n * },\n * 0.5\n * );\n *\n * console.log(interpolatedValues);\n * // {opacity: 0.5, width: \"150px\", color: \"rgb(127,127,127)\"}\n *\n * @method shifty.interpolate\n * @param {Object} from The starting values to tween from.\n * @param {Object} to The ending values to tween to.\n * @param {number} position The normalized position value (between `0.0` and\n * `1.0`) to interpolate the values between `from` and `to` for. `from`\n * represents `0` and `to` represents `1`.\n * @param {Object.|string|shifty.easingFunction}\n * easing The easing curve(s) to calculate the midpoint against. You can\n * reference any easing function attached to {@link shifty.Tweenable.formulas},\n * or provide the {@link shifty.easingFunction}(s) directly. If omitted, this\n * defaults to \"linear\".\n * @param {number} [delay=0] Optional delay to pad the beginning of the\n * interpolated tween with. This increases the range of `position` from (`0`\n * through `1`) to (`0` through `1 + delay`). So, a delay of `0.5` would\n * increase all valid values of `position` to numbers between `0` and `1.5`.\n * @return {Object}\n */\nexport const interpolate =\n (from, to, position, easing, delay = 0) => {\n\n const current = clone(from);\n const easingObject = composeEasingObject(from, easing);\n\n mockTweenable.set({});\n mockTweenable._filterArgs = [current, from, to, easingObject];\n\n // Any defined value transformation must be applied\n mockTweenable._applyFilter('tweenCreated');\n mockTweenable._applyFilter('beforeTween');\n\n const interpolatedValues =\n tweenProps(position, current, from, to, 1, delay, easingObject);\n\n // Transform data in interpolatedValues back into its original format\n mockTweenable._applyFilter('afterTween');\n\n return interpolatedValues;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/interpolate.js","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n// WEBPACK FOOTER //\n// (webpack)/buildin/global.js","/*!\n * All equations are adapted from Thomas Fuchs'\n * [Scripty2](https://github.com/madrobby/scripty2/blob/master/src/effects/transitions/penner.js).\n *\n * Based on Easing Equations (c) 2003 [Robert\n * Penner](http://www.robertpenner.com/), all rights reserved. This work is\n * [subject to terms](http://www.robertpenner.com/easing_terms_of_use.html).\n */\n\n/*!\n * TERMS OF USE - EASING EQUATIONS\n * Open source under the BSD License.\n * Easing Equations (c) 2003 Robert Penner, all rights reserved.\n */\n\n/**\n * @member shifty.Tweenable.formulas\n * @description A static Object of {@link shifty.easingFunction}s that can by\n * used by Shifty. The default values are defined in\n * [`easing-functions.js`](easing-functions.js.html), but you can add your own\n * {@link shifty.easingFunction}s by defining them as keys to this Object.\n *\n * Shifty ships with an implementation of [Robert Penner's easing\n * equations](http://robertpenner.com/easing/), as adapted from\n * [Scripty2](https://github.com/madrobby/scripty2/blob/master/src/effects/transitions/penner.js)'s\n * implementation.\n *

See the Pen Shifty - Easing formula\n * names by Jeremy Kahn (@jeremyckahn) on CodePen.

\n * \n * @type {Object.}\n * @static\n */\nexport const linear = pos => pos;\n\nexport const easeInQuad = pos => Math.pow(pos, 2);\n\nexport const easeOutQuad = pos => -(Math.pow((pos - 1), 2) - 1);\n\nexport const easeInOutQuad = pos =>\n (pos /= 0.5) < 1 ?\n 0.5 * Math.pow(pos,2) :\n -0.5 * ((pos -= 2) * pos - 2);\n\nexport const easeInCubic = pos => Math.pow(pos, 3);\n\nexport const easeOutCubic = pos => Math.pow((pos - 1), 3) + 1;\n\nexport const easeInOutCubic = pos =>\n (pos /= 0.5) < 1 ?\n 0.5 * Math.pow(pos,3) :\n 0.5 * (Math.pow((pos - 2),3) + 2);\n\nexport const easeInQuart = pos => Math.pow(pos, 4);\n\nexport const easeOutQuart = pos => -(Math.pow((pos - 1), 4) - 1);\n\nexport const easeInOutQuart = pos =>\n (pos /= 0.5) < 1 ?\n 0.5 * Math.pow(pos,4) :\n -0.5 * ((pos -= 2) * Math.pow(pos,3) - 2);\n\nexport const easeInQuint = pos => Math.pow(pos, 5);\n\nexport const easeOutQuint = pos => Math.pow((pos - 1), 5) + 1;\n\nexport const easeInOutQuint = pos =>\n (pos /= 0.5) < 1 ?\n 0.5 * Math.pow(pos,5) :\n 0.5 * (Math.pow((pos - 2),5) + 2);\n\nexport const easeInSine = pos => -Math.cos(pos * (Math.PI / 2)) + 1;\n\nexport const easeOutSine = pos => Math.sin(pos * (Math.PI / 2));\n\nexport const easeInOutSine = pos => -0.5 * (Math.cos(Math.PI * pos) - 1);\n\nexport const easeInExpo = pos => (pos === 0) ? 0 : Math.pow(2, 10 * (pos - 1));\n\nexport const easeOutExpo = pos => (pos === 1) ? 1 : -Math.pow(2, -10 * pos) + 1;\n\nexport const easeInOutExpo = pos => {\n if (pos === 0) {\n return 0;\n }\n\n if (pos === 1) {\n return 1;\n }\n\n if ((pos /= 0.5) < 1) {\n return 0.5 * Math.pow(2,10 * (pos - 1));\n }\n\n return 0.5 * (-Math.pow(2, -10 * --pos) + 2);\n};\n\nexport const easeInCirc = pos => -(Math.sqrt(1 - (pos * pos)) - 1);\n\nexport const easeOutCirc = pos => Math.sqrt(1 - Math.pow((pos - 1), 2));\n\nexport const easeInOutCirc = pos =>\n ((pos /= 0.5) < 1) ?\n -0.5 * (Math.sqrt(1 - pos * pos) - 1) :\n 0.5 * (Math.sqrt(1 - (pos -= 2) * pos) + 1);\n\nexport const easeOutBounce = pos => {\n if (pos < (1 / 2.75)) {\n return (7.5625 * pos * pos);\n } else if (pos < (2 / 2.75)) {\n return (7.5625 * (pos -= (1.5 / 2.75)) * pos + 0.75);\n } else if (pos < (2.5 / 2.75)) {\n return (7.5625 * (pos -= (2.25 / 2.75)) * pos + 0.9375);\n } else {\n return (7.5625 * (pos -= (2.625 / 2.75)) * pos + 0.984375);\n }\n};\n\nexport const easeInBack = pos => {\n const s = 1.70158;\n return pos * pos * ((s + 1) * pos - s);\n};\n\nexport const easeOutBack = pos => {\n const s = 1.70158;\n return (pos = pos - 1) * pos * ((s + 1) * pos + s) + 1;\n};\n\nexport const easeInOutBack = pos => {\n let s = 1.70158;\n if ((pos /= 0.5) < 1) {\n return 0.5 * (pos * pos * (((s *= (1.525)) + 1) * pos - s));\n }\n return 0.5 * ((pos -= 2) * pos * (((s *= (1.525)) + 1) * pos + s) + 2);\n};\n\nexport const elastic = pos =>\n -1 * Math.pow(4,-8 * pos) * Math.sin((pos * 6 - 1) * (2 * Math.PI) / 2) + 1;\n\nexport const swingFromTo = pos => {\n let s = 1.70158;\n return ((pos /= 0.5) < 1) ?\n 0.5 * (pos * pos * (((s *= (1.525)) + 1) * pos - s)) :\n 0.5 * ((pos -= 2) * pos * (((s *= (1.525)) + 1) * pos + s) + 2);\n};\n\nexport const swingFrom = pos => {\n const s = 1.70158;\n return pos * pos * ((s + 1) * pos - s);\n};\n\nexport const swingTo = pos => {\n const s = 1.70158;\n return (pos -= 1) * pos * ((s + 1) * pos + s) + 1;\n};\n\nexport const bounce = pos => {\n if (pos < (1 / 2.75)) {\n return (7.5625 * pos * pos);\n } else if (pos < (2 / 2.75)) {\n return (7.5625 * (pos -= (1.5 / 2.75)) * pos + 0.75);\n } else if (pos < (2.5 / 2.75)) {\n return (7.5625 * (pos -= (2.25 / 2.75)) * pos + 0.9375);\n } else {\n return (7.5625 * (pos -= (2.625 / 2.75)) * pos + 0.984375);\n }\n};\n\nexport const bouncePast = pos => {\n if (pos < (1 / 2.75)) {\n return (7.5625 * pos * pos);\n } else if (pos < (2 / 2.75)) {\n return 2 - (7.5625 * (pos -= (1.5 / 2.75)) * pos + 0.75);\n } else if (pos < (2.5 / 2.75)) {\n return 2 - (7.5625 * (pos -= (2.25 / 2.75)) * pos + 0.9375);\n } else {\n return 2 - (7.5625 * (pos -= (2.625 / 2.75)) * pos + 0.984375);\n }\n};\n\nexport const easeFromTo = pos =>\n ((pos /= 0.5) < 1) ?\n 0.5 * Math.pow(pos,4) :\n -0.5 * ((pos -= 2) * Math.pow(pos,3) - 2);\n\nexport const easeFrom = pos => Math.pow(pos, 4);\n\nexport const easeTo = pos => Math.pow(pos, 0.25);\n\n\n\n// WEBPACK FOOTER //\n// ./src/easing-functions.js","/**\n * @namespace shifty\n */\n\nexport { Tweenable, tween } from './tweenable';\nexport { interpolate } from './interpolate';\nexport { setBezierFunction, unsetBezierFunction } from './bezier';\n\n/**\n * @external Promise\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise}\n */\n\n/**\n * @callback {Function} shifty.easingFunction\n * @param {number} position The normalized (0-1) position of the tween.\n * @return {number} The curve-adjusted value.\n */\n\n/**\n * @callback {Function} shifty.startFunction\n * @param {Object} state The current state of the tween.\n * @param {Object} [attachment] Cached data provided from a {@link\n * shifty.tweenConfig}.\n */\n\n/**\n * Gets called for every tick of the tween. This function is not called on the\n * final step of the animation.\n * @callback {Function} shifty.stepFunction\n * @param {Object} state The current state of the tween.\n * @param {Object|undefined} attachment Cached data provided from a {@link\n * shifty.tweenConfig}.\n * @param {number} timeElapsed The time elapsed since the start of the tween.\n */\n\n/**\n * @typedef {Object} shifty.tweenConfig\n * @property {Object} [from] Starting position. If omitted, {@link\n * shifty.Tweenable#get} is used.\n * @property {Object} [to] Ending position. The keys of this Object should\n * match those of `to`.\n * @property {number} [duration] How many milliseconds to animate for.\n * @property {number} [delay] How many milliseconds to wait before starting the\n * tween.\n * @property {shifty.startFunction} [start] Executes when the tween begins.\n * @property {shifty.stepFunction} [step] Executes on every tick.\n * @property\n * {Object.|string|shifty.easingFunction}\n * [easing] Easing curve name(s) or {@link shifty.easingFunction}(s) to apply\n * to the properties of the tween. If this is an Object, the keys should\n * correspond to `to`/`from`. You can learn more about this in the {@tutorial\n * easing-function-in-depth} tutorial.\n * @property {Object} [attachment] Cached value that is passed to {@link\n * shifty.startFunction}/{@link shifty.stepFunction}.\n * @property {Function} [promise] Promise constructor for when you want\n * to use Promise library or polyfill Promises in unsupported environments.\n */\n\n/**\n * Is called when a tween is created. This should convert all of the\n * properties of each of its arguments to `Numbers`.\n * @callback {Function} shifty.tweenCreatedFilter\n * @param {Object} currentState Gets directly mutated by this function.\n * @param {Object} fromState Gets directly mutated by this function.\n * @param {Object} toState Gets directly mutated by this function.\n */\n\n/**\n * Is called right before a tween starts. This should convert all of the\n * properties of each of `currentState`, `fromState`, and `toState` to\n * `Numbers`.\n * @callback {Function} shifty.beforeTweenFilter\n * @param {Object} currentState Gets directly mutated by this function.\n * @param {Object} fromState Gets directly mutated by this function.\n * @param {Object} toState Gets directly mutated by this function.\n * @param {Object.} easingObject The `easing`\n * that was passed to {@link shifty.Tweenable#setConfig}.\n */\n\n/**\n * Is called right after a tween ends. This should convert all of the\n * properties of each of `currentState`, `fromState`, and `toState` to\n * `Numbers`.\n * @callback {Function} shifty.afterTweenFilter\n * @param {Object} currentState Gets directly mutated by this function.\n * @param {Object} fromState Gets directly mutated by this function.\n * @param {Object} toState Gets directly mutated by this function.\n * @param {Object.} easingObject The `easing`\n * that was passed to {@link shifty.Tweenable#setConfig}.\n */\n\n/**\n * An Object that contains functions that called at key points in a tween's\n * lifecycle. Shifty can only process `Number`s internally, but filters can\n * expand support for any type of data. This is the mechanism that powers\n * [string interpolation]{@tutorial string-interpolation}.\n * @typedef {Object} shifty.filter\n * @property {shifty.tweenCreatedFilter} tweenCreated Is called when a tween is\n * created.\n * @property {shifty.beforeTweenFilter} beforeTween Is called right before a\n * tween starts.\n * @property {shifty.afterTweenFilter} afterTween Is called right after a tween\n * ends.\n */\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js","import { Tweenable, each } from './tweenable';\n\nconst R_NUMBER_COMPONENT = /(\\d|\\-|\\.)/;\nconst R_FORMAT_CHUNKS = /([^\\-0-9\\.]+)/g;\nconst R_UNFORMATTED_VALUES = /[0-9.\\-]+/g;\nconst R_RGB = (() => {\n const number = R_UNFORMATTED_VALUES.source;\n const comma = /,\\s*/.source;\n\n return new RegExp(\n `rgb\\\\(${number}${comma}${number}${comma}${number}\\\\)`,\n 'g'\n );\n})();\nconst R_RGB_PREFIX = /^.*\\(/;\nconst R_HEX = /#([0-9]|[a-f]){3,6}/gi;\nconst VALUE_PLACEHOLDER = 'VAL';\n\n// HELPERS\n\n/**\n * @param {Array.number} rawValues\n * @param {string} prefix\n *\n * @return {Array.}\n * @private\n */\nconst getFormatChunksFrom = (rawValues, prefix) =>\n rawValues.map((val, i) => `_${prefix}_${i}`);\n\n/**\n * @param {string} formattedString\n *\n * @return {string}\n * @private\n */\nconst getFormatStringFrom = formattedString => {\n let chunks = formattedString.match(R_FORMAT_CHUNKS);\n\n if (!chunks) {\n // chunks will be null if there were no tokens to parse in\n // formattedString (for example, if formattedString is '2'). Coerce\n // chunks to be useful here.\n chunks = ['', ''];\n\n // If there is only one chunk, assume that the string is a number\n // followed by a token...\n // NOTE: This may be an unwise assumption.\n } else if (chunks.length === 1 ||\n // ...or if the string starts with a number component (\".\", \"-\", or a\n // digit)...\n formattedString.charAt(0).match(R_NUMBER_COMPONENT)) {\n\n // ...prepend an empty string here to make sure that the formatted number\n // is properly replaced by VALUE_PLACEHOLDER\n chunks.unshift('');\n }\n\n return chunks.join(VALUE_PLACEHOLDER);\n};\n\n/**\n * Convert a base-16 number to base-10.\n *\n * @param {Number|String} hex The value to convert\n *\n * @returns {Number} The base-10 equivalent of `hex`.\n * @private\n */\nfunction hexToDec (hex) {\n return parseInt(hex, 16);\n}\n\n/**\n * Convert a hexadecimal string to an array with three items, one each for\n * the red, blue, and green decimal values.\n *\n * @param {string} hex A hexadecimal string.\n *\n * @returns {Array.} The converted Array of RGB values if `hex` is a\n * valid string, or an Array of three 0's.\n * @private\n */\nconst hexToRGBArray = hex => {\n hex = hex.replace(/#/, '');\n\n // If the string is a shorthand three digit hex notation, normalize it to\n // the standard six digit notation\n if (hex.length === 3) {\n hex = hex.split('');\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n\n return [\n hexToDec(hex.substr(0, 2)),\n hexToDec(hex.substr(2, 2)),\n hexToDec(hex.substr(4, 2))\n ];\n};\n\n/**\n * @param {string} hexString\n *\n * @return {string}\n * @private\n */\nconst convertHexToRGB = hexString =>\n `rgb(${hexToRGBArray(hexString).join(',')})`;\n\n/**\n * TODO: Can this be rewritten to leverage String#replace more efficiently?\n * Runs a filter operation on all chunks of a string that match a RegExp\n *\n * @param {RegExp} pattern\n * @param {string} unfilteredString\n * @param {function(string)} filter\n *\n * @return {string}\n * @private\n */\nconst filterStringChunks = (pattern, unfilteredString, filter) => {\n const patternMatches = unfilteredString.match(pattern);\n let filteredString = unfilteredString.replace(pattern, VALUE_PLACEHOLDER);\n\n if (patternMatches) {\n patternMatches.forEach(match =>\n filteredString = filteredString.replace(VALUE_PLACEHOLDER, filter(match))\n );\n }\n\n return filteredString;\n};\n\n/**\n * @param {string} str\n *\n * @return {string}\n * @private\n */\nconst sanitizeHexChunksToRGB = str =>\n filterStringChunks(R_HEX, str, convertHexToRGB);\n\n/**\n * Convert all hex color values within a string to an rgb string.\n *\n * @param {Object} stateObject\n *\n * @return {Object} The modified obj\n * @private\n */\nconst sanitizeObjectForHexProps = stateObject => {\n each(stateObject, prop => {\n const currentProp = stateObject[prop];\n\n if (typeof currentProp === 'string' && currentProp.match(R_HEX)) {\n stateObject[prop] = sanitizeHexChunksToRGB(currentProp);\n }\n });\n};\n\n/**\n * @param {string} rgbChunk\n *\n * @return {string}\n * @private\n */\nconst sanitizeRGBChunk = rgbChunk => {\n const numbers = rgbChunk.match(R_UNFORMATTED_VALUES).map(Math.floor);\n const prefix = rgbChunk.match(R_RGB_PREFIX)[0];\n\n return `${prefix}${numbers.join(',')})`;\n};\n\n/**\n * Check for floating point values within rgb strings and round them.\n *\n * @param {string} formattedString\n *\n * @return {string}\n * @private\n */\nconst sanitizeRGBChunks = formattedString =>\n filterStringChunks(R_RGB, formattedString, sanitizeRGBChunk);\n\n/**\n * Note: It's the duty of the caller to convert the Array elements of the\n * return value into numbers. This is a performance optimization.\n *\n * @param {string} formattedString\n *\n * @return {Array.|null}\n * @private\n */\nconst getValuesFrom = formattedString =>\n formattedString.match(R_UNFORMATTED_VALUES);\n\n/**\n * @param {Object} stateObject\n *\n * @return {Object} An Object of formatSignatures that correspond to\n * the string properties of stateObject\n * @private\n */\nconst getFormatSignatures = stateObject => {\n const signatures = {};\n\n each(stateObject, propertyName => {\n let property = stateObject[propertyName];\n\n if (typeof property === 'string') {\n signatures[propertyName] = {\n formatString: getFormatStringFrom(property),\n chunkNames: getFormatChunksFrom(\n getValuesFrom(property),\n propertyName\n )\n };\n }\n });\n\n return signatures;\n};\n\n/**\n * @param {Object} stateObject\n * @param {Object} formatSignatures\n * @private\n */\nconst expandFormattedProperties = (stateObject, formatSignatures) => {\n each(formatSignatures, propertyName => {\n getValuesFrom(stateObject[propertyName]).forEach((number, i) =>\n stateObject[formatSignatures[propertyName].chunkNames[i]] = +number\n );\n\n delete stateObject[propertyName];\n });\n};\n\n/**\n * @param {Object} stateObject\n * @param {Array.} chunkNames\n *\n * @return {Object} The extracted value chunks.\n * @private\n */\nconst extractPropertyChunks = (stateObject, chunkNames) => {\n const extractedValues = {};\n\n chunkNames.forEach(chunkName => {\n extractedValues[chunkName] = stateObject[chunkName];\n delete stateObject[chunkName];\n });\n\n return extractedValues;\n};\n\n/**\n * @param {Object} stateObject\n * @param {Array.} chunkNames\n *\n * @return {Array.}\n * @private\n */\nconst getValuesList = (stateObject, chunkNames) =>\n chunkNames.map(chunkName => stateObject[chunkName]);\n\n/**\n * @param {string} formatString\n * @param {Array.} rawValues\n *\n * @return {string}\n * @private\n */\nconst getFormattedValues = (formatString, rawValues) => {\n rawValues.forEach(rawValue =>\n formatString = formatString.replace(\n VALUE_PLACEHOLDER, +rawValue.toFixed(4)\n )\n );\n\n return formatString;\n};\n\n/**\n * @param {Object} stateObject\n * @param {Object} formatSignatures\n * @private\n */\nconst collapseFormattedProperties = (stateObject, formatSignatures) => {\n each(formatSignatures, prop => {\n const { chunkNames, formatString } = formatSignatures[prop];\n\n const currentProp = getFormattedValues(\n formatString,\n getValuesList(\n extractPropertyChunks(\n stateObject,\n chunkNames\n ),\n chunkNames\n )\n );\n\n stateObject[prop] = sanitizeRGBChunks(currentProp);\n });\n};\n\n/**\n * @param {Object} easingObject\n * @param {Object} tokenData\n * @private\n */\nconst expandEasingObject = (easingObject, tokenData) => {\n each(tokenData, prop => {\n const { chunkNames } = tokenData[prop];\n const easing = easingObject[prop];\n\n if (typeof easing === 'string') {\n const easingNames = easing.split(' ');\n const defaultEasing = easingNames[easingNames.length - 1];\n\n chunkNames.forEach((chunkName, i) =>\n easingObject[chunkName] = easingNames[i] || defaultEasing\n );\n } else { // easing is a function\n chunkNames.forEach(chunkName =>\n easingObject[chunkName] = easing\n );\n }\n\n delete easingObject[prop];\n });\n};\n\n/**\n * @param {Object} easingObject\n * @param {Object} tokenData\n * @private\n */\nconst collapseEasingObject = (easingObject, tokenData) => {\n each(tokenData, prop => {\n const { chunkNames } = tokenData[prop];\n const { length } = chunkNames;\n const firstEasing = easingObject[chunkNames[0]];\n\n if (typeof firstEasing === 'string') {\n easingObject[prop] = chunkNames.map(chunkName => {\n const easingName = easingObject[chunkName];\n delete easingObject[chunkName];\n\n return easingName;\n }).join(' ');\n } else { // firstEasing is a function\n easingObject[prop] = firstEasing;\n }\n });\n};\n\nexport function tweenCreated (currentState, fromState, toState) {\n [currentState, fromState, toState].forEach(sanitizeObjectForHexProps);\n\n this._tokenData = getFormatSignatures(currentState);\n}\n\nexport function beforeTween (currentState, fromState, toState, easingObject) {\n const { _tokenData } = this;\n expandEasingObject(easingObject, _tokenData);\n\n [currentState, fromState, toState].forEach(state =>\n expandFormattedProperties(state, _tokenData)\n );\n}\n\nexport function afterTween (currentState, fromState, toState, easingObject) {\n const { _tokenData } = this;\n [currentState, fromState, toState].forEach(state =>\n collapseFormattedProperties(state, _tokenData)\n );\n\n collapseEasingObject(easingObject, _tokenData);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/token.js"],"sourceRoot":""}